# -*- 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
def load_data():
'''載入用於降維的資料
:return: 乙個元組,依次為訓練樣本集和樣本集的標記
'''# 使用 scikit-learn 自帶的 iris 資料集
iris=datasets.load_iris()
return iris.data,iris.target
def test_mds(*data):
'''測試 mds 的用法
:param data: 可變引數。
它是乙個元組,這裡要求其元素依次為:訓練樣本集、訓練樣本的標記
:return: none
'''x,y=data
print(np.shape(x))
print("***************************")
# 依次考察降維目標為 4維、3維、2維、1維
for n in [4,3,2,1]:
mds=manifold.mds(n_components=n)
mds.fit(x)
# 不一致的距離的總和
print('stress(n_components=%d) : %s'% (n, str(mds.stress_)))
def plot_mds(*data):
'''繪製經過 使用 mds 降維到二維之後的樣本點
:param data: 可變引數。
它是乙個元組,這裡要求其元素依次為:訓練樣本集、訓練樣本的標記
:return: none
'''x,y=data
print(x)
print("------------------------")
mds=manifold.mds(n_components=2)
#原始資料集轉換到二維
x_r=mds.fit_transform(x)
# 檢視降維後的資料
print(x_r)
### 繪製二維圖形
fig=plt.figure()
ax=fig.add_subplot(1,1,1)
# 顏色集合,不同標記的樣本染不同的顏色
colors=((1,0,0),(0,1,0),(0,0,1),(0.5,0.5,0),(0,0.5,0.5),(0.5,0,0.5),
(0.4,0.6,0),(0.6,0.4,0),(0,0.6,0.4),(0.5,0.3,0.2),)
for label ,color in zip( np.unique(y),colors):
position=y==label
ax.scatter(x_r[position,0],x_r[position,1],label="target= %d"%label,color=color)
ax.set_xlabel("x[0]")
ax.set_ylabel("x[1]")
ax.legend(loc="best")
ax.set_title("mds")
plt.show()
if __name__=='__main__':
x,y=load_data() # 產生用於降維的資料集
test_mds(x,y) # 呼叫 test_mds
# plot_mds(x,y) # 呼叫 plot_mds
資料降維 多維縮放MDS
多維縮放 multidimensional scaling,mds 是一組物件之間的距離的視覺化表示,也可以當做一種無監督降維演算法使用。為了直觀了解mds,給乙個簡單例子。假設現在給定一組城市之間的距離資訊如下 現在要求繪製一幅地圖,在地圖中標出所有城市,並且城市之間的距離等於上表中給出的距離。顯...
資料降維 多維尺度縮放(MDS)
多維尺度縮放 mds 是一種比較經典的降維方法,它利用在低維度空間維持高維度空間的距離矩陣來學習資料在低維度空間的表示。演算法如下 以上演算法來自西瓜書的截圖。python 如下 multiple dimensional scaling,mds,多維尺度縮放 資料是按照行來排列的 盡量讓樣本數目大於...
機器學習演算法 多維縮放(MDS)
多維縮放 mutiple dimensional scaling 是一種經典的降維方法,可以緩解在高維情形下出現的資料樣本稀疏和距離計算困難等問題,即 維數災難 假定m 個樣本在原始空間的距離矩陣為 d rm m 其第i 行和第j列的元素di stij 為樣本xi 和 xj 的距離。我們的目標是獲得...