t-SNE#

class sklearn.manifold.TSNE(n_components=2, *, perplexity=30.0, early_exaggeration=12.0, learning_rate='auto', max_iter=None, n_iter_without_progress=300, min_grad_norm=1e-07, metric='euclidean', metric_params=None, init='pca', verbose=0, random_state=None, method='barnes_hut', angle=0.5, n_jobs=None, n_iter='deprecated')[原始碼]#

T 分布隨機鄰近嵌入 (T-distributed Stochastic Neighbor Embedding)。

t-SNE [1] 是一種視覺化高維度資料的工具。它將資料點之間的相似性轉換為聯合機率,並嘗試最小化低維度嵌入的聯合機率與高維度資料之間的 Kullback-Leibler 散度。t-SNE 具有非凸的成本函數,也就是說,使用不同的初始化,我們可能會得到不同的結果。

如果特徵數量非常高,強烈建議使用另一種降維方法(例如,對於密集資料使用 PCA,對於稀疏資料使用 TruncatedSVD)將維度數量減少到合理的量(例如 50)。這將抑制一些雜訊並加速樣本之間成對距離的計算。更多提示請參閱 Laurens van der Maaten 的 FAQ [2]。

請在使用者指南中閱讀更多內容。

參數:
n_componentsint,預設值=2

嵌入空間的維度。

perplexityfloat,預設值=30.0

困惑度與其他流形學習演算法中使用的最近鄰居數量相關。較大的資料集通常需要較大的困惑度。考慮選擇介於 5 和 50 之間的值。不同的值可能會導致顯著不同的結果。困惑度必須小於樣本數。

early_exaggerationfloat,預設值=12.0

控制原始空間中的自然叢集在嵌入空間中的緊密程度以及它們之間將有多少空間。對於較大的值,嵌入空間中自然叢集之間的空間將會較大。同樣,此參數的選擇不是非常關鍵。如果在初始優化期間成本函數增加,則早期誇大因子或學習率可能太高。

learning_ratefloat 或 “auto”,預設值=“auto”

t-SNE 的學習率通常在 [10.0, 1000.0] 範圍內。如果學習率太高,資料可能看起來像一個「球」,任何點都近似等距於其最近的鄰居。如果學習率太低,則大多數點可能會看起來被壓縮在一個密集的雲中,其中很少有離群值。如果成本函數陷入不良的局部最小值,增加學習率可能會有所幫助。請注意,許多其他 t-SNE 實作(bhtsne、FIt-SNE、openTSNE 等)使用的學習率定義比我們的定義小 4 倍。因此,我們的 learning_rate=200 對應於那些其他實作中的 learning_rate=800。「auto」選項會將學習率設定為 max(N / early_exaggeration / 4, 50),其中 N 為樣本大小,遵循 [4] 和 [5]。

版本 1.2 已變更: 預設值已變更為 "auto"

max_iterint,預設值=1000

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

版本 1.5 已變更: 參數名稱已從 n_iter 變更為 max_iter

n_iter_without_progressint,預設值=300

在中止優化之前,沒有進展的最大迭代次數,在經過 250 次初始迭代並進行早期誇大後使用。請注意,進度僅每 50 次迭代檢查一次,因此此值會四捨五入到下一個 50 的倍數。

版本 0.17 新增: 參數 n_iter_without_progress 用於控制停止條件。

min_grad_normfloat,預設值=1e-7

如果梯度範數低於此閾值,則優化將會停止。

metricstr 或可呼叫物件,預設值='euclidean'

計算特徵陣列中實例之間距離時要使用的度量。如果 metric 是字串,則它必須是 scipy.spatial.distance.pdist 為其 metric 參數允許的選項之一,或是 pairwise.PAIRWISE_DISTANCE_FUNCTIONS 中列出的度量。如果 metric 為「precomputed」,則假設 X 為距離矩陣。或者,如果 metric 是可呼叫的函式,則會針對每對實例(列)呼叫它,並記錄結果值。可呼叫物件應將 X 中的兩個陣列作為輸入,並傳回一個表示它們之間距離的值。預設值為「euclidean」,這會解讀為平方歐幾里得距離。

metric_paramsdict,預設值=None

度量函式的其他關鍵字引數。

版本 1.1 新增。

init{“random”, “pca”} 或形狀為 (n_samples, n_components) 的 ndarray,預設值=“pca”

嵌入的初始化。PCA 初始化不能與預先計算的距離一起使用,並且通常比隨機初始化更具全局穩定性。

版本 1.2 已變更: 預設值已變更為 "pca"

verboseint,預設值=0

詳細程度。

random_stateint,RandomState 實例或 None,預設值為 None

決定亂數產生器。傳入整數以在多次函數呼叫中獲得可重現的結果。請注意,不同的初始化可能會導致成本函數的不同局部最小值。請參閱詞彙表

method{‘barnes_hut’, ‘exact’},預設值為 ‘barnes_hut’

預設情況下,梯度計算演算法使用 Barnes-Hut 近似,以 O(NlogN) 時間執行。 method='exact' 將以較慢但精確的演算法以 O(N^2) 時間執行。當最近鄰居誤差需要優於 3% 時,應使用精確的演算法。但是,精確的方法無法擴展到數百萬個範例。

0.17 版新增:透過 Barnes-Hut 的近似最佳化方法

anglefloat,預設值為 0.5

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

n_jobsint,預設值為 None

