多維尺度縮放(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 的距離。我們的目標是獲得...