若是考慮把d維空間的樣本投影到一條直線上,造成一維空間,即把維數壓縮到一維。
然而:shell
一、即便樣本在d維空間裏造成若干緊湊的互相分得開的集羣,當把它們投影到一條直線上時,也可能會是幾類樣本混在一塊兒而變得沒法識別。函數
二、可是,在通常狀況下,總能夠找到某個方向,使在這個方向的直線上,樣本的投影能分得開spa
好比,咱們經過MATLAB生成隨機的兩類模式樣本集:code
(該樣本簡單加入了高斯噪聲以模擬系統總噪聲和特徵的不徹底相關性)數學
o1=[3 4],o2=[8,2]; N1=15;N2=15; N=N1+N2; points=[abs(randn(N ,1)) rand(N,1)]; points(:,1)=points(:,1)*sqrt((o2(2)-o1(2))^2+(o2(1)-o1(1))^2)/5; points(:,2)=points(:,2)*2*3.14; pointso1=points(1:N1,:); pointso2=points(N1+1:end,:); pointso1xy=o1(1)+pointso1(:,1).*cos(pointso1(:,2)); pointso1xy=[pointso1xy o1(2)+pointso1(:,1).*sin(pointso1(:,2))]; pointso2xy=o2(1)+pointso2(:,1).*cos(pointso2(:,2)); pointso2xy=[pointso2xy o2(2)+pointso2(:,1).*sin(pointso2(:,2))]; plot(pointso1xy(:,1),pointso1xy(:,2),'.r');hold on; plot(pointso2xy(:,1),pointso2xy(:,2),'.g');
如圖:it
經過調整第三行中r份量的比例因子,咱們能夠得到可分辨度等低的模式樣本集:io
這裏咱們使用前一種樣本。class
那麼,如何根據實際狀況找到一條最好的、最易於分類的投影線,這就是Fisher判別方法所要解決的基本問題。集羣
先來看下最終的分類結果,圖中直線就是咱們求得的投影直線,藍色圈圈就是閾值所處位置:方法
對於該例子,從d維空間到一維空間的通常數學變換方法:
假設有一集合Г包含N=30個2維樣本x1, x2, …, xN,
其中N1=15個屬於ω1類的樣本記爲子集Г1, N2=15個屬於ω2類的樣本記爲子集Г2 。
若對xn的份量作線性組合可得標量:
yn = wTxn, n=1,2,…,N
這樣便獲得30個一維樣本yn組成的集合,並可分爲兩個子集Г1’和Г2’ 。
實際上,w的值是可有可無的,它僅是yn乘上一個比例因子,向量裏決定長短,重要的是選擇w的方向,也叫方向角。
很明顯的是,w的方向不一樣很影響分類結果。
因而在數學上,這就是尋找最好的變換向量w*的問題。
首先咱們來看一堆公式推導,不喜歡的徹底能夠跳過,後面會有你想要的東西的。
(1)首先是,各種樣本的均值向量mi:
很明顯,這其實就是在求一個聚類中心,注意是均值向量。
反映到matlab裏就是這樣:
m1=sum(pointso1xy)/N1; m2=sum(pointso2xy)/N2;
以下得到其直觀圖像,圖中的紅圈和綠圈就是所求的聚類中心啦:
(2) 樣本類內離散度矩陣Si和總樣本類內離散度矩陣Sw:
其中Sw是對稱半正定矩陣,並且當N>d時一般是非奇異的。
對於一維來講離散度矩陣對應的就是離差平方和/方差:
s1=sum([pointso1xy(:,1)-m1(1) pointso1xy(:,2)-m1(2)].^2);s1=sum(s1(:)); s2=sum([pointso2xy(:,1)-m1(1) pointso2xy(:,2)-m1(2)].^2);s2=sum(s2(:));
(3) 樣本類間離散度矩陣Sb :
Sb是對稱半正定矩陣。
sb=sum(((m1-m2).^2)');
分類得好很差,怎麼分類,怎麼肯定判別函數?這一切都在變換後的一維Y空間上進行,
而對於咱們即將映射的一維Y空間有:
(1) 各種樣本的均值:
(2) 樣本類內離散度和總樣本類內離散度
因而,Fisher準則函數定義爲:
其中,分子是兩類均值之差平方,分母是樣本類內離散度之和。顯然,應該使JF(w)的分子儘量大而分母儘量小,這樣才使得類別之間不只離得遠,並且類內樣本彙集緊密,即應尋找使JF(w)儘量大的w做爲投影方向。但上式中並不顯含w,所以須設法將JF(w)變成w的顯函數。
將上述各式代入JF(w),可得:
因而問題轉化爲準則函數的極值問題,當其取極大值時的w*就是咱們要的東西了。
求得一個函數的極值最容易想到的就是採用導數求解,而對於許多實際的問題,也經常使用拉氏乘數法求解。
咱們令分母等於非零常數,即:
定義Lagrange函數爲:
也就是轉化爲求L函數極值問題,其中λ爲Lagrange乘子。將上式對w求偏導數且令其爲0,可得:
由於Sw非奇異,因此有:
有沒有發現這變成了求矩陣特徵值的問題了呢?咱們帶入前邊的公式:
顯然,R是一個標量,即Sbw*實際上跟m1-m2是同方向的,注意m1,m2,w*都是列向量,而前面的代碼爲了方便編寫都是做爲行向量處理。而後咱們更新下特徵方程:
此處聲明下,咱們的任務是尋找最佳的投影方向,跟向量的模長並沒有關係,而上式除去比例因子R/λ以後就剩:
對於此處二維轉一維的狀況,Sw也是個標量,m1-m2爲兩聚類中心的向量差。也就是從m2到m1的向量。
那麼可得一直線方程:
c=w2*x-w1*y
將其畫在圖上是這樣的:
因而咱們變換下,並簡單地取下閾值:
y1=w*pointso1xy'; y2=w*pointso2xy'; T=(min(y1(:))+max(y2(:)))/2;
至此,咱們求出了變換關係w和一維分類閾值T。
有趣的是,這樣咱們還並不知足,有人必定會想在Figure中標出閾值點,然而T=w*pointxy這樣的運算顯然不可逆,即沒法求出向量pointxy。
那麼,還記得前面求得的直線方程嗎?
聯立:
用行列式解的優勢就是沒有那麼多if語句須要考慮,一個判別式解決一切:
所以,整個工做完成: