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或针对稀疏数据的Truncated DID)将维度数量减少到合理的数量(例如50)。这将抑制一些噪音并加快样本之间成对距离的计算。欲了解更多提示,请参阅Laurens van der Maaten的常见问题解答 [2] .
阅读更多的 User Guide .
- 参数:
- 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、Fint-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 版本发生变更: 默认值更改为
"auto"
.- max_iterint,默认=1000
优化的最大迭代次数。应该至少是250。
在 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,默认= 1 e-7
如果梯度规范低于此阈值,则优化将停止。
- metric字符串或可调用,默认='欧几里德'
计算要素数组中实例之间的距离时使用的指标。如果metric是字符串,则它必须是scipy.spatial.Distance.pdist为其指标参数允许的选项之一,或者是成对列出的.PAIRWISE_DISTANCE_FUNCTIONS中的指标。如果度量是“预先计算的”,则假设X是距离矩阵。或者,如果metric是一个可调用的函数,则会对每对实例(行)调用它并记录结果值。可调用对象应该从X中获取两个数组作为输入,并返回一个指示它们之间距离的值。默认为“欧几里得”,解释为平方欧几里得距离。
- metric_paramsdict,默认=无
指标函数的附加关键字参数。
Added in version 1.1.
- init{“随机”,“PCA”}或形状的nd数组(n_samples,n_components), 默认=“pca”
嵌入格式。PCA初始化不能与预先计算的距离一起使用,并且通常比随机初始化更全局稳定。
在 1.2 版本发生变更: 默认值更改为
"pca"
.- verboseint,默认=0
冗长级别。
- random_stateint,RandomState实例或无,默认=无
确定随机数生成器。传递int以获得跨多个函数调用的可重复结果。请注意,不同的初始化可能会导致成本函数的不同局部最小值。看到 Glossary .
- method' barnes_hut ',',默认=' barnes_hut '
默认情况下,梯度计算算法使用Barnes-Hut近似,运行时间为O(NlogN)。所以,时间复杂度为O(N^2)。当最近邻误差需要优于3%时,应使用精确算法。然而,精确的方法无法扩展到数百万个示例。
Added in version 0.17: 近似优化 method 经过巴恩斯小屋。
- angle浮点数,默认值=0.5
仅在方法=' barnes_hut '时使用这是Barnes-Hut T-SNE速度和准确性之间的权衡。“角度”是角度大小(在 [3] )从一个点测量的远程节点。如果此大小低于“角度”,则将其用作其中包含的所有点的汇总节点。此方法对此参数在0.2 - 0.8范围内的变化不是非常敏感。角度小于0.2,计算时间迅速增加,角度大于0.8,误差迅速增加。
- n_jobsint,默认=无
为邻居搜索运行的并行作业数。此参数在以下情况下没有影响
metric="precomputed"
或 (metric="euclidean"
和method="exact"
).None
意思是1,除非在a中joblib.parallel_backend
上下文-1
意味着使用所有处理器。看到 Glossary 了解更多详细信息。Added in version 0.22.
- n_iterint
优化的最大迭代次数。应该至少是250。
自 1.5 版本弃用:
n_iter
在1.5版中已被弃用,并将在1.7版中删除。请使用max_iter
而不是.
- 属性:
- embedding_形状类似阵列(n_samples,n_components)
存储嵌入载体。
- kl_divergence_浮子
优化后的Kullback-Leibler发散。
- n_features_in_int
期间看到的功能数量 fit .
Added in version 0.24.
- feature_names_in_ :nd形状数组 (
n_features_in_
,)nd数组形状( Names of features seen during fit. Defined only when
X
has feature names that are all strings.Added in version 1.0.
- learning_rate_浮子
有效学习率。
Added in version 1.2.
- n_iter_int
运行的迭代次数。
参见
sklearn.decomposition.PCA
主成分分析是一种线性降维方法。
sklearn.decomposition.KernelPCA
使用核和PCA进行非线性降维。
MDS
使用多维缩放进行多元化学习。
Isomap
Manifold learning based on Isometric Mapping.
LocallyLinearEmbedding
使用局部线性嵌入进行总管学习。
SpectralEmbedding
非线性维度的谱嵌入。
注意到
例如使用
TSNE
结合KNeighborsTransformer
看到 TSNE的大约最近邻居 .引用
- [1] van der Maaten,LJP;辛顿,GE可视化多维数据
使用t-SNE。《机器学习研究杂志》9:2579-2605,2008年。
- [2] van der Maaten,LJP t-分布式随机邻居嵌入
- [3] LP范德马滕。使用基于树的算法加速t-SNE。
《机器学习研究杂志》15(Oct):3221-3245,2014。https://lvdmaaten.github.io/publications/papers/JMLR_2014.pdf
- [4] 贝尔基纳,A. C.,西科利拉,C.哦。,阿诺,R.,哈尔珀特,R.,Spidlen,J.,
'斯奈德-卡皮奥内,J. E(2019年)。T分布随机邻居嵌入的自动优化参数改进了大型数据集的可视化和分析。自然通讯,10(1),1-12。
- [5] 科巴克,D.,& Berens,P.(2019)。使用t-SNE进行单细胞的艺术
转录组学。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)[源代码]#
将X放入嵌入空间。
- 参数:
- X形状(n_samples,n_features)的{类数组,稀疏矩阵}或 (n_samples,n_samples)
如果指标是“预先计算的”,X必须是平方距离矩阵。否则,它每行包含一个样本。如果该方法是“exact”,则X可以是“csr”、“csc”或“coo”类型的稀疏矩阵。如果方法是“barnes_hut”并且指标是“预先计算的”,则X可能是预先计算的稀疏图。
- y没有一
忽视
- 返回:
- self对象
拟合估计量。
- fit_transform(X, y=None)[源代码]#
将X放入嵌入空间并返回转换后的输出。
- 参数:
- X形状(n_samples,n_features)的{类数组,稀疏矩阵}或 (n_samples,n_samples)
如果指标是“预先计算的”,X必须是平方距离矩阵。否则,它每行包含一个样本。如果该方法是“exact”,则X可以是“csr”、“csc”或“coo”类型的稀疏矩阵。如果方法是“barnes_hut”并且指标是“预先计算的”,则X可能是预先计算的稀疏图。
- y没有一
忽视
- 返回:
- X_new形状的nd数组(n_samples,n_components)
将训练数据嵌入低维空间。
- get_feature_names_out(input_features=None)[源代码]#
获取用于转换的输出要素名称。
输出的功能名称将以大写的类别名称为开头。例如,如果Transformer输出3个特征,则输出的特征名称为:
["class_name0", "class_name1", "class_name2"]
.- 参数:
- input_features字符串或无的类数组,默认=无
仅用于通过中看到的名称验证要素名称
fit
.
- 返回:
- feature_names_out字符串对象的nd数组
转换的功能名称。
- get_metadata_routing()[源代码]#
获取此对象的元数据路由。
请检查 User Guide 关于路由机制如何工作。
- 返回:
- routingMetadataRequest
A
MetadataRequest
封装路由信息。
- get_params(deep=True)[源代码]#
获取此估计器的参数。
- 参数:
- deep布尔,默认=True
如果为True,将返回此估计量和包含的作为估计量的子对象的参数。
- 返回:
- paramsdict
参数名称映射到其值。
- set_output(*, transform=None)[源代码]#
设置输出容器。
看到 介绍 set_output API 了解如何使用API的示例。
- 参数:
- transform{“默认”,“pandas”,“polars”},默认=无
配置输出
transform
和fit_transform
."default"
:Transformer的默认输出格式"pandas"
:DataFrame输出"polars"
:两极输出None
:转换配置不变
Added in version 1.4:
"polars"
添加了选项。
- 返回:
- self估计器实例
估计实例。