TSNE#

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-SNE [1] 是一种用于可视化高维数据的工具。它将数据点之间的相似性转换为联合概率,并尝试最小化低维嵌入和 高维数据之间的联合概率的 Kullback-Leibler 散度。t-SNE 有一个非凸的成本函数,即通过不同的初始化,我们可能 会得到不同的结果。

强烈建议使用另一种降维方法(例如,密集数据的 PCA 或稀疏数据的 TruncatedSVD)将维度数量减少到一个合理的数量 (例如 50),如果特征数量非常高。这将抑制一些噪声并加快计算样本之间成对距离的速度。更多提示请参见 Laurens van der Maaten 的 FAQ [2]。

更多信息请参阅 用户指南

Parameters:
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 等)使用的 learning_rate 定义比我们的定义小 4 倍。因此,我们的 learning_rate=200 对应于这些其他实现中的 learning_rate=800。 ‘auto’ 选项将学习率设置为 max(N / early_exaggeration / 4, 50) ,其中 N 是样本大小,遵循 [4] 和 [5]。

Changed in version 1.2: 默认值更改为 "auto"

max_iterint, 默认=1000

优化的最大迭代次数。应至少为 250。

Changed in version 1.5: 参数名称从 n_iter 更改为 max_iter

n_iter_without_progressint, 默认=300

在优化过程中没有进展的最大迭代次数,在早期夸张的 250 次初始迭代后使用。注意,进展每 50 次迭代才检查一次, 因此这个值会四舍五入到下一个 50 的倍数。

Added in version 0.17: 参数 n_iter_without_progress 用于控制停止标准。

min_grad_normfloat, 默认=1e-7

如果梯度范数低于此阈值,优化将停止。

metricstr 或 callable, 默认=’euclidean’

计算特征数组中实例之间距离时使用的度量。如果 metric 是字符串,它必须是 scipy.spatial.distance.pdist 的 metric 参数允许的选项之一, 或者是 pairwise.PAIRWISE_DISTANCE_FUNCTIONS 中列出的度量。如果 metric 是 “precomputed”,则假定 X 是一个距离矩阵。 或者,如果 metric 是一个可调用函数,它会在每对实例(行)上调用,并记录结果值。可调用函数应接受 X 中的两个数组作为输入,并返回指示它们之间距离的值。 默认是 “euclidean”,解释为平方欧几里得距离。

metric_paramsdict, 默认=None

度量函数的额外关键字参数。

Added in version 1.1.

init{“random”, “pca”} 或 shape (n_samples, n_components) 的 ndarray, 默认=”pca”

嵌入的初始化。 PCA 初始化不能用于预计算距离,并且通常比随机初始化更全局稳定。

Changed in version 1.2: 默认值更改为 "pca"

verboseint, 默认=0

详细级别。

random_stateint, RandomState 实例或 None, 默认=None

确定随机数生成器。传递一个 int 以在多次函数调用中获得可重复的结果。注意,不同的初始化可能会导致成本函数的不同局部最小值。 请参阅 术语

method{‘barnes_hut’, ‘exact’}, 默认=’barnes_hut’

默认情况下,梯度计算算法使用 Barnes-Hut 近似,运行时间为 O(NlogN)。method=’exact’ 将运行在较慢但精确的算法上,时间为 O(N^2)。 当需要最近邻误差优于 3% 时,应使用精确方法。然而,精确方法无法扩展到数百万个样本。

Added in version 0.17: 通过 Barnes-Hut 进行近似优化 method

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 表示使用所有处理器。请参阅 术语 了解更多详细信息。

Added in version 0.22.

n_iterint

优化的最大迭代次数。应至少为 250。

Deprecated since version 1.5: n_iter 在 1.5 版本中已弃用,并将在 1.7 版本中移除。请使用 max_iter 代替。

Attributes:
embedding_shape (n_samples, n_components) 的 array-like

存储嵌入向量。

kl_divergence_float

