資料降維 多維尺度縮放(MDS)

2021-09-17 20:43:19 字數 1584 閱讀 1699

多維尺度縮放(mds)是一種比較經典的降維方法,它利用在低維度空間維持高維度空間的距離矩陣來學習資料在低維度空間的表示。演算法如下:

以上演算法來自西瓜書的截圖。 

python**如下:

#multiple dimensional scaling,mds,多維尺度縮放

#資料是按照行來排列的

#盡量讓樣本數目大於資料的維度

import numpy as np

import matplotlib.pyplot as plt

from scipy.linalg import eig

from scipy.spatial.distance import pdist,squareform

class mds():

def __init__(self,dim):

self.dim=dim

def fit(self,x):

self.x=x

return self

def predict(self):

sample_number=self.x.shape[0]#樣本數量

#距離矩陣

dist_2_matrix=squareform(pdist(self.x,"euclidean"))**2

dist_i=np.mean(dist_2_matrix,axis=1).reshape((1,sample_number))

dist_j=np.mean(dist_2_matrix,axis=0).reshape((sample_number,1))

dist_ij=np.mean(dist_j)

b=dist_2_matrix-dist_i-dist_j+dist_ij

b=b*-0.5

ei**alue,ei**ector=np.linalg.eig(b)

eig_diag=np.diag(ei**alue)

z_latent=ei**ector[:,:self.dim].dot(eig_diag[:self.dim,:self.dim])

return z_latent

#下面為測試資料每一對都是在某個座標軸上差了1,所以投射到二維空間距離還是比較近的

x=np.array([[2,2,2],[2,2,3],[9,4,9],[10,4,9],[3,45,23],[3,44,23]])

mds=mds(2)

mds.fit(x)

b=mds.predict()

print(b)

# plt.scatter(x[:,0],x[:,1],c="green")

plt.scatter(b[:,0],b[:,1],c="red")

plt.show()

為了檢驗試驗效果,我們故意製造了三對分別在三個資料軸差1的資料,對映到二維之後,我們可以看到他們之間的距離得到了維持。 

資料降維 多維縮放MDS

多維縮放 multidimensional scaling,mds 是一組物件之間的距離的視覺化表示,也可以當做一種無監督降維演算法使用。為了直觀了解mds,給乙個簡單例子。假設現在給定一組城市之間的距離資訊如下 現在要求繪製一幅地圖,在地圖中標出所有城市,並且城市之間的距離等於上表中給出的距離。顯...

機器學習之多維縮放 MDS 降維

coding utf 8 created on mon nov 26 17 25 11 2018 author muli import numpy as np import matplotlib.pyplot as plt from sklearn import datasets,manifold ...

機器學習演算法 多維縮放(MDS)

多維縮放 mutiple dimensional scaling 是一種經典的降維方法,可以緩解在高維情形下出現的資料樣本稀疏和距離計算困難等問題,即 維數災難 假定m 個樣本在原始空間的距離矩陣為 d rm m 其第i 行和第j列的元素di stij 為樣本xi 和 xj 的距離。我們的目標是獲得...