当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。