當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python sklearn TSNE用法及代碼示例


本文簡要介紹python語言中 sklearn.manifold.TSNE 的用法。

用法:

class sklearn.manifold.TSNE(n_components=2, *, perplexity=30.0, early_exaggeration=12.0, learning_rate='warn', n_iter=1000, n_iter_without_progress=300, min_grad_norm=1e-07, metric='euclidean', init='warn', verbose=0, random_state=None, method='barnes_hut', angle=0.5, n_jobs=None, square_distances='legacy')

T-distributed 隨機鄰居嵌入。

t-SNE [1] 是一種可視化高維數據的工具。它將數據點之間的相似性轉換為聯合概率,並試圖最小化低維嵌入和高維數據的聯合概率之間的Kullback-Leibler散度。 t-SNE 有一個非凸的成本函數,即通過不同的初始化,我們可以獲得不同的結果。

如果特征數量非常多,強烈建議使用另一種降維方法(例如針對密集數據的 PCA 或針對稀疏數據的TruncatedSVD)將維度數量減少到合理的數量(例如 50)。這將抑製一些噪聲並加速樣本之間成對距離的計算。有關更多提示,請參閱 Laurens van der Maaten 的常見問題解答 [2]。

在用戶指南中閱讀更多信息。

參數

n_components整數,默認=2

嵌入空間的維度。

perplexity浮點數,默認=30.0

困惑度與其他流形學習算法中使用的最近鄰的數量有關。更大的數據集通常需要更大的困惑度。考慮選擇一個介於 5 和 50 之間的值。不同的值會導致明顯不同的結果。

early_exaggeration浮點數,默認=12.0

控製原始空間中的自然簇在嵌入空間中的緊密程度以及它們之間的空間大小。對於較大的值,自然簇之間的空間在嵌入空間中會更大。同樣,這個參數的選擇不是很關鍵。如果在初始優化期間成本函數增加,則早期誇大因子或學習率可能過高。

learning_rate浮點數或‘auto’,默認=200.0

t-SNE 的學習率通常在 [10.0, 1000.0] 範圍內。如果學習率太高,數據可能看起來像‘ball’,其中任何點與其最近的鄰居的距離大致相等。如果學習率太低,大多數點可能看起來壓縮在一個密集的雲中,隻有很少的異常值。如果成本函數陷入糟糕的局部最小值,提高學習率可能會有所幫助。請注意,許多其他 t-SNE 實現(bhtsne、FIt-SNE、openTSNE 等)使用的 learning_rate 定義比我們的小 4 倍。所以我們的learning_rate=200 對應於其他實現中的learning_rate=800。 ‘auto’ 選項將 learning_rate 設置為 max(N / early_exaggeration / 4, 50),其中 N 是樣本大小,在 [4] 和 [5] 之後。這將在 1.2 中成為默認設置。

n_iter整數,默認=1000

優化的最大迭代次數。應至少為 250。

n_iter_without_progress整數,默認=300

在我們中止優化之前沒有進展的最大迭代次數,在早期誇張的 250 次初始迭代之後使用。請注意,僅每 50 次迭代檢查一次進度,因此該值四舍五入為 50 的下一個倍數。

min_grad_norm浮點數,默認=1e-7

如果梯度範數低於這個閾值,優化將停止。

metricstr 或可調用,默認='euclidean'

計算特征數組中實例之間的距離時使用的度量。如果 metric 是字符串,則它必須是 scipy.spatial.distance.pdist 為其 metric 參數允許的選項之一,或者是pairwise.PAIRWISE_DISTANCE_FUNCTIONS 中列出的指標。如果度量為“precomputed”,則假定 X 是距離矩陣。或者,如果 metric 是可調用函數,則在每對實例(行)上調用它並記錄結果值。該可調用函數應將 X 中的兩個數組作為輸入,並返回一個指示它們之間距離的值。默認值為“euclidean”,它被解釋為平方歐氏距離。

