多維尺度變換MDS(Multidimensional Scaling)


流形學習(Manifold Learning)是機器學習中一大類算法的統稱,流形學習是非線性的降維方法(an approach to non-linear dimensionality reduction)。PCA、LDA等降維方法基於線性假設,經常會損失數據內部非線性的結構信息;流形學習是線性降維方法的generalization,目的是捕獲數據內部非線性的結構。而MDS就是流行學習中非常經典的一種方法。

 

多維尺度變換是一種在低維空間展示“距離”數據結構的多元數據分析技術,是一種將多維空間的研究對象簡化到低維空間進行定位、分析和歸類,同時又保留對象間原始關系的數據分析方法。多維尺度變換算法集中於保留高維空間中的“相似度”信息,而在一般的問題解決的過程中,這個“相似度”通常用歐式距離來定義。

通俗來講,就是將多維數據映射到低維空間,同時保持各個樣本之間的原有相對距離不變。

 

多維尺度變換的目標:當n 個對象中各對對象之間的相似性(或距離)給定時,確定這些對象在低維(歐式) 空間中的表示(稱為感知圖, Perceptual Mapping),
並使其盡可能與原先的相似性(或距離)“大體匹配”,使得由降維所引起的任何變形達到最小。

多維尺度變換可以應用到數據可視化,通過可視化找出異常點,反欺詐應用等。

 

計算步驟大致如下:

第一步:計算所有數據項兩兩間的實際距離(可參考皮爾遜算法或歐幾里德算法)

第二步:將數據項隨機放置在二維圖上。

第三步:針對每兩兩構成的一對數據項,將它們的實際距離與當前在二維圖上的距離進行比較,求出一個誤差值

第四步:根據誤差的情況,按照比例將每個數據項的所在位置移近或移遠少許量。(每一個節點的移動,都是所有其它節點施加在該節點上的推或拉的結合效應。)

第五步:重復第三步、第四步(節點每移動一次,其當前距離與實際距離的差距就會減少一些)。這一過程會不斷地重復多次,直到無法再通過移動節點來減少總體誤差為止。

 

python 實現

已知四個城市之間的距離,如何展示出他們的相對位置,原理就是利用MDS將多維數據映射到二維空間,作為經緯度坐標,同時之間的相對距離保持不變。

import numpy as np
import pandas as pd
from sklearn.manifold import MDS
import matplotlib.pyplot as plt
#%%
data = np.array([(0,1046,608,1859),
                 (1046,0,825,1149),
                 (608,825,0,1280),
                 (1859,1149,1280,0)
                ]
               )
index = ['beijing','shanghai','zhengzhou','guangzhou']
columns = ['beijing','shanghai','zhengzhou','guangzhou']
Word = pd.DataFrame(data,index,columns)
Word
#%%
mds = MDS()
mds.fit(data)
#%%
a = mds.embedding_
print(a)
plt.scatter(a[0:,0],a[0:,1],color='red')

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM