機器學習之多維縮放(MDS)降維
阿新 • • 發佈:2018-11-29
- 機器學習之多維縮放(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 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
- 降維後圖: