【机器学习】关于t-sne:降维、可视化

关于t-sne:降维、可视化

机器学习中,我们的使用的数据基本都是高维的,所以我们很难直接从数据中观察分布和特征。因此出现了很多数据降维的手段帮助我们提取特征和可视化数据。这就是流行学习方法(Manifold Learning):假设数据是均匀采样于一个高维欧氏空间中的低维流形,流形学习就是从高维采样数据中恢复低维流形结构,即找到高维空间中的低维流形,并求出相应的嵌入映射,以实现维数约简或者数据可视化。它是从观测到的现象中去寻找事物的本质,找到产生数据的内在规律。

有张图可以比较好的理解下降维的方法。
数据降维分支

PCA曾经广泛用于提取特征,由于其是线性降维,所以不能解释特征之间的复杂多项式关系,而且也已经过于古老。而上图中没有提及的t-sne属于非线性方法,是由Hinton和lvdmaaten在2008年提出的。关于降维的数据作为feature是否更优还不能确定,但是其可视化效果非常好。由于t-sne运行速度非常慢,比pca高了一个数量级,因此在可视化数据的时候一般先用pca处理,然后再用tsne处理。

t-sne是由sne发展而来,SNE是通过仿射(affinitie)变换将数据点映射到概率分布上,主要包括两个步骤:

  • SNE构建一个高维对象之间的概率分布,使得相似的对象有更高的概率被选择,而不相似的对象有较低的概率被选择。
  • SNE在低维空间里在构建这些点的概率分布,使得这两个概率分布之间尽可能的相似

尽管SNE提供了很好的可视化方法,但是他很难优化,而且存在”crowding problem”(拥挤问题)。后续中,Hinton等人又提出了t-SNE的方法。与SNE不同,主要如下:

  • 使用对称版的SNE,简化梯度公式
  • 低维空间下,使用t分布替代高斯分布表达两点之间的相似度

具体的算法解释和推导可以关注这篇博文 http://www.datakit.cn/blog/2017/02/05/t_sne_full.html

优化mnist过程的动态图如下:t-sne

我们可以使用python得sklearn包来体验一下tsne,非常简单。

#import 相关的包和mnist数据集
import numpy as np
import matplotlib.pyplot as plt
from time import time
from sklearn import datasets, manifold

#定义函数将结果plot出来                            
def plot_embedding(X, title=None):     
    x_min, x_max = np.min(X, 0), np.max(X, 0)
    X = (X - x_min) / (x_max - x_min)                           

    plt.figure()              
    ax = plt.subplot(111)      
    for i in range(X.shape[0]):                          
        plt.text(X[i, 0], X[i, 1], str(digits.target[i]),    
                 color=plt.cm.Set1(y[i] / 10.),         
                 fontdict={'weight': 'bold', 'size': 9})
    plt.xticks([]), plt.yticks([])
    if title is not None:
        plt.title(title)

# 调用t-SNE
print("Computing t-SNE embedding")           
tsne = manifold.TSNE(n_components=2, init='pca', random_state=0)
t0 = time()
X_tsne = tsne.fit_transform(X)

plot_embedding(X_tsne,                                   
            "t-SNE embedding of the digits (time %.2fs)" %
            (time() - t0))                           

plt.show() 
  • 6
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
T-SNE(t-distributed stochastic neighbor embedding)是一种机器学习算法,用于将高维数据降维至2维或3维,并进行可视化。它的基本思想是,如果在高维空间中两个数据点相似,那么在降维后的低维空间中它们应该离得很近。 T-SNE是由Laurens van der Maaten和Geoffrey Hinton在2008年提出的,它是SNE算法的改进版本。相对于SNE算法,T-SNE进行了几个改进,包括将SNE改为对称SNE以提高计算效率,并在低维空间中使用t分布来解决拥挤问题并优化SNE算法在关注局部特征而忽略全局特征方面的问题。实际上,T-SNE很少被用于降维,其主要应用领域是数据可视化。 尽管T-SNE可视化方面效果好于SNE,但由于一些限制,它在实际应用中并不常用于降维。首先,当我们发现数据需要降维时,一般会使用线性降维算法如PCA,而不是非线性降维算法。其次,T-SNE通常将数据降到2维或3维进行可视化,但在降维时往往需要更高的维度,例如20维,而T-SNE算法使用自由度为1的t分布可能无法得到较好的效果。此外,T-SNE算法的计算复杂度较高,其目标函数是非凸的,可能得到局部最优解。 总的来说,T-SNE是一种适用于高维数据可视化的非线性降维算法,但在实际应用中需要考虑其计算复杂度和局限性。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span> #### 引用[.reference_title] - *1* *2* *3* [t-SNE算法](https://blog.csdn.net/sinat_20177327/article/details/80298645)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *4* [Machine Learning ——降维方法:t-SNE](https://blog.csdn.net/zzzzhy/article/details/80772833)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值