优化后的 Kullback-Leibler 散度。

n_features_in_int

fit 过程中看到的特征数量。

Added in version 0.24.

feature_names_in_shape ( n_features_in_ ,) 的 ndarray

fit 过程中看到的特征名称。仅当 X 的特征名称均为字符串时定义。

Added in version 1.0.

learning_rate_float

有效的学习率。

Added in version 1.2.

n_iter_int

运行的迭代次数。

See also

sklearn.decomposition.PCA

主成分分析,一种线性降维方法。

sklearn.decomposition.KernelPCA

使用核和 PCA 的非线性降维。

MDS

使用多维缩放的流形学习。

Isomap

基于等距映射的流形学习。

LocallyLinearEmbedding

使用局部线性嵌入的流形学习。

SpectralEmbedding

用于非线性降维的光谱嵌入。

Notes

有关在组合中使用 TSNEKNeighborsTransformer 的示例,请参见 TSNE中的近似最近邻

References

[1] van der Maaten, L.J.P.; Hinton, G.E. 使用 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。

Examples

>>> 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拟合到嵌入空间。

Parameters:
X{array-like, sparse matrix} of shape (n_samples, n_features) or (n_samples, n_samples)

如果度量是’precomputed’,X必须是一个方形距离矩阵。否则,它包含每行一个样本。如果方法是’exact’,X可以是类型为’csr’、’csc’或’coo’的稀疏矩阵。如果方法是’barnes_hut’且度量是’precomputed’,X可以是预计算的稀疏图。

yNone

忽略。

Returns:
selfobject

拟合的估计器。

fit_transform(X, y=None)#

将X拟合到一个嵌入空间并返回该变换后的输出。

Parameters:
X{array-like, sparse matrix} of shape (n_samples, n_features) 或 (n_samples, n_samples)

如果度量是’precomputed’,X必须是一个平方距离矩阵。否则它每行包含一个样本。如果方法是’exact’,X可以是类型为’csr’、’csc’或’coo’的稀疏矩阵。如果方法是’barnes_hut’且度量是’precomputed’,X可以是一个预计算的稀疏图。

yNone

忽略。

Returns:
X_newndarray of shape (n_samples, n_components)

训练数据在低维空间中的嵌入。

get_feature_names_out(input_features=None)#

获取转换后的输出特征名称。

输出特征名称将以小写的类名作为前缀。例如,如果转换器输出3个特征,那么输出特征名称将是: ["class_name0", "class_name1", "class_name2"]

Parameters:
input_features类似数组的对象或None,默认为None

仅用于验证特征名称与 fit 中看到的名称。

Returns:
feature_names_outndarray of str对象

转换后的特征名称。

get_metadata_routing()#

获取此对象的元数据路由。

请查看 用户指南 以了解路由机制的工作原理。

Returns:
routingMetadataRequest

MetadataRequest 封装的 路由信息。

get_params(deep=True)#

获取此估计器的参数。

Parameters:
deepbool, 默认=True

如果为True,将返回此估计器和包含的子对象(也是估计器)的参数。

Returns:
paramsdict

参数名称映射到它们的值。

set_output(*, transform=None)#

设置输出容器。

请参阅 介绍 set_output API 以了解如何使用API的示例。

Parameters:
transform{“default”, “pandas”, “polars”}, 默认=None

配置 transformfit_transform 的输出。

  • "default" : 转换器的默认输出格式

  • "pandas" : DataFrame 输出

  • "polars" : Polars 输出

  • None : 转换配置不变

Added in version 1.4: "polars" 选项已添加。

Returns:
self估计器实例

估计器实例。

set_params(**params)#

设置此估计器的参数。

该方法适用于简单估计器以及嵌套对象(例如 Pipeline )。后者具有形式为 <component>__<parameter> 的参数,以便可以更新嵌套对象的每个组件。

Parameters:
**paramsdict

估计器参数。

Returns:
selfestimator instance

估计器实例。