天天看點

深度學習-t-SNE對S型資料降維

目标效果:

深度學習-t-SNE對S型資料降維

代碼:

import numpy as np
from sklearn.manifold import TSNE
from time import time
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from sklearn import manifold, datasets

"""擷取資料點"""
n_points = 1000
# high是一個(1000, 3)的2維資料,color是一個(1000,)的1維資料
high, color = datasets.samples_generator.make_s_curve(n_points, random_state=0)   #生成一個s曲線,第一個參數為s曲線上的采樣點個數,傳回一個high矩陣,包含三維坐标資訊,和一個color矩陣,包含顔色資訊
n_neighbors = 10   #我們搜尋的樣本的近鄰個數
n_components = 2   #要降到的次元

"""設定畫布"""
fig = plt.figure(figsize=(8, 8))   #設定8*8的畫布
plt.suptitle("Manifold Learning with %i points, %i neighbors"% (1000, n_neighbors), fontsize=14)

'''繪制S曲線的3D圖像'''
ax = fig.add_subplot(211, projection='3d')   #目前操作兩行一列中的第一個圖
ax.scatter(high[:, 0], high[:, 1], high[:, 2], c=color, cmap=plt.cm.Spectral)   #畫出3維散點圖
ax.view_init(10, -60)  # 初始化視角,第一個參數為正代表在上邊看,第二個參數為負代表在左邊看。

'''t-SNE'''
t0 = time()   #記錄開始運作的時間
tsne = manifold.TSNE(n_components=n_components, init='pca', random_state=0)   #定義tsne變量
low = tsne.fit_transform(high)  # 使用tsne降維
t1 = time()   #記錄轉換結束的時間
ax = fig.add_subplot(2, 1, 2)   #目前操作兩行一列中的第二個圖
plt.scatter(low[:, 0], low[:, 1], c=color, cmap=plt.cm.Spectral)   #繪制散點
plt.title("t-SNE (%.2g sec)" % (t1 - t0))

plt.show()
           

---end---

繼續閱讀