為鄰居搜尋執行的並行作業數量。當 metric="precomputed" 或 (metric="euclidean"method="exact") 時,此參數沒有影響。None 表示 1,除非在 joblib.parallel_backend 環境中。-1 表示使用所有處理器。有關詳細資訊,請參閱詞彙表

0.22 版新增。

n_iterint

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

自 1.5 版起已棄用:n_iter 已在 1.5 版中棄用,並將在 1.7 版中移除。請改用 max_iter

屬性:
embedding_形狀為 (n_samples, n_components) 的類陣列

儲存嵌入向量。

kl_divergence_float

最佳化後的 Kullback-Leibler 散度。

n_features_in_int

fit 期間看到的特徵數量。

0.24 版新增。

feature_names_in_形狀為 (n_features_in_,) 的 ndarray

fit 期間看到的特徵名稱。僅在 X 具有都是字串的特徵名稱時定義。

1.0 版新增。

learning_rate_float

有效學習率。

1.2 版新增。

n_iter_int

執行的迭代次數。

另請參閱

sklearn.decomposition.PCA

主成分分析,這是一種線性降維方法。

sklearn.decomposition.KernelPCA

使用核函數和 PCA 的非線性降維。

MDS

使用多維尺度的流形學習。

Isomap

基於等距映射的流形學習。

LocallyLinearEmbedding

使用局部線性嵌入的流形學習。

譜嵌入 (SpectralEmbedding)

用於非線性維度的頻譜嵌入。

備註

有關結合使用 TSNEKNeighborsTransformer 的範例,請參閱 TSNE 中的近似最近鄰

參考文獻

[1] van der Maaten, L.J.P.; Hinton, G.E. Visualizing High-Dimensional Data

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

[2] van der Maaten, L.J.P. t-分佈隨機鄰近嵌入

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

[3] L.J.P. van der Maaten。使用基於樹狀結構的演算法加速 t-SNE。

機器學習研究雜誌 15(Oct):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 分佈隨機鄰近嵌入的自動最佳化參數可改善大型資料集的視覺化和分析。《自然通訊》,10(1), 1-12。

[5] Kobak, D., & Berens, P. (2019)。使用 t-SNE 進行單細胞的藝術

轉錄組學。《自然通訊》,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', perplexity=3).fit_transform(X)
>>> X_embedded.shape
(4, 2)
fit(X, y=None)[來源]#

將 X 擬合到嵌入空間中。

參數:
X形狀為 (n_samples, n_features) 或 (n_samples, n_samples) 的類陣列、稀疏矩陣

如果度量為 'precomputed',則 X 必須是平方距離矩陣。否則,它包含每列的樣本。如果方法為 'exact',則 X 可以是類型為 'csr'、'csc' 或 'coo' 的稀疏矩陣。如果方法為 'barnes_hut' 且度量為 'precomputed',則 X 可以是預先計算的稀疏圖。

yNone

忽略。

傳回值:
self物件

已擬合的估算器。

fit_transform(X, y=None)[來源]#

將 X 擬合到嵌入空間中,並傳回轉換後的輸出。

參數:
X形狀為 (n_samples, n_features) 或 (n_samples, n_samples) 的類陣列、稀疏矩陣

如果度量為 'precomputed',則 X 必須是平方距離矩陣。否則,它包含每列的樣本。如果方法為 'exact',則 X 可以是類型為 'csr'、'csc' 或 'coo' 的稀疏矩陣。如果方法為 'barnes_hut' 且度量為 'precomputed',則 X 可以是預先計算的稀疏圖。

yNone

忽略。

傳回值:
X_new形狀為 (n_samples, n_components) 的 ndarray

訓練資料在低維空間中的嵌入。

get_feature_names_out(input_features=None)[來源]#

取得轉換的輸出特徵名稱。

輸出的特徵名稱會加上小寫的類別名稱作為前綴。例如,如果轉換器輸出 3 個特徵,則輸出的特徵名稱為:["class_name0", "class_name1", "class_name2"]

參數:
input_featuresarray-like of str 或 None,預設值為 None

僅用於驗證特徵名稱是否與在 fit 中看到的名稱一致。

傳回值:
feature_names_outndarray of str 物件

轉換後的特徵名稱。

get_metadata_routing()[原始碼]#

取得此物件的中繼資料路由。

請查看使用者指南以了解路由機制如何運作。

傳回值:
routingMetadataRequest

一個 MetadataRequest,封裝路由資訊。

get_params(deep=True)[原始碼]#

取得此估算器的參數。

參數:
deepbool,預設值為 True

如果為 True,將會傳回此估算器和包含的子物件(也是估算器)的參數。

傳回值:
paramsdict

參數名稱對應到其值。

set_output(*, transform=None)[原始碼]#

設定輸出容器。

請參閱「引入 set_output API」範例,了解如何使用 API。

參數:
transform{"default", "pandas", "polars"},預設值為 None

設定 transformfit_transform 的輸出。

  • "default":轉換器的預設輸出格式

  • "pandas":DataFrame 輸出

  • "polars":Polars 輸出

  • None:轉換設定保持不變

在 1.4 版本中加入:新增 "polars" 選項。

傳回值:
self估算器實例

估算器實例。

set_params(**params)[原始碼]#

設定此估算器的參數。

此方法適用於簡單的估算器以及巢狀物件(例如 Pipeline)。後者具有 <component>__<parameter> 形式的參數,因此可以更新巢狀物件的每個元件。

參數:
**paramsdict

估算器參數。

傳回值:
self估算器實例

估算器實例。