這次直接使用原始資料來實做,
一共有3個class,
每個class有10個sample,
而sample為3維(x1,x2,x3),
test point有4個。
資料如下:
w1=[-5.01 -8.12 -3.68;
-5.43 -3.48 -3.54;
1.08 -5.52 1.66;
0.86 -3.78 -4.11;
-2.67 0.63 7.39;
4.94 3.29 2.08;
-2.51 2.09 -2.59;
-2.25 -2.13 -6.94;
5.56 2.86 -2.26;
1.03 -3.33 4.33
];%class w1
w2=[-0.91 -0.18 -0.05;
1.30 -2.06 -3.53;
-7.75 -4.54 -0.95;
-5.47 0.50 3.92;
6.14 5.72 -4.85;
3.60 1.26 4.36;
5.37 -4.63 -3.65;
7.18 1.46 -6.66;
-7.39 1.17 6.30;
-7.50 -6.32 -0.31
];
w3=[ 5.35 2.26 8.13;
5.12 3.22 -2.66;
-1.34 -5.31 -9.87;
4.48 3.42 5.19;
7.11 2.39 9.21;
7.19 4.33 -0.98;
5.75 3.97 6.65;
0.77 0.27 2.41;
0.90 -0.43 -8.71;
3.52 -0.36 6.43
];
p1=[1;2;1];%test point1
p2=[5;3;2];
p3=[0;0;0];
p4=[1;0;0];pw1=0.8;%p(w1)
pw2=0.1;
pw3=0.1;
接下來只要套用【馬式距離】公式,
這裡我以dpiwj代表pi to wj,
pi為test point、wj為class,
部份指令如下:
dp1w1=(p1-mean(w1)’)’*inv(cov(w1))*(p1-mean(w1)’);
%the same as mahal(p1′,w1)
%Mahalanobis Distance: p1 to w1
dp1w2=(p1-mean(w2)’)’*inv(cov(w2))*(p1-mean(w2)’);
dp1w3=(p1-mean(w3)’)’*inv(cov(w3))*(p1-mean(w3)’);
…
…
其實Mahalanobis Distance在MATLAB上有函式可用:
mahal(p1′,w1)
結果mahal(p1′,w1)=(p1-mean(w1)’)’*inv(cov(w1))*(p1-mean(w1)’)。
以上為p(w1)=p(w2)=p(w3)時,
即可將pi區分類別wj,
部份結果如下:
#Mahalanobis Distance越小越好
dp1w1 = 1.0302
dp1w2 = 0.7363 *p1 to w2
dp1w3 = 7.1401
若p(w1)!=p(w2)!=p(w3)時怎麼辦?
那就要動用到Discriminant Function,
部份程式碼如下:
gp1w1=-0.5*((p1-mean(w1)’)’*inv(cov(w1))*(p1-mean(w1)’))+log(pw1);
%Discriminant Function: p1 to w1
gp1w2=-0.5*((p1-mean(w2)’)’*inv(cov(w2))*(p1-mean(w2)’))+log(pw2);
gp1w3=-0.5*((p1-mean(w3)’)’*inv(cov(w3))*(p1-mean(w3)’))+log(pw3);
…
…
經過MATLAB的運算後,
部份結果為:
#Discriminant Function越大越好
gp1w1 = -0.7382 *p1 to w1
gp1w2 = -2.6707
gp1w3 = -5.8726
至於Mahalanobis Distance和Discriminant Function定義可參考上一篇。
這麼多數據似乎不好理解,
那麼我們將它們轉換成圖表。
至於w2、w3也可以同樣的方式呈現~
最後我們來圖表化class間共30個sample的關係。
MATLAB的函式mahal(馬氏距離)和scatter3(3D圖表)可參考官方網站。


隨意留個言吧:)~