什么是t-SNE ?
t-SNE 的全稱為 t-distributed Stochastic Neighbor Embedding ,t-分布隨機近鄰嵌入。
t-SNE 可用於高維度數據的可視化。它將數據點之間的相似性轉換為聯合概率,並嘗試最小化低維嵌入和高維數據的聯合概率之間的KL散度(Kullback-Leibler divergence)。t-SNE的成本函數不是凸的,即使用不同的初始化我們可以得到不同的結果。
當待降維的數據維度過高時,建議使用其他的降維方法將數據降至合適的維度。例如使用主成分分析(PCA)處理密集數據,使用截斷奇異值分解(TruncatedSVD)處理稀疏數據。這樣將會在降維過程中抑制噪聲的影響,並且加快樣本之間成對距離的計算。
使用方法
>>> import numpy as np
>>> from sklearn.manifold import TSNE
>>> X = np.array([[0, 0, 0], [0, 1, 1], [1, 0, 1], [1, 1, 1]])
>>> X_embedded = TSNE(n_components=2).fit_transform(X)
>>> X_embedded.shape
(4, 2)
簡單來說,整個過程如下:
- 准備數據。整理你的數據 X,使其成為一個 m×n 的 np.array,其中 m 為樣本個數,n 為樣本的維度。無論你的數據是語音、文本、圖像,都需要將其轉換成展開的形式,成為一行向量。
- 實例化TSNE。使用sklearn實例化一個TSNE,設置好降維后的維度 t ,(通過設置 n_components=t 來實現)。其他的參數可以查看文檔,進一步了解。
- 降維。使用實例化的TSNE進行降維操作,一般調用的是 fit_transform 方法,轉換完成后,輸出一個降維的 np.array ,此時他的形狀為 m×t 。
- 可視化。降維后的數據,你可以使用 matplotlib 進行可視化,顯示到二維坐標上,或者三維空間坐標上。
參考資料
- sklearn官網,https://scikit-learn.org/stable/modules/generated/sklearn.manifold.TSNE.html
- T – 分布隨機近鄰嵌入 T-Distribution Stochastic Neighbour Embedding, https://hyper.ai/wiki/2573
- t-SNE實踐(可視化兩個圖片數據集合的差異),https://zhuanlan.zhihu.com/p/67491123