特徵選擇(2):mRMR特徵選擇演算法(matlab程式碼實現)
阿新 • • 發佈:2018-11-06
mRMR是什麼
是基於最大相關最小冗餘的特徵選擇方法。
要點:1.相關是特徵列與類標的相關性,也可以值特徵之間的相關性,通常來說,特徵與類標相關性越高,說明這個特徵越重要。則選擇這個特徵,這就是最大相關。
2.最小冗餘:特徵選擇的目的就是減少分類器的負擔,減少不需要的特徵。而兩個特徵之間如果相關性很高,這表示這兩個特徵對分類有著相同的作業。也可以說是冗餘度比較高,這去掉其中一個特徵。
相關性度量方法
相關性度量一般有三種:互資訊(MI),皮爾森相關係數,最大資訊係數
本文演算法用的是互資訊。
mRMR具體實現
function [fea, score] = mRMR(X_train, Y_train, K) bdisp=0; nd = size(X_train,2); nc = size(X_train,1); t1=cputime; for i=1:nd, t(i) = mutualinfo(X_train(:,i), Y_train); end; [tmp, idxs]=sort(-t); fea_base = idxs(1:K); fea(1) = idxs(1); KMAX = min(1000,nd); %500 idxleft = idxs(2:KMAX); k=1; % if bdisp==1, % % fprintf('k=1 cost_time=(N/A) cur_fea=%X_train #left_cand=%X_train\n', ... % % fea(k), length(idxleft)); % end; for k=2:K, t1=cputime; ncand = length(idxleft); curlastfea = length(fea); for i=1:ncand, t_mi(i) = mutualinfo(X_train(:,idxleft(i)), Y_train); mi_array(idxleft(i),curlastfea) = getmultimi(X_train(:,fea(curlastfea)), X_train(:,idxleft(i))); c_mi(i) = mean(mi_array(idxleft(i), :)); end; [score(k), fea(k)] = max(t_mi(1:ncand) - c_mi(1:ncand)); tmpidx = fea(k); fea(k) = idxleft(tmpidx); idxleft(tmpidx) = []; % if bdisp==1, % % fprintf('k=%X_train cost_time=%5.4f cur_fea=%X_train #left_cand=%X_train\n', ... % k, cputime-t1, fea(k), length(idxleft)); % end; end; return; %===================================== function c = getmultimi(da, dt) for i=1:size(da,2), c(i) = mutualinfo(da(:,i), dt);; end;
程式碼中互資訊的測量函式為文中的mutualinfo