TSNE#
- class sklearn.manifold.TSNE(n_components=2, *, perplexity=30.0, early_exaggeration=12.0, learning_rate='auto', max_iter=1000, 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)[source]#
T-分布随机邻居嵌入。
t-SNE [1] 是一种可视化高维数据的工具。它将数据点之间的相似性转换为联合概率,并尝试最小化低维嵌入的联合概率与高维数据之间的 Kullback-Leibler 散度。t-SNE 的成本函数不是凸的,这意味着不同的初始化可能会导致不同的结果。
如果特征数量非常高,强烈建议使用其他降维方法(例如,对于密集数据使用 PCA,对于稀疏数据使用 TruncatedSVD)将维度数量减少到合理范围(例如 50)。这有助于抑制一些噪声并加速样本之间成对距离的计算。更多提示请参见 Laurens van der Maaten 的常见问题解答 [2]。
详情请参阅用户指南。
- 参数:
- n_components整型, 默认值=2
嵌入空间的维度。
- perplexity浮点型, 默认值=30.0
困惑度(perplexity)与在其他流形学习算法中使用的最近邻数量有关。较大的数据集通常需要较大的困惑度。考虑选择介于 5 到 50 之间的值。不同的值可能导致显著不同的结果。困惑度必须小于样本数量。
- early_exaggeration浮点型, 默认值=12.0
控制原始空间中的自然聚类在嵌入空间中的紧密程度以及它们之间的间距。对于较大的值,嵌入空间中自然聚类之间的间距会更大。同样,此参数的选择不是非常关键。如果在初始优化期间成本函数增加,则早期夸大因子或学习率可能过高。
- learning_rate浮点型或“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_iter整型, 默认值=1000
优化的最大迭代次数。应至少为 250。
1.5 版本中已更改: 参数名称从
n_iter
更改为max_iter
。- n_iter_without_progress整型, 默认值=300
在早期夸大后的 250 次初始迭代后,如果在没有进展的情况下达到最大迭代次数,优化将被中止。请注意,进度每 50 次迭代才检查一次,因此此值会四舍五入到 50 的下一个倍数。
0.17 版本新增: 参数 n_iter_without_progress 用于控制停止准则。
- min_grad_norm浮点型, 默认值=1e-7
如果梯度范数低于此阈值,优化将停止。
- metric字符串或可调用对象, 默认值=“euclidean”
用于计算特征数组中实例之间距离的度量。如果 `metric` 是字符串,它必须是 `scipy.spatial.distance.pdist` 的 `metric` 参数所允许的选项之一,或 `pairwise.PAIRWISE_DISTANCE_FUNCTIONS` 中列出的度量。如果 `metric` 是“precomputed”,则假定 X 是一个距离矩阵。另外,如果 `metric` 是一个可调用函数,它将对 X 中的每对实例(行)进行调用,并记录结果值。该可调用函数应接受 X 中的两个数组作为输入,并返回一个表示它们之间距离的值。默认值为“euclidean”,它被解释为欧氏距离的平方。
- metric_params字典, 默认值=None
度量函数的额外关键字参数。
1.1 版本新增。
- init{"random", "pca"} 或 形状为 (n_samples, n_components) 的 ndarray, 默认值="pca"
嵌入的初始化。PCA 初始化不能用于预计算距离,并且通常比随机初始化更具全局稳定性。
1.2 版本中已更改: 默认值更改为
"pca"
。- verbose整型, 默认值=0
详细程度级别。
- random_state整型, RandomState 实例或 None, 默认值=None
确定随机数生成器。传入一个整数可使多次函数调用获得可重现的结果。请注意,不同的初始化可能导致成本函数的不同局部最小值。参见术语表。
- method{'barnes_hut', 'exact'}, 默认值='barnes_hut'
默认情况下,梯度计算算法使用 Barnes-Hut 近似,运行时间为 O(NlogN)。`method='exact'` 将运行较慢但精确的算法,时间复杂度为 O(N^2)。当最近邻误差需要优于 3% 时,应使用精确算法。然而,精确方法无法扩展到数百万个示例。
0.17 版本新增: 通过 Barnes-Hut 进行近似优化 method。
- angle浮点型, 默认值=0.5
仅在 `method='barnes_hut'` 时使用。这是 Barnes-Hut T-SNE 算法在速度和准确性之间的权衡。'angle' 是从一个点测量到的远节点(在 [3] 中称为 theta)的角大小。如果此大小低于 'angle',则它将作为其中所有点的汇总节点。此方法对 0.2 - 0.8 范围内的参数变化不敏感。小于 0.2 的角度会迅速增加计算时间,大于 0.8 的角度会迅速增加误差。
- n_jobs整型, 默认值=None
用于邻居搜索的并行作业数量。当
metric="precomputed"
或 (metric="euclidean"
且method="exact"
) 时,此参数无效。None
表示 1,除非在joblib.parallel_backend
上下文。-1
表示使用所有处理器。更多详细信息请参见术语表。0.22 版本新增。
- 属性:
另请参见
sklearn.decomposition.PCA
主成分分析,一种线性降维方法。
sklearn.decomposition.KernelPCA
使用核函数和 PCA 的非线性降维。
MDS
使用多维标度的流形学习。
Isomap
基于等距映射的流形学习。
LocallyLinearEmbedding
使用局部线性嵌入的流形学习。
SpectralEmbedding
用于非线性降维的谱嵌入。
备注
有关结合使用
TSNE
和KNeighborsTransformer
的示例,请参见 TSNE 中的近似最近邻。参考文献
- [1] van der Maaten, L.J.P.; Hinton, G.E. Visualizing High-Dimensional Data
Using t-SNE. Journal of Machine Learning Research 9:2579-2605, 2008.
- [2] van der Maaten, L.J.P. t-Distributed Stochastic Neighbor Embedding
- [3] L.J.P. van der Maaten. Accelerating t-SNE using Tree-Based Algorithms.
Journal of Machine Learning Research 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). Automated optimized parameters for T-distributed stochastic neighbor embedding improve visualization and analysis of large datasets. Nature Communications, 10(1), 1-12.
- [5] Kobak, D., & Berens, P. (2019). The art of using t-SNE for single-cell
transcriptomics. Nature Communications, 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)[source]#
将 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)[source]#
将 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)[source]#
获取转换后的输出特征名称。
输出特征名称将以小写类名作为前缀。例如,如果转换器输出 3 个特征,则输出特征名称为:
["class_name0", "class_name1", "class_name2"]
。- 参数:
- input_features字符串或 None 的类数组对象, 默认值=None
仅用于验证特征名称与
fit
中看到的名称是否一致。
- 返回:
- feature_names_out字符串对象的 ndarray
转换后的特征名称。
- get_metadata_routing()[source]#
获取此对象的元数据路由。
请查看用户指南,了解路由机制的工作原理。
- 返回:
- routingMetadataRequest
封装路由信息的
MetadataRequest
。
- get_params(deep=True)[source]#
获取此估计器的参数。
- 参数:
- deep布尔型, 默认值=True
如果为 True,将返回此估计器以及所包含的作为估计器的子对象的参数。
- 返回:
- params字典
参数名称及其对应的值。
- set_output(*, transform=None)[source]#
设置输出容器。
有关如何使用此 API 的示例,请参见set_output API 简介。
- 参数:
- transform{"default", "pandas", "polars"}, 默认值=None
配置
transform
和fit_transform
的输出。"default"
: 转换器的默认输出格式"pandas"
: DataFrame 输出"polars"
: Polars 输出None
: 转换配置不变
1.4 版本新增: 添加了
"polars"
选项。
- 返回:
- self估计器实例
估计器实例。