TSNE降維與視覺化
阿新 • • 發佈:2021-01-04
技術標籤:學習
TSNE是一種降維與視覺化技術,可以將資料點之間的相似度轉換為概率。在原空間(高維空間)中轉化為基於高斯分佈的概率;在嵌入空間(二維空間)中轉化為基於t分佈的概率。這使得t-SNE不僅可以關注區域性(SNE只關注相鄰點之間的相似度對映而忽略了全域性之間的相似度對映,使得視覺化後的邊界不明顯),還關注全域性,使視覺化效果更好(簇內不會過於集中,簇間邊界明顯)。也可以應用於深度學習中,將最後一 層得到的輸出進行TSNE降維。
有興趣的朋友可以看這篇部落格:t-SNE實踐——sklearn教程
https://blog.csdn.net/hustqb/article/details/80628721
"""t-SNE對手寫數字進行視覺化""" import numpy as np from sklearn.manifold import TSNE from time import time import matplotlib.pyplot as plt from sklearn import datasets def get_data(): digits = datasets.load_digits(n_class=6) data = digits.data # (1083,64) label = digits.target # (1083,) n_samples, n_features = data.shape return data, label, n_samples, n_features def plot_embedding(data, label, title): data = (data - data.min()) / (data.max() - data.min()) # 資料歸一化 fig = plt.figure() ax = plt.subplot(111) for i in range(data.shape[0]): # 遍歷;對每個資料進行操作 plt.text(data[i, 0], data[i, 1], str(label[i]), # plt.cm.Set()將不同的點用不同的顏色顯示出來 color = plt.cm.Set1(label[i] / 10.), fontdict={'weight':'bold', 'size': 9}) plt.xticks([]) plt.yticks([]) plt.title(title) return fig if __name__ == '__main__': data, label, n_samples, n_features = get_data() print('Computing t-SNE embedding') # 關鍵步驟: tsne = TSNE(n_components=2, init='pca', random_state= 0) t0 = time() result = tsne.fit_transform(data) # ndarray;(1083,2) fig = plot_embedding(result, label, 't-SNE embedding of the digits (time %.2fs)'%(time() - t0)) plt.show()
TSNE降維與視覺化的關鍵程式碼:
tsne = TSNE(n_components=2, init='pca', random_state= 0)
result = tsne.fit_transform(data) # ndarray;(1083,2)