資源簡介
樸素的Fisher二元線性分類器,相關理論參考清華版《模式識別(第二版)》P88-P90頁(4.2章 Fisher線性判別)。
開發(fā)平臺為Matlab7.7,內附詳細的參數(shù)說明和源碼注釋,測試有效。
請注意:源碼中所有的樣本數(shù)據(jù)均以列向量形式存儲,并構成數(shù)據(jù)矩陣。
(1)fcFisherW 函數(shù)用于獲取Fisher變換向量、兩類的均值向量及總體的類內離散度矩陣。
(2)fcFisherJudge函數(shù)會調用fcFisherW,依據(jù)求得的Fisher變換向量W,判定輸入數(shù)據(jù)X(樣本數(shù)據(jù)以列向量形式存儲)的所屬。

代碼片段和文件信息
function?[JudgeX?W?]?=?fcFisherJudge(Class1Class2X)
%?依據(jù)求得的Fisher變換向量W,判定輸入數(shù)據(jù)X(樣本數(shù)據(jù)以列向量形式存儲)的所屬
%?參考清華版《模式識別(第二版)》P90頁(4.2章?Fisher線性判別)
%?輸入?yún)?shù):
%?Class1????第1類對應的訓練數(shù)據(jù)信息矩陣,樣本數(shù)據(jù)以列向量形式存儲,維數(shù)m*n1
%????????????????m對應樣本(列)向量維數(shù),n1對應該類樣本數(shù)目
%?Class2????第1類對應的訓練數(shù)據(jù)信息矩陣,樣本數(shù)據(jù)以列向量形式存儲,維數(shù)m*n2
%????????????????m對應樣本(列)向量維數(shù),n2對應該類樣本數(shù)目
%?X?????????????待判定的數(shù)據(jù),維數(shù)m*nX,樣本數(shù)據(jù)以列向量形式存儲
%?中間變量:
%?CountC??存儲了兩類訓練數(shù)據(jù)的樣本數(shù)目,CountC=[n1?n2]
%?MeanC1??第1類對應的均值(列)向量
%?MeanC2??第2類對應的均值(列)向量
%?avrC1??????第1類均值(列)向量MeanC1經(jīng)Fisher變換后的數(shù)值,avrC1=W‘*MeanC1
%?avrC2??????第2類均值(列)向量MeanC2經(jīng)Fisher變換后的數(shù)值,avrC2=W‘*MeanC2
%?Sw??????????總體的類內離散度矩陣,維數(shù)m*m,Sw?=?Sw_C1?+Sw_C2
%?Sb???????????總體的類間離散度矩陣,維數(shù)m*m,Sb?=?(MeanC1-MeanC2)*(MeanC1-MeanC2)‘
%?Y?????????????待判定數(shù)據(jù)X經(jīng)Fisher變換后的數(shù)值,對于單組樣本X有y=W‘*X,對于樣本矩陣X有Y(i)=W‘*X(:i)
%?threY???????Fisher變換后的數(shù)值判別門限
%?????????????????對于y=W‘*X:若y>threY,X∈Class1;若y %?輸出參數(shù):
%??JudgeX???待判定的數(shù)據(jù)X的所屬,1表示屬于Class1,0表示屬于Class2
%?????????????????若nX>1(樣本不止一列),輸出結果Judge為由0/1組成的列向量
%?W????????????Fisher變換向量,維數(shù)m*1,W=inv(Sw)*(MeanC1-MeanC2)=Sw\(MeanC1-MeanC2)
%????????????????對于新樣本(列)向量X,有y=W‘*X(列向量樣本經(jīng)變換后為1維常數(shù))
%?初始化
[mnX]?=?size(X);
JudgeX?=?zeros(nX1);
%?計算Fisher判別參數(shù)
[?W?MeanC1?MeanC2?Sw?Sb?CountC?]?=?fcFisherW(Class1Class2);?
avrC1?=?W‘*MeanC1;
avrC2?=?W‘*MeanC2;
%計算Fisher判別門限
threY?=?(CountC(1)*avrC1?+?CountC(2)*avrC2)/(CountC(1)?+?CountC(2));
%?進行Fisher判別
if?nX==1?????%X為單組樣本列向量
????Y?=?W‘*X;???????????????%此時Y為常數(shù)
????if?Y>=threY
????????JudgeX?=?1;???????%若y>threY,X∈Class1
????else
????????JudgeX?=?0;???????%若y ????end
else?????????????%X為多組樣本組成的矩陣
????Y?=?zeros(nX1);
????for?i=1:nX
????????Y(i)?=?W‘*X(:i);
????????if?Y(i)>=threY
????????????JudgeX(i)?=?1;???????%若Y(i)>threY,X∈Class1
????????else
????????????JudgeX(i)?=?0;???????%若Y(i) ????????end
????end
end
%?function?[ab]=fisher(ABXh)
%?%A,B表示AB類的數(shù)據(jù),X表示未知類別的數(shù)據(jù)。
%?%ABX的列表示不同的指標,行表示一個個體。
%?%h為顯著性水平。
%?average1=mean(A);
%?average2=mean(B);
%?m=size(A1);
%?n=size(B1);
%?p=size(A2);
%?for?i=1:p
%?????A(:i)=A(:i)-average1(i);
%?????B(:i)=B(:i)-average2(i);
%?end
%?S1=A‘*A;
%?S2=B‘*B;
%?S=S1+S2;
%?c=S\(average1-average2)‘;
%?ya=average1*c;
%?yb=average2*c;
%?y0=(m*ya+n*yb)/(m+n);%臨界值
%?z=X*c;
%?a=(z-y0)*(ya-y0);a=ge(a0);%A類
%?b=(z-y0)*(yb-y0);b=ge(b0);%B類
%?F=(m*n/(m+n)*(m+n-p-1)/p)*abs(ya-yb);
%?Fh=finv(1-hpm+n-p-1);%計算置信水平下的F分布表
%?if?F>Fh
%?????disp(‘判別函數(shù)有效‘);
%?else
%?????disp(‘判別函數(shù)無效‘);
%?end
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????3036??2012-12-19?22:09??Fisher二元線性判別?Matlab源碼\fcFisherJudge.m
?????文件???????1932??2012-12-19?22:04??Fisher二元線性判別?Matlab源碼\fcFisherW.m
?????目錄??????????0??2012-12-20?12:43??Fisher二元線性判別?Matlab源碼
-----------?---------??----------?-----??----
?????????????????4968????????????????????3
評論
共有 條評論