找回密码
 注册
关于网站域名变更的通知
查看: 449|回复: 1
打印 上一主题 下一主题

基于互信息的特征选择算法MATLAB实现

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-5-18 11:06 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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 ]. ~

该用户从未签到

2#
发表于 2020-5-18 13:23 | 只看该作者
基于互信息的特征选择算法MATLAB实现
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-8-23 23:46 , Processed in 0.140625 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表