mds算法python函数_多维标度法(MDS)的Python实现
標簽:
多維標度法(multidimensional scaling,MDS)是一種在低維空間展示“距離”數據結構的多元數據分析技術,是一種將多維空間的研究對象( 樣本 或 變量 ) 簡化到低維空間進行定位、分析和歸類, 同時又保留對象間原始關系的數據分析方法。
多維標度法與主成分分析(Principle Component Analysis,PCA)、線性判別分析(Linear Discriminent Analysis,LDA)類似,都可以用來降維
多維標度法的目標:當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; 或者通過計算前面特征根占全體特征根的比例確定.
importnumpy 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**2H= 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 inrange(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])))
運行結果:
參考文檔:典型相關分析和多維標度法-張偉平的講義
標簽:
總結
以上是生活随笔為你收集整理的mds算法python函数_多维标度法(MDS)的Python实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql连接池_基于Swoole的通用
- 下一篇: 如何在家里制作自制酸奶冰淇淋?