init{‘random’, ‘pca’} 或形狀的ndarray(n_samples,n_components),默認='random'

嵌入的初始化。可能的選項是‘random’, ‘pca’,以及一個 numpy 形狀數組(n_samples,n_components)。 PCA 初始化不能與預先計算的距離一起使用,並且通常比隨機初始化更全局穩定。 init='pca' 將在 1.2 中成為默認值。

verbose整數,默認=0

詳細程度。

random_stateint、RandomState 實例或無,默認=無

確定隨機數生成器。傳遞 int 以獲得跨多個函數調用的可重現結果。請注意,不同的初始化可能會導致成本函數的不同局部最小值。請參閱術語表。

methodstr,默認='barnes_hut'

默認情況下,梯度計算算法使用在 O(NlogN) 時間內運行的Barnes-Hut 近似值。 method='exact' 將在 O(N^2) 時間內在較慢但精確的算法上運行。當nearest-neighbor 錯誤需要優於 3% 時,應使用精確算法。但是,確切的方法無法擴展到數百萬個示例。

angle浮點數,默認=0.5

僅在 method='barnes_hut' 時使用 這是 Barnes-Hut T-SNE 的速度和準確性之間的權衡。 ‘angle’ 是從一個點測量的遠處節點的角度大小(在 [3] 中稱為 theta)。如果此大小低於‘angle’,則將其用作其中包含的所有點的匯總節點。這種方法對這個參數在 0.2 - 0.8 範圍內的變化不是很敏感。小於 0.2 的角度會迅速增加計算時間,而大於 0.8 的角度會迅速增加誤差。

n_jobs整數,默認=無

為鄰居搜索運行的並行作業數。此參數在metric="precomputed" 或(metric="euclidean"method="exact")時沒有影響。 None 表示 1,除非在 joblib.parallel_backend 上下文中。 -1 表示使用所有處理器。有關詳細信息,請參閱詞匯表。

square_distances真或‘legacy’,默認='legacy'

TSNE 是否應該對距離值進行平方。 'legacy' 表示距離值僅在 metric="euclidean" 時才平方。 True 表示所有度量的距離值都是平方的。

屬性

embedding_形狀類似數組 (n_samples, n_components)

存儲嵌入向量。

kl_divergence_浮點數

Kullback-Leibler優化後的發散。

n_features_in_int

擬合期間看到的特征數。

feature_names_in_ndarray 形狀(n_features_in_,)

擬合期間看到的特征名稱。僅當 X 具有全為字符串的函數名稱時才定義。

n_iter_int

運行的迭代次數。

參考

[1] 範德邁騰,L.J.P.;欣頓,G.E.可視化高維數據

使用t-SNE。機器學習研究雜誌 9:2579-2605, 2008。

[2] van der Maaten, L.J.P. t-Distributed 隨機鄰居嵌入

https://lvdmaaten.github.io/tsne/

[3] L.J.P.範德馬騰。使用基於樹的算法加速t-SNE。

機器學習研究雜誌 15(十月):3221-3245,2014。https://lvdmaaten.github.io/publications/papers/JMLR_2014.pdf

[4] Belkina, A. C., Ciccolella, C. O., Anno, R., Halpert, R., Spidlen, J.,

&Snyder-Cappione,J.E.(2019 年)。 T-distributed 隨機鄰居嵌入的自動優化參數改進了大型數據集的可視化和分析。自然通訊,10(1),1-12。

[5] Kobak, D. 和 Berens, P. (2019)。 t-SNE 用於single-cell 的藝術

轉錄組學。自然通訊,10(1),1-14。

例子

>>> 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, learning_rate='auto',
...                   init='random').fit_transform(X)
>>> X_embedded.shape
(4, 2)

相關用法


注:本文由純淨天空篩選整理自scikit-learn.org大神的英文原創作品 sklearn.manifold.TSNE。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。