|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 baqiao 于 2020-5-18 13:24 编辑
8 K' K5 r6 A0 t$ L0 S. w
% P/ A6 w* @, L5 r6 C3 W) z! Y5 {在概率论和信息论中,两个随机变量的互信息(Mutual Information,简称MI)或转移信息(transinformation)是变量间相互依赖性的量度。不同于相关系数,互信息并不局限于实值随机变量,它更加一般且决定着联合分布 p(X,Y) 和分解的边缘分布的乘积 p(X)p(Y) 的相似程度。互信息(Mutual Information)是度量两个事件集合之间的相关性(mutual dependence)。互信息最常用的单位是bit。
8 A; D; E) M6 u! N: U. t; Z& b7 |* a( ~3 S+ q; V
互信息的定义 g! X- v: h" j3 f/ G, b. z$ Y6 e9 e
正式地,两个离散随机变量 X 和 Y 的互信息可以定义为:
) ?' ~6 X$ h" W0 o" I8 E% e/ h R. U+ M* j. W& u. Z1 W
其中 p(x,y) 是 X 和 Y 的联合概率分布函数,而p(x)和p(y)分别是 X 和 Y 的边缘概率分布函数。
. u; W1 R6 m4 v) p& E7 I
' v; d1 \7 A# V! M在连续随机变量的情形下,求和被替换成了二重定积分: 6 _4 b6 P6 ]7 h7 y) d; q& e! K" X
% |; y. V6 w& R+ ?$ `
其中 p(x,y) 当前是 X 和 Y 的联合概率密度函数,而p(x)和p(y)分别是 X 和 Y 的边缘概率密度函数。
# B9 [) J7 J/ x8 e, t7 Z! X5 n9 t
1 r, v4 G! Z9 _ p" b; F3 P. S* J互信息量I(xi;yj)在联合概率空间P(XY)中的统计平均值。 平均互信息I(X;Y)克服了互信息量I(xi;yj)的随机性,成为一个确定的量。如果对数以 2 为基底,互信息的单位是bit。
& M. o* b R& L6 {5 B7 M
; t* Y1 e, a0 N( g6 R8 L% E5 ~! D直观上,互信息度量 X 和 Y 共享的信息:它度量知道这两个变量其中一个,对另一个不确定度减少的程度。例如,如果 X 和 Y 相互独立,则知道 X 不对 Y 提供任何信息,反之亦然,所以它们的互信息为零。在另一个极端,如果 X 是 Y 的一个确定性函数,且 Y 也是 X 的一个确定性函数,那么传递的所有信息被 X 和 Y 共享:知道 X 决定 Y 的值,反之亦然。因此,在此情形互信息与 Y(或 X)单独包含的不确定度相同,称作 Y(或 X)的熵。而且,这个互信息与 X 的熵和 Y 的熵相同。(这种情形的一个非常特殊的情况是当 X 和 Y 为相同随机变量时。)- Q$ S3 R3 D; Q9 m# V- {
; C* {9 |# w. ^) s9 {
互信息是 X 和 Y 联合分布相对于假定 X 和 Y 独立情况下的联合分布之间的内在依赖性。于是互信息以下面方式度量依赖性:I(X; Y) = 0 当且仅当 X 和 Y 为独立随机变量。从一个方向很容易看出:当 X 和 Y 独立时,p(x,y) = p(x) p(y),因此: 9 v! d! F) `6 I w3 ?( B3 n
' u T8 [7 F! e4 O0 y
此外,互信息是非负的(即 I(X;Y) ≥ 0; 见下文),而且是对称的(即 I(X;Y) = I(Y;X))。) X& Z, Z% L7 \$ s$ t% |+ u4 b* u
) y( M5 V5 f5 E8 w0 B
7 t4 j3 C( S- U& I3 ^) o$ G
互信息特征选择算法的步骤
( L- h8 ?' V4 q1 s4 @①划分数据集 " Z/ ?+ f! l( i9 j# w
②利用互信息对特征进行排序
8 ~5 o1 J- u8 J③选择前n个特征利用SVM进行训练
: ?( L6 [4 H0 G4 q j1 N {④在测试集上评价特征子集计算错误率 $ b0 e! p; | o
代码 . \. G, M: S1 d# }0 r v
注意使用的数据集是dlbcl,大概五千多维,可以从UCI上下载,最终选择前100特征进行训练。2 N! ~; M! K" \
1 h6 Y8 [2 t. ~5 f% G: ?% v主函数代码:
, ~/ q7 F# R6 g2 W3 D& R4 y3 e6 @ g( S, J# U f+ }
clear all8 l0 o8 K" C9 `
close all: M) m% P, T. r" s, M. c
clc;: d- S, @0 s# O) _/ E% n
[X_train,Y_train,X_test,Y_test] = divide_dlbcl();& g K$ y9 p# C7 a9 |. z. x- R
Y_train(Y_train==0)=-1;
! y& `! D) P3 W; u, U% c6 l tY_test(Y_test==0)=-1;
6 }1 [3 I6 M/ K; V% number of features
k3 i+ S3 g: Q0 I% }* z2 cnumF = size(X_train,2);; C0 ^" K# f) N2 X& D3 P6 |1 s5 `
0 g2 X0 K+ V4 w
2 a% l: ^. t# O' Q v" {3 O- _- u% c
* o" |# P3 k4 p1 @* w8 M X
[ ranking , w] = mutInfFS( X_train, Y_train, numF );9 @3 T: g& O2 N, E4 {
k = 100; % select the Top 2 features
, v+ I# v2 j( {+ p; F0 IsvmStruct = svmtrain(X_train(:,ranking(1:k)),Y_train,'showplot',true);
; w5 a+ r, T5 e5 HC = svmclassify(svmStruct,X_test(:,ranking(1:k)),'showplot',true);
6 w* c, P0 S, e% berr_rate = sum(Y_test~= C)/size(X_test,1); % mis-classification rate
& h5 J- t8 b j( S2 L& @' TconMat = confusionmat(Y_test,C); % the confusion matrix; v2 A5 R* s2 J) Y3 j# {
fprintf('\nAccuracy: %.2f%%, Error-Rate: %.2f \n',100*(1-err_rate),err_rate);# X7 i% Q3 E2 G# v+ a
: {4 \' ^: E. o5 j1 u) X& \+ B
+ u) E b& w; a% U: ^% N! [mutInfFS.m
W* e! ^1 v2 ^1 i
8 W) P9 m* h- |) ^' W% ~function [ rank , w] = mutInfFS( X,Y,numF )
* A1 }" q. q) e8 z! Zrank = [];
6 X) h+ I: |$ K. o- T4 @. [for i = 1:size(X,2)6 i! k/ L6 c, s& `
rank = [rank; -muteinf(X(:,i),Y) i];# o! t5 z R3 P' V
end;
2 A! G0 a- x% a. J8 ^rank = sortrows(rank,1); ) R4 w' K+ c0 C# A" q
w = rank(1:numF, 1);
4 c8 c) V E7 T" r* lrank = rank(1:numF, 2);9 i$ Q( |7 P" P! @ N) y9 u
2 U4 i) h8 g% u& z$ I" Rend
! I- Y" }, W* I5 h2 _
; P8 O7 J' F$ X4 \0 o. t; z- g" a: V9 z4 N; `- m
muteinf.m7 T/ a3 X( L- I: ^- }* o
8 }6 P L! z. Q% i0 A4 ~3 Afunction info = muteinf(A, Y)' g. ]% y V" j j* S1 X2 {+ y
n = size(A,1);%实例数量
- C. e# ^. ?, M1 nZ = [A Y];%所有实例的维度值及标签
5 }9 |. R1 x0 a" xif(n/10 > 20)+ P% A0 x. S9 I
nbins = 20;
9 F) [& X4 n% \- w% Ielse5 A6 t& ^2 ]+ ^+ c& i
nbins = max(floor(n/10),10);%设置区间的个数
* W$ V$ V. M+ h Qend;
! |1 |% k0 B& {pA = hist(A, nbins);%min(A)到max(A)划分出nbins个区间出来,求每个区间的概率 H5 O H! f7 X9 G2 h% U d
pA = pA ./ n;%除以实例数量9 J8 `3 a) D( e8 J
: E) q: z/ c+ F: vi = find(pA == 0);# h3 r4 t4 e/ Y3 f( D8 F( I
pA(i) = 0.00001;%不能使某一区间的概率为0+ x c5 P9 p$ Q. Q: u1 m. p& n3 ]
( g, {% ^2 p3 K6 f- D; aod = size(Y,2);%一个维度( A3 a+ n+ i! q6 ~ Q1 C+ l# G. G
cl = od; g4 ]9 t5 q0 O+ T/ q
%下面是求实例不同标签的的概率值,也就是频率
0 D; H# b+ K1 nif(od == 1)
3 H3 g- J( P1 M: i) z pY = [length(find(Y==+1)) length(find(Y==-1))] / n;
' B4 w2 C$ e+ [: o% j$ i. c cl = 2;9 s1 @; J9 m0 L# ?+ A
else: V$ C+ F& A7 X
pY = zeros(1,od);. O* ?2 X* V$ b' }- t9 M8 h4 X
for i=1: od3 f, y/ [- l7 {% g q9 K% c3 _
pY(i) = length(find(Y==+1));* h9 I* B2 E& k$ E3 {
end;
2 J" j1 M, |/ l8 F( E- C9 S& ` pY = pY / n;/ E4 j/ y$ } x$ s* P: w
end;
' j( O3 p% [- ^1 Y" X3 V6 c" j9 Op = zeros(cl,nbins);: h( I: @. f/ Y$ S$ @
rx = abs(max(A) - min(A)) / nbins;%每个区间长度
# U1 Z0 r, o# U3 Y6 e; |1 ~for i = 1:cl; R" v9 D- h5 i F9 N9 y
xl = min(A);%变量的下界
* k5 q8 b6 d; n% P' y! { X" h' A for j = 1:nbins
2 e. h" n8 T0 m: ~8 d, A8 { if(i == 2) && (od == 1)
' u: K# v& F- f7 J2 Y interval = (xl <= Z(:,1)) & (Z(:,2) == -1);
2 i& F" T+ ^/ P( V/ S8 ~2 r else4 B- p* H0 W+ w& Q9 A9 o
interval = (xl <= Z(:,1)) & (Z(:,i+1) == +1);0 C. Y& L* h0 V7 o. y, J$ ]: l( `
end;" J# h( v( X$ ~ V* R! S
if(j < nbins): L# x; ^% O C8 y9 ~2 e
interval = interval & (Z(:,1) < xl + rx);
( R4 e! T, r2 K' i; m" _ end; ], ]; q$ y( [, Q2 q+ k2 _$ `" ]
%find(interval)! ]( F4 \& p* C' W. q
p(i,j) = length(find(interval));& `1 B8 _ m) V: M4 q3 a
/ ~0 b* k) F2 H+ P0 Z9 Q* T
if p(i,j) == 0 % hack!4 s; b# |' Q1 C3 s+ ]. N
p(i,j) = 0.00001;7 k% E$ p; K8 R! ]
end
! h9 k$ Z, S: H( Y7 Z# Q0 K8 P
# T6 v- y* ~9 n8 i6 n5 i/ W- R xl = xl + rx;8 |& l* A( Q! E, _( N. R- P2 t. X
end;
+ C7 c. o& h1 f% dend;1 Z% T7 G2 Z7 L5 N" J
HA = -sum(pA .* log(pA));%计算当前维度的信息熵0 `1 H2 A1 w/ v3 m" H5 [
HY = -sum(pY .* log(pY));%计算标签的信息熵! _2 U5 e& d) d8 q
pA = repmat(pA,cl,1);' `$ G' w4 {, L5 M5 {) Z
pY = repmat(pY',1,nbins);2 h8 u& l7 F2 r& F; S5 k5 e9 M
p = p ./ n;6 m/ F+ {8 B6 o" e) ~
info = sum(sum(p .* log(p ./ (pA .* pY))));- r; T* V& x+ S) ]) \1 `
info = 2 * info ./ (HA + HY);%计算互信息7 ]( w2 j+ J* X5 B! C9 O
4 b, e+ E8 e8 j# T1 T
+ x0 J2 h9 ^' v, c T. b* W' T前100个特征的效果:
0 J7 v" ?7 G5 {$ x0 }5 Q6 R$ t" ?5 S
Accuracy: 86.36%, Error-Rate: 0.142 a" R* q ~ T+ P1 R& ~
6 u1 m2 M z4 Z4 q4 _选择前两个特征进行训练(压缩率接近100%,把上述代码中的K设为2即可)的二维图:
5 h; O8 k4 `( R2 Q6 K7 S
9 t5 [) \# _0 sAccuracy: 75.00%, Error-Rate: 0.25
/ c! X+ e4 [% }* a
9 {$ e" l# P G$ I( L9 k x5 p
: l, A2 n! t1 l
|
|