|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 baqiao 于 2020-5-18 13:24 编辑 ( Q0 x2 m. n6 t4 I4 C# `
8 T5 g; e3 k1 ]9 D! m+ b, ~在概率论和信息论中,两个随机变量的互信息(Mutual Information,简称MI)或转移信息(transinformation)是变量间相互依赖性的量度。不同于相关系数,互信息并不局限于实值随机变量,它更加一般且决定着联合分布 p(X,Y) 和分解的边缘分布的乘积 p(X)p(Y) 的相似程度。互信息(Mutual Information)是度量两个事件集合之间的相关性(mutual dependence)。互信息最常用的单位是bit。7 s, n: m1 Z' y2 s9 v
, m2 J4 k# T) r6 N
互信息的定义 " h- G' B5 N" ^" P: X
正式地,两个离散随机变量 X 和 Y 的互信息可以定义为:
+ k# Z# V7 p# A% T* h
C7 U! {( ]. N/ |9 J8 Y其中 p(x,y) 是 X 和 Y 的联合概率分布函数,而p(x)和p(y)分别是 X 和 Y 的边缘概率分布函数。
& J/ c* ]" @( q; C9 [
. Q! w" O% D; N2 T
在连续随机变量的情形下,求和被替换成了二重定积分:
! U+ U; r7 i3 u2 \" B
# B# `& s& z0 s# e
其中 p(x,y) 当前是 X 和 Y 的联合概率密度函数,而p(x)和p(y)分别是 X 和 Y 的边缘概率密度函数。
7 F- q5 ^3 F6 Z0 `# H+ o: \# Q7 S9 l) M
互信息量I(xi;yj)在联合概率空间P(XY)中的统计平均值。 平均互信息I(X;Y)克服了互信息量I(xi;yj)的随机性,成为一个确定的量。如果对数以 2 为基底,互信息的单位是bit。# k: n" |, p, z% |+ V
) I# E6 q# U1 ^; g5 C直观上,互信息度量 X 和 Y 共享的信息:它度量知道这两个变量其中一个,对另一个不确定度减少的程度。例如,如果 X 和 Y 相互独立,则知道 X 不对 Y 提供任何信息,反之亦然,所以它们的互信息为零。在另一个极端,如果 X 是 Y 的一个确定性函数,且 Y 也是 X 的一个确定性函数,那么传递的所有信息被 X 和 Y 共享:知道 X 决定 Y 的值,反之亦然。因此,在此情形互信息与 Y(或 X)单独包含的不确定度相同,称作 Y(或 X)的熵。而且,这个互信息与 X 的熵和 Y 的熵相同。(这种情形的一个非常特殊的情况是当 X 和 Y 为相同随机变量时。), d( _! g; F% l/ Y
) c6 E" i4 W) Y# g互信息是 X 和 Y 联合分布相对于假定 X 和 Y 独立情况下的联合分布之间的内在依赖性。于是互信息以下面方式度量依赖性:I(X; Y) = 0 当且仅当 X 和 Y 为独立随机变量。从一个方向很容易看出:当 X 和 Y 独立时,p(x,y) = p(x) p(y),因此:
- o# w2 a1 T9 Z' u
/ P$ `5 r2 Y! a( k此外,互信息是非负的(即 I(X;Y) ≥ 0; 见下文),而且是对称的(即 I(X;Y) = I(Y;X))。
* b) a) d* V; K; d2 o' C5 \* G/ n; a, K3 z# l2 L( Z: D8 ]
+ P! m8 c) z& _. p5 p" C1 @- W
互信息特征选择算法的步骤
# T* `7 M- A p4 l4 U7 g①划分数据集
) t9 e- ]5 n3 \②利用互信息对特征进行排序
" v6 P: g! v4 D& f/ \! m③选择前n个特征利用SVM进行训练 + v2 f( c# Q$ {8 T# _! Z) ~
④在测试集上评价特征子集计算错误率
) U( Q6 A* I. K: c- R代码 * w, t6 p$ d7 g, P+ ]
注意使用的数据集是dlbcl,大概五千多维,可以从UCI上下载,最终选择前100特征进行训练。) |$ L F: ^' a, Z- _
/ [) Z7 S$ N& l2 [6 [+ u
主函数代码:
+ Z% E3 s# n; {7 G( x, h
' S4 s( @. P' h8 {; Q( K3 sclear all
9 r( e# V7 w4 k5 C0 [" _close all
- V8 I) t9 F$ l: K6 v: ^' d7 C. eclc;% J3 i8 K# v9 C- L! _% \6 I
[X_train,Y_train,X_test,Y_test] = divide_dlbcl();, T" F1 g& y6 p9 g/ y3 n
Y_train(Y_train==0)=-1;% s9 o8 O5 _+ z1 E: f+ f
Y_test(Y_test==0)=-1;
9 C0 f) d) V! U6 h" |$ d% number of features) f: Z# w5 b5 y/ v
numF = size(X_train,2);
1 g# G6 J9 V& n
' `6 x5 z: u* L8 O$ l3 [+ M3 V
, ?* Y" @8 K+ @" i i5 V0 z3 q! @& e8 p( c; w( @0 O' R
[ ranking , w] = mutInfFS( X_train, Y_train, numF );
7 U# p2 \0 W1 q# T/ vk = 100; % select the Top 2 features
* s( u X. }; Y! ^+ N* @svmStruct = svmtrain(X_train(:,ranking(1:k)),Y_train,'showplot',true);' d; s+ P) ]' K+ G+ ]0 ~
C = svmclassify(svmStruct,X_test(:,ranking(1:k)),'showplot',true);
$ P* _+ K0 Q( ~& Z- W/ A( @err_rate = sum(Y_test~= C)/size(X_test,1); % mis-classification rate& G7 E# T: R2 w( k) K
conMat = confusionmat(Y_test,C); % the confusion matrix
. e L8 u J4 f& ?! x) s5 t7 }2 f( ~fprintf('\nAccuracy: %.2f%%, Error-Rate: %.2f \n',100*(1-err_rate),err_rate);1 A7 w: @4 G* X" {
) w4 v: ~; x3 I' Y( r: ]5 v
: F7 u$ @+ [8 x6 F- I
mutInfFS.m( ~# B! P4 Q! l+ H# _
3 q1 j: p Z# M" [* n/ @
function [ rank , w] = mutInfFS( X,Y,numF )
* N+ O( K6 x( R4 F- V, z5 lrank = [];
7 `. G5 ?: z3 p; r6 }6 efor i = 1:size(X,2)
; L9 k$ N0 E- y* K, \ rank = [rank; -muteinf(X(:,i),Y) i];. t% G+ B& b8 ^4 p5 S. B( I- s
end;- H, j. P2 k/ S+ v# Q: ]& M7 F4 z; w
rank = sortrows(rank,1); 5 u" C1 T9 X2 E5 W: A9 [$ U
w = rank(1:numF, 1);
6 d8 R9 D$ B" F( n* Q* K3 Trank = rank(1:numF, 2);" Y6 x, b0 S" j' h f
1 F: ^& o5 T0 q) dend( |7 x! ~! u5 Q0 A i' S( M
; B7 X( {* D9 L/ s9 N3 H# C# Z) o: W5 S7 \5 U
muteinf.m
8 D4 x- E# L8 Q" }
! [; A4 I+ U7 x- hfunction info = muteinf(A, Y)1 A) e7 l ]! s9 ]- ?& r9 X
n = size(A,1);%实例数量
5 y( u! Y- O) ?9 f F& D! \) SZ = [A Y];%所有实例的维度值及标签
+ h' x4 N) x+ s. ]7 n% p$ h1 Wif(n/10 > 20)
+ }$ }* ]! s1 t; S5 G nbins = 20;
. `) Z- w: D6 q% y9 Relse
7 f; U' m- M3 w# |( H) R4 k nbins = max(floor(n/10),10);%设置区间的个数# z: c; l7 P# v6 I; {6 ~5 _
end;
" {% Q" n' r/ A% z, SpA = hist(A, nbins);%min(A)到max(A)划分出nbins个区间出来,求每个区间的概率
3 x8 @* U6 \9 R3 dpA = pA ./ n;%除以实例数量
! ~% v ~3 d# X# u5 h
1 ~% e& C+ I, c. _; i" L5 zi = find(pA == 0);
$ X. p' O9 C% A$ ~/ MpA(i) = 0.00001;%不能使某一区间的概率为0
1 D- p/ _+ q- h$ [9 a2 r* v5 c1 o6 u1 F* I
od = size(Y,2);%一个维度
; {* h; h6 K$ G( T% ^$ B! K X" c6 Jcl = od;
5 a! F" l. @ Y& n%下面是求实例不同标签的的概率值,也就是频率( w2 k% }' W2 c
if(od == 1)
# H! t: }' |3 d. q$ b pY = [length(find(Y==+1)) length(find(Y==-1))] / n;
( u: r& Q# @0 R5 Y& A' K cl = 2;
/ d- Z5 [ @& {# T; g8 velse6 k( \7 _* P& l2 X. Y9 G, q2 K
pY = zeros(1,od);" G; R. W: n1 M& @" C
for i=1: od
; F( t! Z- f c+ e! \% X: B7 g5 U pY(i) = length(find(Y==+1));
- P' }' c9 q0 ]1 v( H end;
" a7 o+ K% W2 U5 v: S pY = pY / n;% z- { }" J! i/ w
end;
+ ^$ [5 H: a% \. Y9 h3 _p = zeros(cl,nbins);# h, ~. t! Y$ n0 K" t$ \
rx = abs(max(A) - min(A)) / nbins;%每个区间长度- ]: N: N6 r2 P) g5 p5 k
for i = 1:cl
- c( ?! V+ j6 b- l xl = min(A);%变量的下界
( H0 a; D8 h" T1 C) `" i* [9 j for j = 1:nbins
( O- C$ F" z4 J1 r. u$ {( L, t) f if(i == 2) && (od == 1)/ X% B2 d/ b' O; F/ Y: a
interval = (xl <= Z(:,1)) & (Z(:,2) == -1);8 G! {9 q6 h+ _6 x2 n/ r0 A- `" j7 a
else; u) U5 D- B) P: j$ A% J2 `
interval = (xl <= Z(:,1)) & (Z(:,i+1) == +1);
- _) I( m3 w; ^6 y! W end;
8 ^9 A8 e9 }4 ^- ? if(j < nbins)
9 K- f% s1 E3 r3 C# z- ~ interval = interval & (Z(:,1) < xl + rx);
2 \! T8 y& X( X4 Q end;' C- E* w. h2 l9 H1 B q- H
%find(interval)( G* G8 Q7 I4 @$ K: E
p(i,j) = length(find(interval));
: L$ J& {. i5 c0 r3 B7 }( B J3 P- T1 C5 b0 G" y0 |
if p(i,j) == 0 % hack!
3 m3 M" q- P( o p(i,j) = 0.00001;" Y' o. J( p: Z Q7 I5 g/ C
end
1 `. H0 j) A3 g! f2 Z! t7 r4 _; D z2 ^+ m) h
xl = xl + rx;! O8 E! u& Z# q* d) ]. [
end;
# \" ?1 y% U) u' a% ^$ uend;
! J7 @" j a2 D/ `HA = -sum(pA .* log(pA));%计算当前维度的信息熵2 b5 t0 i0 J9 S( Z g2 }
HY = -sum(pY .* log(pY));%计算标签的信息熵
X- k# p3 b- h: A7 wpA = repmat(pA,cl,1);
9 j" z+ G9 F: n$ x, hpY = repmat(pY',1,nbins);
& N0 u( m/ }4 S) U2 sp = p ./ n;
% Q- s5 {9 l8 [2 Q: F9 q% u) {# minfo = sum(sum(p .* log(p ./ (pA .* pY))));
8 \* T- ~- j9 F3 I vinfo = 2 * info ./ (HA + HY);%计算互信息5 \* p4 R \' M* {4 ~) Q2 E
, \/ Y* g0 N( G' e& M+ E" @5 d
( @9 n T. t& r前100个特征的效果:- |6 O' L- W6 Q# ^: e' D5 E7 Y$ u
, T! F. b9 |( }Accuracy: 86.36%, Error-Rate: 0.14; L) I! y3 Y+ M; K& w0 T8 x5 A
# _' g/ T+ ]* i) Y& y
选择前两个特征进行训练(压缩率接近100%,把上述代码中的K设为2即可)的二维图:
4 U5 @2 v5 W% W, e
; u% t6 U4 [; B* q* w, T& j
Accuracy: 75.00%, Error-Rate: 0.25
, j' Z3 N, G. i d# S6 e1 p) l
p6 r* k$ Y, U4 G1 P
0 g, \8 `; u5 H1 ]. ~
|
|