|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 baqiao 于 2020-5-18 13:24 编辑
) v" y- w3 r5 x- N8 F1 o( a. I% F4 e0 t& i; r
在概率论和信息论中,两个随机变量的互信息(Mutual Information,简称MI)或转移信息(transinformation)是变量间相互依赖性的量度。不同于相关系数,互信息并不局限于实值随机变量,它更加一般且决定着联合分布 p(X,Y) 和分解的边缘分布的乘积 p(X)p(Y) 的相似程度。互信息(Mutual Information)是度量两个事件集合之间的相关性(mutual dependence)。互信息最常用的单位是bit。
5 v' i) [! _/ m5 `1 @
8 A1 r* K1 U, `9 g- x互信息的定义
7 x1 I* K' l4 ~正式地,两个离散随机变量 X 和 Y 的互信息可以定义为:
# r8 A% K& ?; I3 N1 `/ g+ e F1 Y N9 `: [
其中 p(x,y) 是 X 和 Y 的联合概率分布函数,而p(x)和p(y)分别是 X 和 Y 的边缘概率分布函数。
' R' |) y, t' Q: h0 t$ w: p9 O
4 r5 y" I( r* b8 @在连续随机变量的情形下,求和被替换成了二重定积分: ; e4 ^4 u+ k& Y8 q# H
, ~, D& i% i$ _! i( k
其中 p(x,y) 当前是 X 和 Y 的联合概率密度函数,而p(x)和p(y)分别是 X 和 Y 的边缘概率密度函数。+ K {, g! `# J' j+ M
+ x5 J7 f% T* I6 f5 c+ h互信息量I(xi;yj)在联合概率空间P(XY)中的统计平均值。 平均互信息I(X;Y)克服了互信息量I(xi;yj)的随机性,成为一个确定的量。如果对数以 2 为基底,互信息的单位是bit。7 F7 S) a+ {* g/ I$ x/ Q6 c
% ]! A0 h+ U( @- ]# L8 j
直观上,互信息度量 X 和 Y 共享的信息:它度量知道这两个变量其中一个,对另一个不确定度减少的程度。例如,如果 X 和 Y 相互独立,则知道 X 不对 Y 提供任何信息,反之亦然,所以它们的互信息为零。在另一个极端,如果 X 是 Y 的一个确定性函数,且 Y 也是 X 的一个确定性函数,那么传递的所有信息被 X 和 Y 共享:知道 X 决定 Y 的值,反之亦然。因此,在此情形互信息与 Y(或 X)单独包含的不确定度相同,称作 Y(或 X)的熵。而且,这个互信息与 X 的熵和 Y 的熵相同。(这种情形的一个非常特殊的情况是当 X 和 Y 为相同随机变量时。)3 v* ^* n5 d; @# f) n" L
w3 I# }" Z1 R- n" E! H
互信息是 X 和 Y 联合分布相对于假定 X 和 Y 独立情况下的联合分布之间的内在依赖性。于是互信息以下面方式度量依赖性:I(X; Y) = 0 当且仅当 X 和 Y 为独立随机变量。从一个方向很容易看出:当 X 和 Y 独立时,p(x,y) = p(x) p(y),因此:
$ Q4 I; h7 Q1 r( }) u
8 ~. V" [$ e, p$ R1 ]6 F
此外,互信息是非负的(即 I(X;Y) ≥ 0; 见下文),而且是对称的(即 I(X;Y) = I(Y;X))。
) a( W! T1 P( s; J B6 d' _
5 [1 \2 \3 V, w
, ^. E+ B3 ?: V# x互信息特征选择算法的步骤
1 i7 g% p4 o9 u( v0 {# o! t6 Q5 V$ |①划分数据集 1 [8 x% Z) t3 j; r! A+ _9 d
②利用互信息对特征进行排序 4 S" w& y: C; a
③选择前n个特征利用SVM进行训练
1 q6 Z$ I- k4 |$ `④在测试集上评价特征子集计算错误率
" I* c; D+ s0 k. j! N9 E代码 0 T S7 |! D2 y
注意使用的数据集是dlbcl,大概五千多维,可以从UCI上下载,最终选择前100特征进行训练。& O; @) j+ C: T
e4 \9 n% u1 i* _" ?) y主函数代码:
8 B) A8 `* I0 J4 N7 u& A# M. r
! a# D2 U8 [: o& W* Mclear all8 i- ` O' u6 P" n% n
close all/ }4 j2 E8 C+ J+ X
clc;9 R* E4 r. X( |
[X_train,Y_train,X_test,Y_test] = divide_dlbcl();
: W7 V6 d4 h9 U- n. G g) jY_train(Y_train==0)=-1;; B: A( R" h% @( }
Y_test(Y_test==0)=-1;9 v. ?; }7 `# @$ E9 J M+ `
% number of features3 q) G' n# X' ^" j4 N
numF = size(X_train,2);
4 ]4 o0 u" A* L$ q$ O& g! _
' r4 }: {8 D. k' U- S0 Z* }6 A: u M7 g" a$ S9 `" ?& o
2 H4 c0 n. @' B# e$ w[ ranking , w] = mutInfFS( X_train, Y_train, numF );1 c3 w5 ~$ a2 S% V( t
k = 100; % select the Top 2 features
% D9 V, B' k) ?# g6 g2 r9 s) wsvmStruct = svmtrain(X_train(:,ranking(1:k)),Y_train,'showplot',true);
0 ]/ d( k( F/ ~. `C = svmclassify(svmStruct,X_test(:,ranking(1:k)),'showplot',true);# l3 |, B+ O# O4 F: Y
err_rate = sum(Y_test~= C)/size(X_test,1); % mis-classification rate5 R8 L# c1 C5 A
conMat = confusionmat(Y_test,C); % the confusion matrix1 H( _& J( j" U5 @
fprintf('\nAccuracy: %.2f%%, Error-Rate: %.2f \n',100*(1-err_rate),err_rate);/ ~" }# Z2 G7 q, d
: X2 D$ Q8 _- j$ `+ o. J3 c
( ?4 L1 L6 F! ~& ^3 y9 G' W/ Y1 hmutInfFS.m' |. d1 E/ ` C! S( _. t4 z, g
# k" l' K) T u: m" o
function [ rank , w] = mutInfFS( X,Y,numF ); p' E: T3 ?: q. Z4 r5 P
rank = [];1 y3 h7 x# ?7 T) n- D& N0 p, _
for i = 1:size(X,2)* {% u! ~- B0 N X4 g
rank = [rank; -muteinf(X(:,i),Y) i];; F: q, i6 l6 t' B
end;
/ a5 ^, r7 ], ^! q' vrank = sortrows(rank,1);
0 x2 \1 K$ F0 |w = rank(1:numF, 1);' O- y1 V6 C5 \; D; P5 H& Q
rank = rank(1:numF, 2);
4 ^9 b2 V2 F+ X. ?$ \* |# ]2 F, u' o* h: |- o) I
end
: v9 g, ?+ G2 X+ A" n! t* ^$ v6 p4 I# l
, N! d% e5 c( n9 dmuteinf.m
' t5 J. V$ g' A7 T, ~& ^0 W' ^( |3 @5 D# G! _8 ?$ @7 K" L+ Q
function info = muteinf(A, Y)
. e$ n8 W5 v2 @3 Jn = size(A,1);%实例数量) ~1 b- O9 z% q! y
Z = [A Y];%所有实例的维度值及标签
& ^1 s0 P8 p3 H$ bif(n/10 > 20); x7 X# j5 y) q4 a$ X( m
nbins = 20;
) u5 c: M5 y6 J+ \- [else5 Q; K8 \% R! D* f; ]
nbins = max(floor(n/10),10);%设置区间的个数
% e9 E9 P+ k) M2 q+ Bend;2 B, {( d2 r2 k+ k
pA = hist(A, nbins);%min(A)到max(A)划分出nbins个区间出来,求每个区间的概率
; w: x& r5 [& a+ a0 R3 npA = pA ./ n;%除以实例数量
. j4 x+ A! O' J/ P4 J* B2 K
1 R+ @. Z) [8 _: di = find(pA == 0);9 \) N' s8 v2 K7 x' n# {# Y
pA(i) = 0.00001;%不能使某一区间的概率为0& Y: F2 O2 J) p% }
; e6 t1 ^: R; ~! |7 M8 F1 n
od = size(Y,2);%一个维度7 }' K" M2 P- X& A( [ c7 F6 P
cl = od;9 b# L8 i$ V! q- J
%下面是求实例不同标签的的概率值,也就是频率
& h/ r4 D: P( [' { }5 Gif(od == 1)
% Y) n* s; k$ N. o pY = [length(find(Y==+1)) length(find(Y==-1))] / n;
( g. X+ O8 d6 n cl = 2;
1 s& T* R! ]2 F! J5 ~3 zelse
% M9 l9 _% v0 K& i$ G5 } pY = zeros(1,od);3 f# c, b6 h; H& f7 g0 T! T
for i=1: od
( \$ n/ V3 g- C" K pY(i) = length(find(Y==+1));) U' o. q3 {6 r6 F8 n
end;7 T$ ]4 Q. r- Z2 m) o7 v
pY = pY / n;
% Y: z- p& R! V* I) N" Eend;$ t: ~' ^* m, o
p = zeros(cl,nbins);
; }% `$ S8 ?# p3 s, j& J$ Zrx = abs(max(A) - min(A)) / nbins;%每个区间长度
. T2 S2 J8 I/ a0 Z$ X5 i( L- W6 Nfor i = 1:cl
5 s+ U, R: q6 L" f; s4 g xl = min(A);%变量的下界
/ o5 r9 K: m3 a for j = 1:nbins' A' Q. M3 Y5 i2 E$ y% ]
if(i == 2) && (od == 1)
4 }2 E& W% \" }+ p interval = (xl <= Z(:,1)) & (Z(:,2) == -1);
1 S7 o9 G r* p( O' l' e/ E4 m3 G else
3 i3 ^( }; Y: K9 `8 L! N4 X interval = (xl <= Z(:,1)) & (Z(:,i+1) == +1);2 P% E# [5 ]' f2 B$ Q/ u
end;0 @- [1 E7 i4 E7 n* w3 u$ t9 t, \
if(j < nbins)5 v: t3 u; B0 B) i: K! x
interval = interval & (Z(:,1) < xl + rx);3 Q( g5 D! v' p. P
end;
" W, Z, F0 D3 \6 P. ?$ {. z4 @ %find(interval)& Z2 D8 V6 Q+ j& M! ~
p(i,j) = length(find(interval));
/ p$ R0 M# ]% a( x% y! b0 h+ }. B. X
7 |) v2 c9 i3 g2 Y; d' J. S if p(i,j) == 0 % hack!
# k3 ~$ u( G1 q2 [ p(i,j) = 0.00001;1 z1 a# R5 |' I/ R' O& r3 x- v
end
; q0 R4 x! y- W( r( F, O, w) H9 N, u/ x8 s) c
xl = xl + rx;+ H3 ^: C a- i$ P; P
end;! \/ |% v4 P! g, v$ m" D L
end;* a' n ~+ ]( M1 P6 b
HA = -sum(pA .* log(pA));%计算当前维度的信息熵
4 a" p9 X3 w" wHY = -sum(pY .* log(pY));%计算标签的信息熵* l; B3 j7 Q8 K# u" b
pA = repmat(pA,cl,1);8 l* Z+ C1 S9 Q
pY = repmat(pY',1,nbins);
/ |9 p, M. B, L6 np = p ./ n;& [9 h) l) }0 l" ?, Z n5 t# e7 M; Q
info = sum(sum(p .* log(p ./ (pA .* pY))));
; m3 {8 c6 Q2 ] uinfo = 2 * info ./ (HA + HY);%计算互信息
9 L; o' S O% g* f4 w5 I5 i( Y1 U8 q% s& R7 S& J* J) U9 x( s9 k3 D
7 b4 q z' m# P) u8 \0 l
前100个特征的效果:
, W* j9 {. n, N& W" H3 }' d
( V$ a2 T2 R; A4 A) p3 eAccuracy: 86.36%, Error-Rate: 0.14# N3 U$ }. N$ J; J; ~( a4 D
" g5 ?9 P9 @* S选择前两个特征进行训练(压缩率接近100%,把上述代码中的K设为2即可)的二维图:
9 T& P. |7 T( i
+ k2 t7 C* ]- eAccuracy: 75.00%, Error-Rate: 0.25
* d. I7 ~: w; M% L% Z9 B/ U! s* }
, y1 L& F. Z+ r- ^) N3 i5 B; k! O2 c' \) P
|
|