EDA365电子论坛网

标题: 用MATLAB实现基于互信息的特征选择算法 [打印本页]

作者: pulbieup    时间: 2019-8-8 09:00
标题: 用MATLAB实现基于互信息的特征选择算法
在概率论和信息论中,两个随机变量的互信息(Mutual Information,简称MI)或转移信息(transinformation)是变量间相互依赖性的量度。不同于相关系数,互信息并不局限于实值随机变量,它更加一般且决定着联合分布 p(X,Y) 和分解的边缘分布的乘积 p(X)p(Y) 的相似程度。互信息(Mutual Information)是度量两个事件集合之间的相关性(mutual dependence)。互信息最常用的单位是bit。( ^( {6 s7 f) B  P0 k  i
9 J% k9 ^2 t8 s) ]$ X; ?

% K8 |( i5 P  p' q* H1 L互信息的定义 1 N/ p& Z1 y" h9 g' c/ f" X
正式地,两个离散随机变量 X 和 Y 的互信息可以定义为:
4 g( W) ]2 f& z9 u" ^2 N0 N1 F) r" L  o4 F
其中 p(x,y) 是 X 和 Y 的联合概率分布函数,而p(x)和p(y)分别是 X 和 Y 的边缘概率分布函数。 / m0 M: P0 \' U: U+ U# I
$ P* ]# ^3 G& S6 {; J% ^! E

* j) ?! h3 R" X( Q, {2 E
7 v# v: l4 p0 G! l: ^ 2 E" Q  ^% `4 H% d6 n+ P
在连续随机变量的情形下,求和被替换成了二重定积分:
0 ~" Q8 D. ?6 D4 j2 X3 w, v$ g5 |
/ g0 ^0 v. N. V* O4 N2 X; O1 v' v
* ~; e7 z( M1 Z0 k5 m2 W
5 m4 u. B: @* p

. m+ n( O" [" I- Y6 i$ a( ^其中 p(x,y) 当前是 X 和 Y 的联合概率密度函数,而p(x)和p(y)分别是 X 和 Y 的边缘概率密度函数。: y( s8 b& U0 d& O
3 T! d) |' {: C7 B
" w5 |& d# Q+ p  K; W' \# p9 z; J
互信息量I(xi;yj)在联合概率空间P(XY)中的统计平均值。 平均互信息I(X;Y)克服了互信息量I(xi;yj)的随机性,成为一个确定的量。如果对数以 2 为基底,互信息的单位是bit。
0 b, K" P+ u' _3 j7 [! L( b  e
# i. _6 D; a9 j/ I0 d7 J0 F) h

" T4 L; e0 V- t! M5 `2 l直观上,互信息度量 X 和 Y 共享的信息:它度量知道这两个变量其中一个,对另一个不确定度减少的程度。例如,如果 X 和 Y 相互独立,则知道 X 不对 Y 提供任何信息,反之亦然,所以它们的互信息为零。在另一个极端,如果 X 是 Y 的一个确定性函数,且 Y 也是 X 的一个确定性函数,那么传递的所有信息被 X 和 Y 共享:知道 X 决定 Y 的值,反之亦然。因此,在此情形互信息与 Y(或 X)单独包含的不确定度相同,称作 Y(或 X)的熵。而且,这个互信息与 X 的熵和 Y 的熵相同。(这种情形的一个非常特殊的情况是当 X 和 Y 为相同随机变量时。)
! w& ~, y( l; M5 m) Z& L) ^
4 E' P' x; e6 b. ^
4 ^3 a, f# U6 A- F3 E3 F6 n
互信息是 X 和 Y 联合分布相对于假定 X 和 Y 独立情况下的联合分布之间的内在依赖性。于是互信息以下面方式度量依赖性:I(X; Y) = 0 当且仅当 X 和 Y 为独立随机变量。从一个方向很容易看出:当 X 和 Y 独立时,p(x,y) = p(x) p(y),因此:
. ?, V# Z4 K8 H$ T1 |1 F9 l
9 S. c1 i/ }! n9 Q# o) N( K
. l+ W7 V) z/ [- H* l& P4 s
+ G! M2 v  F' ~% l& {: z7 l. T2 Q
9 q0 o* i; [' ~$ r3 s) V
此外,互信息是非负的(即 I(X;Y) ≥ 0; 见下文),而且是对称的(即 I(X;Y) = I(Y;X))。0 c4 @4 K4 J9 j# x8 n
$ H7 u% o% I; \0 n7 ~

- \, H  {+ [0 R4 {; W互信息特征选择算法的步骤 , d# ]3 l- n/ t, L4 u+ S% }
①划分数据集
  y& K# B3 B$ z6 z/ I/ x②利用互信息对特征进行排序 0 X$ s8 q8 u/ a( t: b+ f; s
③选择前n个特征利用SVM进行训练
7 G* t! m% v- ~④在测试集上评价特征子集计算错误率
# U+ l4 J* x" ?& ~3 [) k7 ~& I- l! {) h/ v( X6 J# c
/ A! E  Y! C5 z* A2 u# N. O% n5 z, s
代码
& K) y! o5 E. \: I% p1 z0 M注意使用的数据集是dlbcl,大概五千多维,可以从UCI上下载,最终选择前100特征进行训练。# m. f, z* v8 t2 a( p
; M$ f5 V/ N! c$ j1 A; w2 o
8 P' [- W( v% |1 ^+ _% e  V
主函数代码:( {: m) v* s; J+ ^

2 _* r+ K) [1 D3 _( `& c; s

9 r+ g  H/ W- Z& G9 B0 o1 n4 |8 a  _. f  J1 J2 y
8 g7 k1 D& w1 S! ?

) [8 }# r% H2 ^+ T6 CmutInfFS.m
& k! v4 Q3 Y# k' }9 _( Q/ B+ g/ F4 z
/ \9 Z  h+ `4 O5 o
5 V# S/ C* R2 s/ k
9 F. R4 {9 @+ \7 d
# L# ^4 s7 S) y
$ c5 x/ ~0 _1 t
muteinf.m5 K3 W0 X, L5 o7 I/ a5 Z1 s& \( N
. u7 M8 i! W) g- G2 y* L9 G5 T
8 o* p) M5 \9 Z; l1 S6 f9 }7 _

, F: h! D$ b/ b, Y) `7 w7 J( }9 h+ U3 j2 ]7 B8 T/ X) w/ M9 E1 p8 `

4 V9 C7 v+ z6 e  T$ h$ a前100个特征的效果:8 I5 c+ _/ U6 ^1 K( s- Y
# @" b/ n" L% M& n: ~

. D/ f& l, J7 m! Q, m7 `Accuracy: 86.36%, Error-Rate: 0.140 r6 q& q  F8 ~% `- k
# G% k+ k* H: Q5 [
! Y! K- k+ F7 s  ~6 W8 Z4 n
选择前两个特征进行训练(压缩率接近100%,把上述代码中的K设为2即可)的二维图: 5 j+ g5 s) q( z  E# e* w5 P  R" }9 B
, M# r% D3 a* u
7 Q) z* u. f* Z2 v) p) X
+ c" }! s. g. z" I: p4 g$ `

$ e4 F9 T8 h' n; `; pAccuracy: 75.00%, Error-Rate: 0.25  O5 W7 q7 f% K4 u9 V
. S& w* s! h# N) x& V0 n
( I' H$ f. [: L' t

( S# M4 K3 F9 l5 m7 D
' b5 r! l6 Y7 w
作者: xixihahaheihei    时间: 2019-8-8 18:18
谢谢分享
作者: chencol    时间: 2019-11-13 17:37
谢谢分享




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2