|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 baqiao 于 2020-5-18 13:24 编辑 , l0 Q( L/ i9 o' ]# A
+ t, S) W6 t4 d/ N! e6 k4 C. T& [+ h在概率论和信息论中,两个随机变量的互信息(Mutual Information,简称MI)或转移信息(transinformation)是变量间相互依赖性的量度。不同于相关系数,互信息并不局限于实值随机变量,它更加一般且决定着联合分布 p(X,Y) 和分解的边缘分布的乘积 p(X)p(Y) 的相似程度。互信息(Mutual Information)是度量两个事件集合之间的相关性(mutual dependence)。互信息最常用的单位是bit。
l& o9 x/ F0 x% a9 k# w5 b
5 R4 J L b9 U# ~# j, U# R5 \6 G4 a( V互信息的定义 0 B. e: L" j% h9 i! v
正式地,两个离散随机变量 X 和 Y 的互信息可以定义为:
8 m2 q6 ]( z/ A+ A/ E* f* ~
& l4 ?; e- I4 [2 k G其中 p(x,y) 是 X 和 Y 的联合概率分布函数,而p(x)和p(y)分别是 X 和 Y 的边缘概率分布函数。 * D3 Z0 ]. \" ~( z
( o7 y/ a& N4 a" P# R d, C
在连续随机变量的情形下,求和被替换成了二重定积分: $ N8 [2 \, l# ~/ @
1 e) C! y+ c! E+ S" s
其中 p(x,y) 当前是 X 和 Y 的联合概率密度函数,而p(x)和p(y)分别是 X 和 Y 的边缘概率密度函数。
. N3 J' f" J4 ^8 ?, k$ [' O1 o2 l, B+ ]- O* M- [( T! K
互信息量I(xi;yj)在联合概率空间P(XY)中的统计平均值。 平均互信息I(X;Y)克服了互信息量I(xi;yj)的随机性,成为一个确定的量。如果对数以 2 为基底,互信息的单位是bit。3 e/ K/ F: W4 q+ [3 G1 a. o9 i9 G
0 G# H! j' J. Y
直观上,互信息度量 X 和 Y 共享的信息:它度量知道这两个变量其中一个,对另一个不确定度减少的程度。例如,如果 X 和 Y 相互独立,则知道 X 不对 Y 提供任何信息,反之亦然,所以它们的互信息为零。在另一个极端,如果 X 是 Y 的一个确定性函数,且 Y 也是 X 的一个确定性函数,那么传递的所有信息被 X 和 Y 共享:知道 X 决定 Y 的值,反之亦然。因此,在此情形互信息与 Y(或 X)单独包含的不确定度相同,称作 Y(或 X)的熵。而且,这个互信息与 X 的熵和 Y 的熵相同。(这种情形的一个非常特殊的情况是当 X 和 Y 为相同随机变量时。) t; g/ e- A6 N s' x* _
4 r0 B1 [ _+ b& ~) K互信息是 X 和 Y 联合分布相对于假定 X 和 Y 独立情况下的联合分布之间的内在依赖性。于是互信息以下面方式度量依赖性:I(X; Y) = 0 当且仅当 X 和 Y 为独立随机变量。从一个方向很容易看出:当 X 和 Y 独立时,p(x,y) = p(x) p(y),因此: 5 k, j1 [! l2 d8 g
i; S6 \& r2 I& o' `$ @$ {" K
此外,互信息是非负的(即 I(X;Y) ≥ 0; 见下文),而且是对称的(即 I(X;Y) = I(Y;X))。
% Z4 c. n/ @: C1 C3 c& j
$ d0 ]. i5 h, |( Y! `) S% k* U* s; e' X! N2 K/ `6 S
互信息特征选择算法的步骤 + s8 f* h: _, d$ C' Z) e
①划分数据集
0 W/ D7 h+ o6 L0 D$ U# y; O. i②利用互信息对特征进行排序
; S$ }, ~ V& m# R6 T7 q9 h1 o: R③选择前n个特征利用SVM进行训练 ! s& v6 v" R* F3 ~: }3 l# a, j: _
④在测试集上评价特征子集计算错误率 1 ^& A6 @2 I% e6 {$ {
代码 , \- V* ?3 U( t4 ` l* i$ A# T9 Z' Y
注意使用的数据集是dlbcl,大概五千多维,可以从UCI上下载,最终选择前100特征进行训练。8 ]; }8 h5 t8 w! C+ k# p( ?
* [+ y8 h' b: Y+ {( R主函数代码:
/ v' w+ Z# I6 v# w: q# X5 H, A& Z/ d$ N& Y" P, T7 }! L
clear all1 D/ l {$ a+ ]2 g
close all
0 ^3 C2 s6 @7 x! x2 E% Uclc;( G" W4 O. Y; D* e" H
[X_train,Y_train,X_test,Y_test] = divide_dlbcl();% n. e8 Q, e/ J$ s3 j
Y_train(Y_train==0)=-1;
/ h9 `/ d$ d# a, E6 T, VY_test(Y_test==0)=-1;
" p# v4 c# K P. b |% number of features; t% l( D( _: L
numF = size(X_train,2);
& Q5 I! P- j& V
3 ~' t: {6 i/ t0 V8 s9 P: G
$ s2 l' B+ I& S& V: _& S7 ^3 \
+ _) N. F$ ?0 T* S, O- K! ][ ranking , w] = mutInfFS( X_train, Y_train, numF );
/ y% f8 y- p. P+ o, I4 Nk = 100; % select the Top 2 features
9 @5 g2 B7 A0 G! FsvmStruct = svmtrain(X_train(:,ranking(1:k)),Y_train,'showplot',true);
+ V3 [" A8 \, z4 s& Q: [C = svmclassify(svmStruct,X_test(:,ranking(1:k)),'showplot',true);
) ~! c. q/ v% D6 merr_rate = sum(Y_test~= C)/size(X_test,1); % mis-classification rate
9 H& {4 e! A# g4 q2 FconMat = confusionmat(Y_test,C); % the confusion matrix
; r2 Z7 V& k1 {# V U1 Wfprintf('\nAccuracy: %.2f%%, Error-Rate: %.2f \n',100*(1-err_rate),err_rate);
& s( ?" C7 `) l; b4 I. c3 X& H3 \, N! D% k; l' C0 q% U! Z0 h1 y
. v% _/ Q8 `+ X! O% _7 [mutInfFS.m+ _' l/ |, q' Q( N) N
4 p8 m0 y4 j6 r& D+ |# Z' P
function [ rank , w] = mutInfFS( X,Y,numF )' J+ @0 Q0 a4 `2 ]
rank = [];
* m2 k+ B; q% Wfor i = 1:size(X,2)- e: |1 j* U# P4 |* W s
rank = [rank; -muteinf(X(:,i),Y) i];2 x* n; @5 N7 x) R. M9 M) \+ }; e' }
end;
2 Y9 o% A! b0 A) m0 p+ [4 ~5 j* q' |rank = sortrows(rank,1); ! i: y/ Q; ?0 S+ K3 e8 p
w = rank(1:numF, 1);
8 l# Y% r2 O% ~4 Xrank = rank(1:numF, 2);1 U: Y5 N" D4 G" Y3 A& h/ t
) u2 Y6 V i- R t3 @* ]2 h6 Aend
) {( E$ ~* q& j* Z) {1 O# [- y" ~, }, j( P& t
# |5 E6 Y- t4 _# \6 C2 vmuteinf.m
- Z) ~/ ]' E7 r, f, w* @) N$ k" i+ P
5 Q0 P( a: _9 b" j4 s j0 Mfunction info = muteinf(A, Y): l* t% ~- Q+ q1 z1 `
n = size(A,1);%实例数量
Z- |* U, j, ^7 z& CZ = [A Y];%所有实例的维度值及标签6 `; D$ F+ ~! _, F9 W* b( x) V
if(n/10 > 20)
8 B0 d4 R. i# A' A) R nbins = 20;: j' g v$ I4 t7 e5 W; S7 F
else
6 K* T" {# A+ u( t1 P8 K nbins = max(floor(n/10),10);%设置区间的个数; H B* p% Q0 b, G
end;
6 S# Y8 ]' R% T E$ Z4 PpA = hist(A, nbins);%min(A)到max(A)划分出nbins个区间出来,求每个区间的概率
. S( I- R3 n6 U* I. a3 N- E3 [pA = pA ./ n;%除以实例数量
' {( y; S+ c# M- C/ S
# L( P' {; i* v+ K1 ri = find(pA == 0);
4 E/ @+ N. H: jpA(i) = 0.00001;%不能使某一区间的概率为0' z1 A- l. ]+ `# W
# f6 }/ t/ U+ r8 dod = size(Y,2);%一个维度
' T9 o K U8 \cl = od;; l- @: d* m* X# d0 r( t9 O6 ~
%下面是求实例不同标签的的概率值,也就是频率8 {! r3 Z7 m) {' r. o
if(od == 1)
$ w, ^+ b1 `$ z pY = [length(find(Y==+1)) length(find(Y==-1))] / n;
* [; J# R( u- a cl = 2;
1 U- K, I, s; L& {7 Celse
3 Y+ D% `3 `- g- M4 ~1 j pY = zeros(1,od);
3 L0 h/ r# c$ ~5 _2 U, B for i=1: od) s' K: s/ B5 c M7 e5 v
pY(i) = length(find(Y==+1));
) _4 B7 Z. W6 h& [3 f: z end;
2 _. W) m# B% c8 i6 Z9 a pY = pY / n;7 Y" m4 N9 h" E. f' D
end;
e5 u6 |: ~5 F3 p- ~p = zeros(cl,nbins);
" r q% a) {! f$ z7 \rx = abs(max(A) - min(A)) / nbins;%每个区间长度8 }* a* P w, M: j
for i = 1:cl
/ E+ N0 k# _$ ? xl = min(A);%变量的下界
" y' i# f x- E8 e% _ for j = 1:nbins
3 W$ R% ~: Q, o* _6 w2 r if(i == 2) && (od == 1)6 _$ Q: H r. l4 W2 M
interval = (xl <= Z(:,1)) & (Z(:,2) == -1);1 c" K" H& k5 [1 g
else
2 E0 N: T* j, \7 G& ^0 Y interval = (xl <= Z(:,1)) & (Z(:,i+1) == +1);4 X. r! M! v: _3 P1 O [
end;
7 i( H& T' W3 {# j5 b if(j < nbins)
) |- v* M; ~$ t; J interval = interval & (Z(:,1) < xl + rx);$ r) y8 ^% F4 x: C! M& d {( C
end;; ~3 G$ q& e9 q8 L
%find(interval)9 V2 W' v4 ~" A: Z
p(i,j) = length(find(interval));8 e- a& w" \9 Z
( H( W( f" u- t* ?' h; G9 S if p(i,j) == 0 % hack!7 r7 M. s: Z6 r6 m
p(i,j) = 0.00001;
6 @9 A, S' a% c0 a end
, W4 S. K+ m/ Q! _1 B6 j
2 P, r" k. b, [2 ? xl = xl + rx;
, _$ o7 o9 |3 R% q end;' W$ N. G1 o+ ~
end;1 T& d) l: ^* ?
HA = -sum(pA .* log(pA));%计算当前维度的信息熵0 @& j' ]9 Q. i; g4 V& X, |
HY = -sum(pY .* log(pY));%计算标签的信息熵
: I4 T [& S! B F9 d w9 \pA = repmat(pA,cl,1);
A: y4 w$ z- VpY = repmat(pY',1,nbins);
9 a( O/ E; q: U4 y7 r$ H$ C( P9 ?p = p ./ n;
7 s8 p9 ^% o- hinfo = sum(sum(p .* log(p ./ (pA .* pY))));
( V H% T& K7 `& g2 t, Winfo = 2 * info ./ (HA + HY);%计算互信息
* W. c/ j) x( _* r2 U/ U9 l2 D E( l- E9 u; F2 y
% `6 x) J. F/ l
前100个特征的效果:
2 Y4 X7 N; S# b
`+ t9 y# R& i) aAccuracy: 86.36%, Error-Rate: 0.14
9 A1 O3 B8 C3 e% i( p9 X) w+ `
+ p5 o% S: l5 i" M, o: |选择前两个特征进行训练(压缩率接近100%,把上述代码中的K设为2即可)的二维图:
9 k# x# o( A) _' y+ ~1 i6 L, B& e
1 \5 q1 C4 V( q9 Z$ r+ h* f) W- ~
Accuracy: 75.00%, Error-Rate: 0.250 {; u. B4 a6 w
, V. [3 [% P" I4 I" O* z
" O# U6 F3 F5 Q. ~3 ?
( [% u* f4 V: |8 E) w ~2 G |
|