sklearn 笔记 TSNE

Posted UQI-LIUWJ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sklearn 笔记 TSNE相关的知识,希望对你有一定的参考价值。

0 基本介绍

机器学习笔记:t-SNE_UQI-LIUWJ的博客-CSDN博客

        将高维数据降维,使得高维数据各点的联合概率,和对应的低维数据各点的联合概率之间的 KL散度尽量小

        对T-SNE使用不同的初始化,我们可以获得不同的结果

1 基本使用方法

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', 
    metric_params=None, 
    init='warn', 
    verbose=0, 
    random_state=None, 
    method='barnes_hut', 
    angle=0.5, 
    n_jobs=None, 
    square_distances='deprecated')

2 参数介绍

n_components需要降至的维度
perplexity
  • 用来约束高维分布中的σi
  • 更大的数据集需要更大的perplexity
  • 一般数值在5~50之间
early_exaggeration
  • 控制原始空间中的自然簇在嵌入空间中的紧密程度以及它们之间的空间大小。
  • 对于在原始空间中较大的自然簇,他们在嵌入空间的距离中会更大。(t-SNE性质)
  • 【这个参数的选择不是很关键】
learning_rate

t-SNE的学习率

  • 如果学习率过大,那么最后学到的低维空间中的点会像一个“球”,即各个点和他们最近的邻居之间是等距离的
  • 如果学习率国小,那么最后大多数点都会被压缩到一个很密集的“云”中,只有很少的outlier

除了浮点数之外,这里也可以设置learning_rate为'auto',可以被计算为max(N / early_exaggeration / 4, 50) 【N是sample size】

n_iter优化需要的最大迭代次数(至少需要250)
n_iter_without_progress

如果多少轮没有更好地优化进展,那么就可以终止优化。(在250轮之后开始check)

每50轮check一次优化进展,所以一般是50的倍数

min_grad_norm如果梯度的范数小于这个阈值,那么停止优化
metric

如何计算两个元素i和j之间的距离

  • 如果metric是“precomputed”,那么X是一个距离矩阵
  • 如果metric是一个可调用的函数,那么这个函数会输入X矩阵的两行(i和j元素),然后返回一个value,表示i和j元素的距离
  • 默认情况下,metric是“euclidean”,表示平方欧几里得距离
metric_params如果metric是一个可调用的函数,那么这里是额外的参数
init
  • ‘random’——随机初始一个低维embedding
  • 'pca'——使用pca初始化低维embedding
  • 一个ndarray——(n_samples,n_components)维度

3 使用举例

import numpy as np
from sklearn.manifold import TSNE
X = np.array([[0, 0, 0], [0, 1, 1], [1, 0, 1], [1, 1, 1]])

tsne=TSNE(n_components=2).fit(X)



################################# 两种方式找低维嵌入  ###################################
X_embed=tsne.fit_transform(X)
X_embed
'''
array([[-141.00409 ,  379.51575 ],
       [  32.38434 ,  121.13147 ],
       [-225.9871  ,  -52.276257],
       [-399.37567 ,  206.10808 ]], dtype=float32)
'''

tsne.embedding_
'''
array([[-141.00409 ,  379.51575 ],
       [  32.38434 ,  121.13147 ],
       [-225.9871  ,  -52.276257],
       [-399.37567 ,  206.10808 ]], dtype=float32)
'''
#########################################################################################

tsne.kl_divergence_
#0.048726845532655716
#T-SNE的KL散度


tsne.n_features_in_
#3
#输入的特征个数

tsne.n_iter_
#499 迭代次数

以上是关于sklearn 笔记 TSNE的主要内容,如果未能解决你的问题,请参考以下文章

sklearn 特征降维利器 —— PCA TSNE

python实现TSNE检验 TSNE降维代码

python实现TSNE检验 TSNE降维代码

tsne原理以及代码实现(学习笔记)

scikit-learn TSNE 中的 random_state 参数是啥?

单细胞笔记5-tSNE和UMAP