MDS降維實例展示

理論推導可以參看圖像降維之MDS特徵抽取方法
樣例來自Multidimensional scaling

前言

MDS的理論推導已經有很多了,基本上來自周志華老師的西瓜書,但其中的細節還有許多不明白,因此希望通過matlab實例來理清所有脈絡。

需要解釋幾點

1、輸入數據

輸入數據是距離矩陣D,而不是原始的m個d維向量,說明有數據的信息量缺失,但它們的相對位置關係是明確的。實例中的距離矩陣如下:
距離矩陣D
也就是有4組數據,但它們的維度不知道,姑且認爲較大吧,我們的任務是找4組二維的數據Z4×2Z_{4\times 2},讓它們間的距離和上述距離相等。

2、計算Z的內積矩陣

通過兩者距離相等的關係,我們希望可以求出Z的內積矩陣B=ZZTB=ZZ^T的各個元素(這裏和西瓜書不一樣,因爲這裏的Z由行向量組成,每行表示一組數據),具體的公式有點複雜:
bij=12(disttij2distt2i.distt2.j+dist2) b_{ij}=-\frac{1}{2}(distt^2_{ij}-distt^2{i.}-distt^2{.j}+dist^2)
但幸運的是,這都是紙老虎,在matlab具體計算的時候,其實各部分很簡單,詳見後面matal代碼部分

3、由內積矩陣獲得Z

因爲Bm×mB_{m\times m}是是對稱陣,可以得到m個特徵值和特徵向量(這裏西瓜書寫的是原數據的維度d,應該是不對的),特徵向量從大到小排序:
B=VΛVT=VΛ1/2(VΛ1/2)T=ZZT B=V \Lambda V^T=V \Lambda ^{1/2} (V\Lambda ^{1/2})^T=ZZ^T
所以Zm×m=VΛ1/2Z_{m\times m}=V\Lambda^{1/2}
爲了實現降維,我們提取前d’個特徵值和特徵向量,即:V=Vm×dV_*=V_{m\times d'}Λ=Λd×d\Lambda_*=\Lambda_{d'\times d'}。得到
Zm×d=VΛ1/2Z_{m\times d'}=V_*\Lambda_*^{1/2}

matlab代碼

clear;clc;
%輸入的歐式距離對稱矩陣
D=[0 3.1416 0.7854 1.5708;3.1416 0 2.3562 1.5708;
   0.7854 2.3562 0 2.3562;1.5708 1.5708 2.3562 0];
%距離平方對稱陣
D2=D.*D; %每個元素爲distt(ij)^2
%獲得B矩陣
distt2i=mean(D2);    %對列求平均1*4矩陣
distt2j=mean(D2,2);  %對行求平均4*1矩陣
dist2=mean(mean(D2));      %所有距離的平均1*1矩陣
%matlab可以自動展開成4*4矩陣並做加減計算
B=-1/2*(D2-distt2i-distt2j+dist2);
%B=VAV'
[V,A]=eig(B);
%翻轉特徵向量,從特徵值大到小排序
V=fliplr(V);A=wrev(diag(A));
%% 提取前兩個最大的特徵值,和特徵向量,計算Z,實現降維
Z=V(:,1:2)*diag(sqrt(A(1:2)))

結果如下:

捕獲.JPG

Z剔除了部分信息後,內積矩陣與B是有差距的,但總體可以接受,最後再比較Z的4組樣本間的兩兩距離:
兩兩距離比較

可以看出,整體效果還是很好的!

小結

  • 內積矩陣B的維度是m×mm\times m,m爲樣本數量,求取得特徵值和特徵向量也有m個,不是d個(原樣本的維度)。
  • 降維是通過選取前d’個特徵值,和對應d’個特徵列向量,獲得Zm×dZ_{m\times d'}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章