1. 程式人生 > 其它 >TSNE降維與視覺化

TSNE降維與視覺化

技術標籤:學習

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)