|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 baqiao 于 2020-5-18 13:24 编辑 _. t1 o3 G$ w- m ?
* m2 J) W, y5 a7 \' Q7 J在概率论和信息论中,两个随机变量的互信息(Mutual Information,简称MI)或转移信息(transinformation)是变量间相互依赖性的量度。不同于相关系数,互信息并不局限于实值随机变量,它更加一般且决定着联合分布 p(X,Y) 和分解的边缘分布的乘积 p(X)p(Y) 的相似程度。互信息(Mutual Information)是度量两个事件集合之间的相关性(mutual dependence)。互信息最常用的单位是bit。/ `9 b% b5 ]/ ~4 h
/ v: `1 o n( |6 n3 r互信息的定义
- b, |/ Y. ?6 m0 Z: a正式地,两个离散随机变量 X 和 Y 的互信息可以定义为:. [3 }- m* x Y2 O
3 H' q9 k* }- D% A& I2 V0 O
其中 p(x,y) 是 X 和 Y 的联合概率分布函数,而p(x)和p(y)分别是 X 和 Y 的边缘概率分布函数。
2 L @% E3 b( R8 Y& V' \2 ^
2 m9 j5 }: `6 I
在连续随机变量的情形下,求和被替换成了二重定积分:
! a, {) u, t# ~
( h) O, a# k+ _" k! V
其中 p(x,y) 当前是 X 和 Y 的联合概率密度函数,而p(x)和p(y)分别是 X 和 Y 的边缘概率密度函数。3 C" g$ ^+ S8 K! g
1 F0 }% w8 x5 v3 {5 @1 g2 O4 [# p互信息量I(xi;yj)在联合概率空间P(XY)中的统计平均值。 平均互信息I(X;Y)克服了互信息量I(xi;yj)的随机性,成为一个确定的量。如果对数以 2 为基底,互信息的单位是bit。6 c) h. y; [/ V& y& `
, K0 U) G+ t0 A0 G直观上,互信息度量 X 和 Y 共享的信息:它度量知道这两个变量其中一个,对另一个不确定度减少的程度。例如,如果 X 和 Y 相互独立,则知道 X 不对 Y 提供任何信息,反之亦然,所以它们的互信息为零。在另一个极端,如果 X 是 Y 的一个确定性函数,且 Y 也是 X 的一个确定性函数,那么传递的所有信息被 X 和 Y 共享:知道 X 决定 Y 的值,反之亦然。因此,在此情形互信息与 Y(或 X)单独包含的不确定度相同,称作 Y(或 X)的熵。而且,这个互信息与 X 的熵和 Y 的熵相同。(这种情形的一个非常特殊的情况是当 X 和 Y 为相同随机变量时。)9 ]# P( [. p/ X
" M# {1 z0 ~7 _
互信息是 X 和 Y 联合分布相对于假定 X 和 Y 独立情况下的联合分布之间的内在依赖性。于是互信息以下面方式度量依赖性:I(X; Y) = 0 当且仅当 X 和 Y 为独立随机变量。从一个方向很容易看出:当 X 和 Y 独立时,p(x,y) = p(x) p(y),因此: 4 [2 `* G% I% L, l% N* H) I2 ?
+ A6 N* |+ t! `2 N: g& c: K
此外,互信息是非负的(即 I(X;Y) ≥ 0; 见下文),而且是对称的(即 I(X;Y) = I(Y;X))。
; @% f3 h/ I+ h# t& F, h5 W
7 l; r u/ @6 z
: s" i: c: u- T- _7 N. V/ [互信息特征选择算法的步骤
9 k! {* @3 y+ ~①划分数据集 * ^% z5 Q8 v( Y
②利用互信息对特征进行排序
) S2 l" h2 z; v/ ^) ?③选择前n个特征利用SVM进行训练
2 x+ g5 ~6 ~7 K; V④在测试集上评价特征子集计算错误率 : e6 G& ]0 k: h* @8 `+ u9 Z9 Y
代码
7 R. R* w1 c- w" r$ b5 [7 m注意使用的数据集是dlbcl,大概五千多维,可以从UCI上下载,最终选择前100特征进行训练。& {. {' W# C) a& `
; ?# G7 e; q8 V1 [+ ]- a/ f
主函数代码:, e8 L4 C; Y! \
0 O+ U$ A$ K" c/ Bclear all
" z5 j" F$ F. f- iclose all
7 Z: z8 D* r p6 yclc;7 ]) |! ^' g9 Z% u# d" w
[X_train,Y_train,X_test,Y_test] = divide_dlbcl();
5 Z& P$ m+ F* t7 s2 G7 FY_train(Y_train==0)=-1;
/ v; C8 B% e5 TY_test(Y_test==0)=-1;% _+ K& D5 y* T2 i9 ?$ F x7 H5 {
% number of features
' |2 h" U' p2 i: \" ^ Q. h6 e! W" ]numF = size(X_train,2);+ J0 j; u! |1 A% h) C! `% x& y3 {5 P
0 W/ d6 _; w ]# P3 g; l4 |
/ M# U, p+ M& h- l9 |3 p; c3 G- F
' L9 f, e5 a" W7 I: E* c[ ranking , w] = mutInfFS( X_train, Y_train, numF );
: \/ p4 `8 o2 G, S" [4 i6 [k = 100; % select the Top 2 features- J3 s0 y7 H7 p$ b5 F
svmStruct = svmtrain(X_train(:,ranking(1:k)),Y_train,'showplot',true);( Y1 f) @7 E2 S3 n
C = svmclassify(svmStruct,X_test(:,ranking(1:k)),'showplot',true);; x# y, k) a! W% t1 a
err_rate = sum(Y_test~= C)/size(X_test,1); % mis-classification rate
% r- I4 k0 ?- p+ }0 G' |" F- IconMat = confusionmat(Y_test,C); % the confusion matrix
# h0 @, d6 e6 ?6 u+ yfprintf('\nAccuracy: %.2f%%, Error-Rate: %.2f \n',100*(1-err_rate),err_rate);8 {" U+ S. t4 k; ~$ L8 ]: c" p
- V* T a$ a4 r3 x; j) w: E0 w
' D( F0 y& O" hmutInfFS.m% o$ K$ x7 F6 v
5 F' I' `$ E* T W6 Q. ~
function [ rank , w] = mutInfFS( X,Y,numF )
! s! W! M3 ~& o Vrank = [];
4 \% d9 w4 ?0 r7 w. \for i = 1:size(X,2)) t; h! p2 | V
rank = [rank; -muteinf(X(:,i),Y) i];
6 j% {+ W2 X9 D( p, B2 G3 A' [end;" w8 k5 ]0 |. k6 e3 L
rank = sortrows(rank,1); ( G' H* k i* V1 B# h
w = rank(1:numF, 1);! j+ [, K. e2 p$ O9 ]; E* a. s: Y
rank = rank(1:numF, 2);/ P) ^* a1 f2 S" D$ ?6 A$ p( `8 {
; f3 r! o: u) }+ t
end$ Z; X# N# A# R1 o3 f% E
% q/ {) Q: k( v) G( H# Q; Q! f. ]8 J
& Q1 J! S2 p6 m* A. i' }* h- Tmuteinf.m7 A* i1 K. e8 x S5 r6 \
5 P$ O8 X; V5 C1 r" h( {! p% \6 [
function info = muteinf(A, Y)
8 @- c" w/ v4 m( _% m" Pn = size(A,1);%实例数量
# B4 i$ m3 U! ~/ f( [Z = [A Y];%所有实例的维度值及标签
$ W. J& s3 |8 [6 S: O1 sif(n/10 > 20)
% Q; G' \+ b" v9 b1 }( N! e nbins = 20;
/ o) h1 W; P7 ~2 R$ Yelse& I8 g' {7 F {' ~9 ]8 o
nbins = max(floor(n/10),10);%设置区间的个数8 |+ {' v# m3 l' W# P
end;) O/ w; h1 P( q$ B# `
pA = hist(A, nbins);%min(A)到max(A)划分出nbins个区间出来,求每个区间的概率
" ^, v3 Y3 e* ?# Y. @% ~+ P: ipA = pA ./ n;%除以实例数量2 ]* T8 h# Z8 D; U; ?
$ N, W- E& S0 h
i = find(pA == 0);& T- G. q1 I: t' l
pA(i) = 0.00001;%不能使某一区间的概率为0
9 d- D: j; a4 p7 i0 \
+ J0 j! Q! q. P1 T7 H: qod = size(Y,2);%一个维度9 s; W" L& W5 u' s3 L/ g0 q
cl = od;
/ r7 j0 u" N. {%下面是求实例不同标签的的概率值,也就是频率4 {3 q3 o4 a7 I2 d+ y) w% n
if(od == 1)! K5 a% B! B4 Y/ U- ^! y
pY = [length(find(Y==+1)) length(find(Y==-1))] / n;8 T: q) w6 K. m% k+ u
cl = 2;
& z- Z, x+ i) j( F2 lelse
2 K3 i. D/ ]4 m$ h `' v: d pY = zeros(1,od);
: J, U( E7 ^! A |! @, G for i=1: od/ H/ l$ w1 n8 O
pY(i) = length(find(Y==+1));
. |6 m$ x6 A5 S4 S$ n- I$ }. | end;
, Y0 J/ T$ {# D W pY = pY / n;# @9 A; k6 ] y4 L! `/ f
end;2 N! v$ Q9 X$ b' A4 {# j, Z
p = zeros(cl,nbins);$ J \8 R: o6 A- h
rx = abs(max(A) - min(A)) / nbins;%每个区间长度
) r9 M- y- K( D: qfor i = 1:cl
# o e+ v0 A: E2 y( Q w0 b, G xl = min(A);%变量的下界1 Y, C% k! l: H- g6 z2 {8 o U
for j = 1:nbins3 e% w8 P8 ^4 P
if(i == 2) && (od == 1)
7 _# o( k0 q- M. m) f+ s interval = (xl <= Z(:,1)) & (Z(:,2) == -1);1 H4 C* W/ `* H1 w
else
, J* `; b, L, k5 E" ^' C9 `& e interval = (xl <= Z(:,1)) & (Z(:,i+1) == +1);+ c- w" u! [# ~" W d9 i0 y
end;! E$ v$ |* H' \( x% K$ k, c: ]
if(j < nbins)* ^/ E- E# }: r- P' M
interval = interval & (Z(:,1) < xl + rx);
2 ?7 H" x/ R3 h, G* e. ^+ P end;) u$ r2 f0 X; h# v0 r6 Y( w
%find(interval)
1 P& I2 x3 \9 z! s- ^- D$ G x p(i,j) = length(find(interval));
. T. o2 d0 S3 B4 U0 ?+ n! ]
, g- v; t, y9 k* G3 f if p(i,j) == 0 % hack!
! l- N) Q* ^/ S, N. G' E p(i,j) = 0.00001;4 l) J4 d! L0 X$ r' T( B' z$ |. c \
end
6 p6 V/ t! H4 p- D/ S# m) C, a( J1 n
6 e9 S. a3 z3 E- R7 f$ A9 B xl = xl + rx;
0 _& \$ d) W& _2 [1 S) |) { end;
2 \# L7 V- B) J: @3 ]2 U* @end;5 _7 i+ E; u. W+ y
HA = -sum(pA .* log(pA));%计算当前维度的信息熵9 U- Z p! j* c1 m- K
HY = -sum(pY .* log(pY));%计算标签的信息熵! U. q" \' I# T1 {- A# d' K/ u- h. v$ Z
pA = repmat(pA,cl,1);
6 p/ I+ l! f4 G( d. b3 ]pY = repmat(pY',1,nbins); V- s& j1 v( c" _
p = p ./ n;6 A& c4 K% J" I
info = sum(sum(p .* log(p ./ (pA .* pY))));& d& {, }$ W+ W. a. G1 V
info = 2 * info ./ (HA + HY);%计算互信息
* f5 R9 K" z' J+ s) [5 t) K: i& v7 c$ L k* N5 B& N
% \2 L/ ~8 A$ z9 [% O$ Z2 l前100个特征的效果:
+ ]2 s' X$ ^7 y8 z% @$ I4 Y$ K- M, `: }" A& @) L5 _
Accuracy: 86.36%, Error-Rate: 0.14
/ u7 A# M7 |; z b7 l# p
+ C% z! P5 V( J u9 V9 ?, s# B- W& g) i选择前两个特征进行训练(压缩率接近100%,把上述代码中的K设为2即可)的二维图: u6 I$ D- e/ E+ l3 h5 |
9 K/ ]2 [' a3 S; B l1 D# H
Accuracy: 75.00%, Error-Rate: 0.25$ _& U/ g' r4 s3 M7 B6 G) I0 ^
% V8 o. ^( D& d/ J9 f& ^. [6 p- T1 |& q. r
- W( N; t4 m0 x- v$ n
|
|