sklearn.manifold.TSNE¶
class sklearn.manifold.TSNE(n_components=2, *, perplexity=30.0, early_exaggeration=12.0, learning_rate=200.0, n_iter=1000, n_iter_without_progress=300, min_grad_norm=1e-07, metric='euclidean', init='random', verbose=0, random_state=None, method='barnes_hut', angle=0.5, n_jobs=None)
[源码]
t分布随机邻居嵌入。
t-SNE [1]是可视化高维数据的工具。它将数据点之间的相似性转换为联合概率,并试图最小化低维嵌入和高维数据的联合概率之间的Kullback-Leibler差异。t-SNE的成本函数不是凸的,即使用不同的初始化,我们可以获得不同的结果。
如果特征数量非常多,强烈建议使用另一种降维方法(例如,对于密集数据使用PCA或对于稀疏数据使用TruncatedSVD)将尺寸数量减少到合理的数量(例如50个)。这将抑制一些噪声并加快样本之间成对距离的计算。有关更多技巧,请参阅Laurens van der Maaten的常见问题解答[2]。
在用户指南中阅读更多内容。
参数 | 说明 |
---|---|
n_components | int, optional (default: 2) 嵌入式空间的尺寸。 |
perplexity | float, optional (default: 30) 困惑与其他流形学习算法中使用的最近邻居的数量有关。较大的数据集通常需要较大的困惑度。考虑选择一个介于5到50之间的值。不同的值可能会导致明显不同的结果。 |
early_exaggeration | float, optional (default: 12.0) 控制原始空间中自然簇在嵌入式空间中的紧密程度以及它们之间有多少空间。对于较大的值,自然簇之间的空间在嵌入式空间中会更大。同样,此参数的选择不是很关键。如果成本函数在初始优化过程中增加,则早期夸张因子或学习率可能会太高。 |
learning_rate | float, optional (default: 200.0) t-SNE的学习率通常在[10.0,1000.0]范围内。如果学习率太高,则数据看起来可能像“球”,其任何一点都与其最近的邻居等距。如果学习率太低,则大多数点可能看起来像是密集的云,几乎没有异常值。如果成本函数陷入不良的局部最小值中,则提高学习率可能会有所帮助。 |
n_iter | int, optional (default: 1000) 优化的最大迭代次数。至少应为250。 |
n_iter_without_progress | int, optional (default: 300) 在中止优化之前没有进度的最大迭代次数,在250次具有早期夸张的初始迭代之后使用。请注意,仅每50次迭代检查一次进度,因此此值将四舍五入到50的下一个倍数。 0.17版中的新功能:参数n_iter_without_progress用于控制停止条件。 |
min_grad_norm | float, optional (default: 1e-7) 如果梯度范数低于此阈值,则优化将停止。 |
metric | string or callable, optional 计算要素阵列中实例之间的距离时使用的度量。如果metric是字符串,则它必须是scipy.spatial.distance.pdist为其metric参数允许的选项之一,或者是pairwise.PAIRWISE_DISTANCE_FUNCTIONS中列出的度量标准。如果度量是“预先计算的”,则假定X为距离矩阵。或者,如果metric是可调用的函数,则在每对实例(行)上调用metric,并记录结果值。可调用对象应将X的两个数组作为输入,并返回一个指示它们之间距离的值。默认值为“欧几里得距离”,它被解释为平方的欧几里得距离。 |
init | string or numpy array, optional (default: “random”) 嵌入的初始化。可能的选项是“ random”,“ pca”和一个numpy数组(n_samples,n_components)。PCA初始化不能用于预先计算的距离,且通常比随机初始化更全局稳定。 |
verbose | int, optional (default: 0) 详细程度。 |
random_state | int, RandomState instance, default=None 确定随机数生成器。在多个函数调用之间传递int以获得可重复的结果。注意,不同的初始化可能导致成本函数的局部最小值。请参阅:term: Glossary <random_state> . |
method | string (default: ‘barnes_hut’) 默认情况下,梯度计算算法使用在O(NlogN)时间内运行的Barnes-Hut近似。method='exact'将在O(N^2)时间内运行速度较慢但精确的算法。当最近邻误差大于3%时,应采用精确算法。然而,精确的方法不能扩展到数百万个例子。 版本0.17中的新功能:通过Barnes-Hut的近似优化方法。 |
angle | float (default: 0.5) 仅在method ='barnes_hut'时使用。这是Barnes-Hut T-SNE在速度和精度之间的权衡。“angle”是从点开始测量的远距离节点的角度大小(在[3]中称为theta)。如果该大小小于“angle”,则将其用作其中包含的所有点的汇总节点。此方法对此参数在0.2-0.8范围内的变化不太敏感。小于0.2的角度会迅速增加计算时间,大于0.8的角度会迅速增加误差。 |
n_jobs | int or None, optional (default=None) 为邻居搜索运行的并行作业数。当 metric="precomputed" 或(metric="euclidean" 和method="exact" )时,此参数不起作用。None 除非在joblib.parallel_backend 环境中,否则表示1 。 undefined表示使用所有处理器。有关更多详细信息,请参见词汇表。0.22版中的新功能。 |
属性 | 说明 |
---|---|
embedding_ | array-like, shape (n_samples, n_components) 存储嵌入向量。 |
kl_divergence_ | float 优化后的Kullback-Leibler离散度。 |
n_iter_ | int 运行的迭代次数。 |
参考文献
[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
https://lvdmaaten.github.io/tsne/
[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
实例
>>> 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).fit_transform(X)
>>> X_embedded.shape
(4, 2)
方法 | 说明 |
---|---|
fit (X[, y]) |
将X放入嵌入式空间。 |
fit_transform (X[, y]) |
将X放到嵌入式空间中,然后返回转换后的输出。 |
get_params ([deep]) |
获取此估计量的参数。 |
set_params (**params) |
设置此估算量器的参数。 |
__init__(n_components=2, *, perplexity=30.0, early_exaggeration=12.0, learning_rate=200.0, n_iter=1000, n_iter_without_progress=300, min_grad_norm=1e-07, metric='euclidean', init='random', verbose=0, random_state=None, method='barnes_hut', angle=0.5, n_jobs=None)
[源码]
初始化self, 请参阅help(type(self))以获得准确的说明。
fit(X, y=None)
[源码]
将X放入嵌入式空间。
参数 | 说明 |
---|---|
X | array, shape (n_samples, n_features) or (n_samples, n_samples) 如果度量是“预先计算的”,则X必须是平方距离矩阵。否则,它每行包含一个样本。如果方法是“精确”,则X可以是类型为“ csr”,“ csc”或“ coo”的稀疏矩阵。如果方法是“ barnes_hut”并且度量标准是“预先计算”,则X可能是预先计算的稀疏图。 |
y | Ignored |
返回值 | 说明 |
---|---|
X_new | array, shape (n_samples, n_components) 在低维空间中嵌入训练数据。 |
get_params(deep=True)
[源码]
获取此估计量的参数。
参数 | 说明 |
---|---|
deep | bool, default=True 如果为True,则将返回此估算量和作为估算量的所包含子对象的参数。 |
返回值 | 说明 |
---|---|
params | mapping of string to any 参数名称映射到其值。 |
set_params(**params)
[源码]
设置此估算量的参数。
该方法适用于简单估计量以及嵌套对象(例如pipelines)。后者具有形式的参数。<component>__<parameter>
以便可以更新嵌套对象的每个组件。
参数 | 说明 |
---|---|
**params | dict 估算量参数。 |
返回值 | 说明 |
---|---|
self | object 估算量实例。 |