|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 baqiao 于 2020-5-18 13:24 编辑
6 x7 }7 }1 G* e* M5 n$ f9 f
( g9 x% T! B7 F$ o1 | L# t! E: c在概率论和信息论中,两个随机变量的互信息(Mutual Information,简称MI)或转移信息(transinformation)是变量间相互依赖性的量度。不同于相关系数,互信息并不局限于实值随机变量,它更加一般且决定着联合分布 p(X,Y) 和分解的边缘分布的乘积 p(X)p(Y) 的相似程度。互信息(Mutual Information)是度量两个事件集合之间的相关性(mutual dependence)。互信息最常用的单位是bit。; H) `( D- p: _% N2 O8 [2 o, m' R
. ]/ S; |, }* {! X- I互信息的定义 : i. X9 P# m J7 b; n. z
正式地,两个离散随机变量 X 和 Y 的互信息可以定义为:
O9 }# h2 p: W' w# a; R+ V, y" p/ g/ ^. H0 D% q8 a+ p
其中 p(x,y) 是 X 和 Y 的联合概率分布函数,而p(x)和p(y)分别是 X 和 Y 的边缘概率分布函数。 ) g# G4 b/ {6 C. B9 g2 M2 F
! r$ n; ]/ x- g. [9 i4 ^/ W
在连续随机变量的情形下,求和被替换成了二重定积分:
' x4 Q& ^) \6 H% [. }: u3 ]
" v% P. }- K- P其中 p(x,y) 当前是 X 和 Y 的联合概率密度函数,而p(x)和p(y)分别是 X 和 Y 的边缘概率密度函数。
4 p) s& K7 u. {: C5 z9 A- E$ w7 W
互信息量I(xi;yj)在联合概率空间P(XY)中的统计平均值。 平均互信息I(X;Y)克服了互信息量I(xi;yj)的随机性,成为一个确定的量。如果对数以 2 为基底,互信息的单位是bit。% i$ a+ H; Y# Q+ T
. _2 ~5 v5 U' E/ M
直观上,互信息度量 X 和 Y 共享的信息:它度量知道这两个变量其中一个,对另一个不确定度减少的程度。例如,如果 X 和 Y 相互独立,则知道 X 不对 Y 提供任何信息,反之亦然,所以它们的互信息为零。在另一个极端,如果 X 是 Y 的一个确定性函数,且 Y 也是 X 的一个确定性函数,那么传递的所有信息被 X 和 Y 共享:知道 X 决定 Y 的值,反之亦然。因此,在此情形互信息与 Y(或 X)单独包含的不确定度相同,称作 Y(或 X)的熵。而且,这个互信息与 X 的熵和 Y 的熵相同。(这种情形的一个非常特殊的情况是当 X 和 Y 为相同随机变量时。)) f. i T( j* B0 [% v; P
8 G! v& u% z. Z' }! ^
互信息是 X 和 Y 联合分布相对于假定 X 和 Y 独立情况下的联合分布之间的内在依赖性。于是互信息以下面方式度量依赖性:I(X; Y) = 0 当且仅当 X 和 Y 为独立随机变量。从一个方向很容易看出:当 X 和 Y 独立时,p(x,y) = p(x) p(y),因此: / U% L( n6 J; y6 e4 F q( `
; P% t5 B2 L& Q* d( ?7 f: Y此外,互信息是非负的(即 I(X;Y) ≥ 0; 见下文),而且是对称的(即 I(X;Y) = I(Y;X))。
B3 u! Z$ A1 c+ d" l! Z4 j) w% j- z6 [( ?
3 V# f+ |2 j f s互信息特征选择算法的步骤
$ o7 b0 x- n6 ^①划分数据集
% _! g$ O. w, H. L8 E5 Q' v( o②利用互信息对特征进行排序
& j: w* ^8 E& u1 M5 Y1 x* r. N③选择前n个特征利用SVM进行训练
+ I& @0 v/ n* ~1 ^④在测试集上评价特征子集计算错误率 ' D# ~ N0 t% h c* B" E2 e
代码 9 p* L) a" z, Y# Q( N. N
注意使用的数据集是dlbcl,大概五千多维,可以从UCI上下载,最终选择前100特征进行训练。
9 U0 V; O* P$ i- d; B7 z4 t' d& X- J$ \
主函数代码:
1 G( ~2 A* g5 n, K+ Q% g
8 {- R. _; L0 @; Y$ o% aclear all' f, G8 }& B+ J; b
close all. n( `! u- |& a8 T+ \; d
clc;) s, q( B+ e- X
[X_train,Y_train,X_test,Y_test] = divide_dlbcl();5 h: j8 h, V' I/ Q, o1 H7 u3 k
Y_train(Y_train==0)=-1;5 X! U" s- p* P2 @ U- @
Y_test(Y_test==0)=-1;" j9 F, y G6 e2 h1 i/ \
% number of features7 l1 d: a* F, {2 i5 R+ Z# J
numF = size(X_train,2);
+ K# g6 @% p" v1 Q$ {
: L% w& s/ B* M2 e
. b1 Y. N9 E7 p1 _. Z
, e2 T5 [1 H4 |+ i4 S% F[ ranking , w] = mutInfFS( X_train, Y_train, numF );
9 c' U$ t2 {- n3 v" |3 l& n) `2 nk = 100; % select the Top 2 features2 c, v" L7 r4 Z/ r9 N4 O. P$ S, p& j
svmStruct = svmtrain(X_train(:,ranking(1:k)),Y_train,'showplot',true);& r4 H* H1 F5 I! J% q$ }& A
C = svmclassify(svmStruct,X_test(:,ranking(1:k)),'showplot',true);
+ G" {% s+ E- \, b( |3 j4 E1 Xerr_rate = sum(Y_test~= C)/size(X_test,1); % mis-classification rate) W U' |- E& J0 N `% e
conMat = confusionmat(Y_test,C); % the confusion matrix
9 q1 J7 |: E3 ~; f/ @1 d% }, Gfprintf('\nAccuracy: %.2f%%, Error-Rate: %.2f \n',100*(1-err_rate),err_rate);
% h" F3 w' e, I, s3 ~& c+ C! f; y5 X
6 U' N9 m: A4 `' x) n; P
mutInfFS.m
+ x; Q' v! O& j P1 c& K
4 |6 ]2 m6 r* v) ]1 C/ H" Kfunction [ rank , w] = mutInfFS( X,Y,numF )
* k* z9 l2 @6 yrank = [];% k7 }0 b8 t% E9 _2 u
for i = 1:size(X,2)
* e1 Z0 |$ f" N! I- K# t9 ?, Y# c rank = [rank; -muteinf(X(:,i),Y) i];
7 F* N2 Z2 o4 a7 eend;
% `6 v4 A% O+ B6 F! l3 {rank = sortrows(rank,1); * @( v# A" O4 `8 l7 Z" q
w = rank(1:numF, 1);) M, G" }0 t8 D/ I
rank = rank(1:numF, 2);
8 G5 B c( |: J0 B% P4 R8 {
& X$ {1 j+ A; pend( {, O( u9 c5 k- w1 N2 I. q/ y. q i
1 |+ L* q# f5 r* m6 L
6 q- Z" G& P: b- \
muteinf.m+ L1 p& @& T" c4 @
8 P' P* i; {" @5 k$ F9 a N
function info = muteinf(A, Y)3 @5 M! l9 B' V- R" x1 P
n = size(A,1);%实例数量$ o3 h# U) \# T }. ]8 u
Z = [A Y];%所有实例的维度值及标签. |8 R1 y4 ~- V0 v8 W
if(n/10 > 20)
8 Z+ A# G+ m$ {& h, t% |) q( L nbins = 20;
( \# s9 b0 a+ m) n8 S5 felse
$ t% o1 y& w4 n& L" s0 N m nbins = max(floor(n/10),10);%设置区间的个数
. `$ a+ k, U/ f6 z0 ?+ w$ d; uend;
4 x. ^0 n' u6 P' L8 @, R7 spA = hist(A, nbins);%min(A)到max(A)划分出nbins个区间出来,求每个区间的概率) W4 o' e& x" o
pA = pA ./ n;%除以实例数量
7 k3 W3 P1 c- g7 S5 b4 ?/ `) d. Z/ H2 V2 c1 @
i = find(pA == 0); w ~+ ?$ [. X- G$ M; R7 A9 B
pA(i) = 0.00001;%不能使某一区间的概率为0
8 n, I$ i k6 Y# }% v* {1 A. q3 I, \7 I2 D
od = size(Y,2);%一个维度1 |9 y" l0 T5 n3 k
cl = od;( r, j& p2 C$ ?$ `5 m
%下面是求实例不同标签的的概率值,也就是频率
4 T3 I q7 X; g2 o/ @if(od == 1)
; o' _* D9 F; S1 G; I- I. [ pY = [length(find(Y==+1)) length(find(Y==-1))] / n;- ]% V" {! }7 q4 s4 ?/ [
cl = 2;5 j' X( @0 K% p
else; K9 H' W# j o; a
pY = zeros(1,od);
7 s2 ~6 J0 [% J3 K( v for i=1: od7 D8 n1 l) k% B2 a1 E
pY(i) = length(find(Y==+1));
# [! i) ?$ C/ M9 K end;" c; `9 W) R/ ?
pY = pY / n;* S2 P& f* e+ n& Y) y O! t5 I* a
end;8 O( ]. l6 P) }$ ^5 p! v7 M
p = zeros(cl,nbins);
1 I/ ^: t$ G6 R# y! y& Zrx = abs(max(A) - min(A)) / nbins;%每个区间长度
$ m! X! C9 G; {, n6 f6 Bfor i = 1:cl
' ]! D) i. ^ g7 ] xl = min(A);%变量的下界+ M1 r Q2 l. F( z; ?8 C
for j = 1:nbins: p! c) f# Z3 c7 i& Y! g7 g
if(i == 2) && (od == 1)
6 q* f4 n% |$ T' G+ | interval = (xl <= Z(:,1)) & (Z(:,2) == -1);9 _) S3 d8 D8 Y7 a; s2 v
else& v. @4 y# I5 |
interval = (xl <= Z(:,1)) & (Z(:,i+1) == +1);
! I% _( X$ B* U" U9 b v end;9 c* Q- n7 a2 W, ?3 t4 q
if(j < nbins)
$ I; H: E" W- A. _% p interval = interval & (Z(:,1) < xl + rx);
# ^% ]$ T- ~& J/ | end;3 p* H6 i! r- h' }. V+ S# K1 K5 C
%find(interval)9 P- k2 N8 Q8 A1 M& f! D
p(i,j) = length(find(interval));
$ [1 u/ K- ~. w b2 D, Z: C
( B, ^) f/ Z# p- n. A( s3 ^ if p(i,j) == 0 % hack!
" X# B% E% D) X* s, F p(i,j) = 0.00001;
# i ], t/ Q$ K$ O! k end2 E8 N& s9 W( l& D, A& P# t# x' \
* f j/ L/ X" Q& \, M. K
xl = xl + rx;
: A8 G3 r' t- g5 p end;$ t/ @6 B" t3 E Q
end;
3 c. N+ P4 f$ @9 U3 g' |# k' XHA = -sum(pA .* log(pA));%计算当前维度的信息熵# j; g8 c9 c9 C9 c2 @2 \) l
HY = -sum(pY .* log(pY));%计算标签的信息熵
" b0 u0 a! A5 K5 f; B2 rpA = repmat(pA,cl,1);3 r( l0 ?+ _% I
pY = repmat(pY',1,nbins);- s6 X- n6 D+ {1 Z: l6 v
p = p ./ n;
# }- @, i9 P: ?( j. N+ h! Y; m3 t3 Ninfo = sum(sum(p .* log(p ./ (pA .* pY))));
3 @7 i& W+ `1 C5 |9 Ninfo = 2 * info ./ (HA + HY);%计算互信息- H6 y, V. S' z' N2 ]' Q
9 t1 p+ H8 k' |( O0 l1 \( H( w4 W- N! [$ N/ n8 V8 y \
前100个特征的效果:: L( J' Z0 X! ^0 U; i
6 i) o* [) |1 S$ Q4 T KAccuracy: 86.36%, Error-Rate: 0.14
2 t: H6 }* \) z' X/ m P. E, C
2 n4 l# N$ F0 W! E# d选择前两个特征进行训练(压缩率接近100%,把上述代码中的K设为2即可)的二维图:
9 W! Q, y9 D7 o
3 L8 A3 C: N9 @5 L
Accuracy: 75.00%, Error-Rate: 0.25
0 ^2 B" [/ o+ k$ ]1 P5 @, ?4 w* c. B
8 \* p; c1 K1 ^% U+ p8 S- S. n. b) b" {1 m4 s. i- {
6 ?+ |5 F( w* c9 x& m |
|