多維標度法(multidimensional scaling,MDS)是一種在低維空間展示“距離”數據結構的多元數據分析技術,是一種將多維空間的研究對象( 樣本 或 變量 ) 簡化到低維空間進行定位、分析和歸類, 同時又保留對象間原始關系的數據分析方法。
多維標度法與主成分分析(Principle Component Analysis,PCA)、線性判別分析(Linear Discriminent Analysis,LDA)類似,都可以用來降維.(注:在PCA中,我們降維所用的方法依次尋找正交的並且variance最大的方向,因為variance能夠最大程度的保存原特征空間中的信息。在LDA中,因為數據有label,通過一個線性變換,把每個類的中心點 Mk映射到一個新的空間,使得在這個新的空間上,一方面各個中心點之間的距離(這里可稱之為類間距離)盡量保持足夠大,另一方面每個類里面的點到其中心點的距離(這里可稱之為類內距離)盡量小。更多細節略)
多維標度法的目標:當n 個對象中各對對象之間的相似性(或距離)給定時,確定這些對象在低維(歐式) 空間中的表示(稱為感知圖, Perceptual Mapping),並使其盡可能與原先的相似性(或距離)“大體匹配”,使得由降維所引起的任何變形達到最小。
低維(歐式) 空間中排列的每一個點代表一個對象,因此點間的距離與對象間的相似性高度相關。也就是說,兩個相似的對象由低維(歐式) 空間中兩個距離相近的點表示,而兩個不相似的對象則由低維(歐式) 空間兩個距離較遠的點表示。低維空間通常為二維或三維的歐氏空間,但也可以是非歐氏三維以上空間.
Classical MDS:
• 原始空間下的距離陣和低維空間下的距離陣都采用歐式距離陣
• 距離陣D 為歐式的, 即存在某個正整數p 以及Rp 空間的n個點x1, . . . , xn, 使得
目標在於: 尋找D 的(擬合) 構圖x1, . . . , xn, 其想法為
– 將平方的歐式距離陣D = (d2ij) 變換為一個非負定矩陣B
– 由B 的特征根和特征向量得到構圖X, X 的每一行表示低維空間的點.
• 為此, 記原始的p 維對象(觀測點) 為x1, . . . , xn(一般是未知的), 兩兩之間的距離平方為
B = −1/2*HDH,H = In − 1/n 11′
其中, r 的確定: 事先確定r = 1, 2 或3; 或者通過計算前面特征根占全體特征根的比例確定.
import numpy as np D=np.array([[0,411,213,219,296,397], [411,0,204,203,120,152], [213,204,0,73,136,245], [219,203,73,0,90,191], [296,120,136,90,0,109], [ 397,152,245,191,109,0]]) N = D.shape[0] T = np.zeros((N,N)) #solution 1 #ss = 1.0/N**2*np.sum(D**2) #for i in range(N): # for j in range(i,N): # T[i,j] = T[j,i] = -0.5*(D[i,j]**2 -1.0/N*np.dot(D[i,:],D[i,:]) -1.0/N*np.dot(D[:,j],D[:,j])+ss) #solution 2 #K = np.dot(D,np.transpose(D)) D2 = D**2 H = np.eye(N) - 1/N T = -0.5*np.dot(np.dot(H,D2),H) eigVal,eigVec = np.linalg.eig(T) X = np.dot(eigVec[:,:2],np.diag(np.sqrt(eigVal[:2]))) print('original distance','\tnew distance') for i in range(N): for j in range(i+1,N): print(np.str(D[i,j]),'\t\t',np.str("%.4f"%np.linalg.norm(X[i]-X[j])))
運行結果:
參考文檔:典型相關分析和多維標度法-張偉平的講義