數據降維可視化工具——openTSNE

t-SNE介紹

t-SNE全稱是 t-Distributed Stochastic Neighbor Embedding,一種數據降維和可視化的方法,文章最先發表於[1]。我們在做一些無監督學習時,如何去評估學到的表徵向量的效果,最直觀的方法就是判斷同類之間是不是形成一個簇,不同類之間相隔較遠。但是,對於高維(大於三維)向量,我們很難直接用這樣的方法去判斷它們是不是具有這樣的關係。因此,t-SNE就是基於這樣的考慮,通過把高維數據壓縮到2維空間上來評估算法的有效性。
本文主要介紹如何使用openTSNE可視化學到的embedding向量,關於t-SNE的推導這裏不展開。

openTSNE

github地址:https://github.com/pavlin-policar/openTSNE
官方文檔地址:https://opentsne.readthedocs.io/en/latest/

參數

openTSNE按功能大致分爲兩部分,embedding壓縮和散點圖繪製。embedding壓縮就可以看成是一個機器學習任務,比如我們先實例化TSNE類,然後擬合訓練數據x_train,然後可以得到壓縮之後的二維向量(看具體需求,如果你想要在3維座標系下可視化,那麼就可以壓縮成三維)。

tsne = TSNE(
    perplexity=30,
    n_iter=50,
    metric="euclidean",
    callbacks=ErrorLogger(),
    n_jobs=8,
    random_state=42,
)
embedding_train = tsne.fit(x_train)

這裏有幾個重要的參數:

perplexity: 困惑度,表示了近鄰的數量,例如設perplexity爲2,那麼就很有可能得到很多兩個一對的小集羣
n_iter: 迭代次數
metric:度量兩個點之間的方式,這裏用歐式距離度量
n_jobs: 線程數

擬合了向量之後就是可視化,可視化本質上是散點圖繪製。核心方法是:

#這裏三個參數分別是壓縮後的向量,label,每個label的顏色
utils.plot(embedding, y, colors=utils.MACOSKO_COLORS) 
#plot方法下的方法:
ax.scatter(centers[:, 0], centers[:, 1], c=center_colors, s=48, alpha=1, edgecolor="k")

這裏要想圖畫得清晰直觀,甚至酷炫,顏色的搭配和字體大小必須是多次調試的參數。上面的MACOSKO_COLORS代表的就是每個label對應的顏色代碼,如:
在這裏插入圖片描述
因此我們在可視化自己模型學到向量時需要自定義label,可選地自定義label對應的顏色。

實例

from sklearn import datasets
from openTSNE import TSNEEmbedding
from openTSNE import TSNE
from openTSNE.affinity import PerplexityBasedNN
from openTSNE import initialization
from openTSNE.callbacks import ErrorLogger
import utils
import numpy as np
import matplotlib.pyplot as plt
iris = datasets.load_iris()
x, y = iris["data"], iris["target"]
tsne = TSNE(
    perplexity=30,
    n_iter=50,
    metric="euclidean",
    callbacks=ErrorLogger(),
    n_jobs=8,
    random_state=42,
)
embedding = tsne.fit(x)
utils.plot(embedding, y, colors=utils.MOUSE_10X_COLORS)

效果:
在這裏插入圖片描述

References

  1. Maaten L, Hinton G. Visualizing data using t-SNE[J]. Journal of machine learning research, 2008, 9(Nov): 2579-2605.
  2. https://www.jianshu.com/p/631d6529e0df?from=singlemessage,t-SNE使用過程中的一些坑
  3. https://opentsne.readthedocs.io/en/latest/,官方文檔
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章