1. 程式人生 > >特徵選擇(1):特徵相關性度量之互資訊量(matlab程式碼實現)

特徵選擇(1):特徵相關性度量之互資訊量(matlab程式碼實現)

互資訊的概念

互資訊量定義基於資訊熵的概念。在資訊理論中,資訊熵可度量變數的不確定性。設在隨機空間中,某一離散變數X 的概率分佈為p(x),則X 的資訊熵定義為:

                                                              

其中,log 以2 為底。若兩個離散隨機變數X 和Y 的聯合概率分佈為p(x, y),則X 和Y 的條件資訊熵為:

                                              

X 和Y 的互資訊量I(X; Y)的定義如下:

             

互資訊與特徵選擇

互資訊主要是一個特徵選擇相關性的度量單位,設X為資料,Y為標籤,互資訊則表示資料與標籤的相關性。一般大小為[0,inf).越高則表示這個特徵越重要,簡單的特徵選擇如FR,就是根據相關性來排序,選擇最高的幾個。

除了資料與類標之間的相關性,還有資料之間的冗餘性。如果資料之間相關性越高,則冗餘性越強,如mRMR特徵選擇,則是根據最大類標相關性最小資料冗餘性的準則來進行特徵選擇。

程式碼

該程式碼主要參考於https://blog.csdn.net/xyisv/article/details/81504764,博主Reacubeth。並最其進行了修改和註釋,刪除了一些不必要的內容。

下面的程式碼主要用於資料列標籤和類標的互資訊計算。類標為2類資料。

function mi=Mutual_information(X,Y)
num=size(X,1);%例項數量
label=unique(Y);
Z=[X,Y];%所有例項的維度值及標籤
if(num/10>20)
    nbins=20;
else
    nbins=max(floor(num/10),10);%設定區間的個數
end;
PX=hist(X,nbins);%min(X)到max(X)劃分出nbins個區間出來,求每個區間的概率
PX=PX./num;%除以例項數量
i=find(PX==0);
PX(i)=0.00001;%不能使某一區間的概率為0
od=size(Y,2);%標籤的列數,一般為1,多列Y暫時不考慮
cl=od;
if length(unique(Y))==2 %二類分類問題 label(1)
    if(od==1)
        PY=[length(find(Y==label(1))) length(find(Y==(label(2))))]/num;
        cl=2;
    else%多列Y 暫時不考慮
    end
    p=zeros(cl,nbins);
    rx=abs(max(X)-min(X))/nbins;%每個區間長度
    for i=1:cl
        xl=min(X);%變數的下界
        for j=1:nbins
            if(i==2)&&(od==1)
                interval=(xl<=Z(:,1))&(Z(:,2)==label(2));
            else
                interval=(xl<=Z(:,1))&(Z(:,i+1)==label(1));
            end;
            if(j<nbins)
                interval=interval&(Z(:,1)<xl+rx);
            end;
            p(i,j)=length(find(interval));
            if p(i,j)==0;
                p(i,j)=0.00001;
            end
            xl=xl+rx;
        end;
    end;   
end
HA=-sum(PX.*log(PX));%計算當前維度的資訊熵
HY=-sum(PY.*log(PY));%計算標籤的資訊熵
PX=repmat(PX,cl,1);
PY = repmat(PY',1,nbins);
p=p./num;
mi=sum(sum(p.*log(p./(PX.*PY))));
%info = 2 * mi ./ (HA + HY);%計算互資訊
            
        
end

 後記

暫時只是列向量資料與標籤向量的計算,隨後會陸續用於列向量資料之間的計算,多類資料,聚類資料。

資料來源:https://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/binary.html