t-SNE:可视化效果最好的降维算法

简介: t-SNE:可视化效果最好的降维算法

降维

1D,2D和3D数据可以可视化。但是在数据科学领域并不总是能够处理一个小于或等于3维的数据集,我们肯定会遇到使用高维数据的情况。对于数据科学专业人员来说,有必要对工作数据进行可视化和深入了解,以便更好地完成工作,我们可以使用降维技术

降维技术的另一个最受欢迎的用例是在训练ML模型时降低计算复杂度。通过使用降维技术,数据集的大小已经缩小,与此同时,有关原始数据的信息也已应用于低维数据。因此,机器学习算法从输入数据集中学习既简单又省时。

PCA-主成分分析是降维领域最主要的算法。它最初是由皮尔逊(Pearson)在1901年开发的,许多人对此做了即兴创作。即使PCA是一种广泛使用的技术,但它的主要缺点是无法维护数据集的局部结构。为了解决这个问题,t-SNE出现了。

什么是t-SNE?

t-SNE的主要用途是可视化和探索高维数据。它由Laurens van der Maatens和Geoffrey Hinton在JMLR第九卷(2008年)中开发并出版。t-SNE的主要目标是将多维数据集转换为低维数据集。相对于其他的降维算法,对于数据可视化而言t-SNE的效果最好。如果我们将t-SNE应用于n维数据,它将智能地将n维数据映射到3d甚至2d数据,并且原始数据的相对相似性非常好。与PCA一样,t-SNE不是线性降维技术,它遵循非线性,这是它可以捕获高维数据的复杂流形结构的主要原因。

t-SNE工作原理

首先,它将通过选择一个随机数据点并计算与其他数据点(|xᵢ—xⱼ|)的欧几里得距离来创建概率分布。从所选数据点附近的数据点将获得更多的相似度值,而距离与所选数据点较远的数据点将获得较少的相似度值。使用相似度值,它将为每个数据点创建相似度矩阵(S1)。

640.png

因为不可能将超过3维的数据集可视化,所以为了举例的目的,我们假设上面的图是多维数据的可视化表示。

这里需要说明的是:相邻指的是与每个点最接近的点的集合。

由上图可知,我们可以说X1的邻域 N(X1)= {X2, X3, X4, X5, X6},这意味着X2,X3,X4,X5和X6是X1的邻居。它将在相似度矩阵“ S1”中获得更高的价值。这是通过计算与其他数据点的欧几里得距离来计算的。

另一方面,X20远离X1。这样它将在S1中获得较低的值。

其次,它将根据正态分布将计算出的相似距离转换为联合概率。

通过以上的计算,t-SNE将所有数据点随机排列在所需的较低维度上。

640.jpg

t-SNE将再次对高维数据点和随机排列的低维数据点进行所有相同的计算。但是在这一步中,它根据t分布分配概率。这就是名称t-SNE的原因。t-SNE中使用t分布的目的是减少拥挤问题(后面与PCA对比可见)。

但是请记住,对于高维数据,该算法根据正态分布分配概率。

t分布→视觉上t分布看起来很像正态分布,但尾部通常更胖,这意味着数据的可变性更高。

640.jpg

对于较低维的数据点,还将创建一个相似度矩阵(S2)。然后该算法将S1与S2进行比较,并通过处理一些复杂的数学运算来使S1与S2之间有所不同。包括使用两个分布之间的Kullback Leibler散度(KL散度)作为损失函数运行梯度下降算法。使用KL散度通过将两个分布之间相对于数据点位置的值最小化,帮助t-SNE保留数据的局部结构。

在统计学中,Kullback-Leibler散度是对一个概率分布与另一个概率分布如何不同的度量。梯度下降算法是各种机器学习算法中用于最小化损失函数的一种优化算法。

最后,该算法能够得到与原始高维数据相对相似度较好的低维数据点。我们可以使用sklearn.manifold.TSNE()实现t-SNE算法

要点

  • t-SNE算法具有扩展密集簇并缩小稀疏簇的特点。
  • t-SNE不会保留群集之间的距离。
  • t-SNE是一种不确定性算法或随机算法,这就是为什么每次运行结果都会略有变化的原因。
  • 即使它不能在每次运行中保留方差,也可以使用超参数调整来保留每个类之间的距离。
  • 该算法涉及许多计算和计算。因此,该算法需要大量时间和空间来计算。
  • 困惑度(perplexity)是控制数据点是否适合算法的主要参数。推荐范围是(5–50)。
  • 困惑度应始终小于数据点的数量。
  • 低困惑度→关心本地结构,并关注最接近的数据点。
  • 高度困惑→关心全局结构。
  • t-SNE可以巧妙地处理异常值。

简单的实现

我们使用kaggle的一个数据集:确定是有毒还是可食用是蘑菇的分类问题 https://www.kaggle.com/uciml/mushroom-classification

importpandasaspdimportnumpyasnpimportmatplotlib.pyplotaspltimportseabornassnsdf=pd.read_csv(‘Downloads/mushrooms.csv’)
df.head()

640.png

X=df.drop(‘class’, axis=1)
y=df[‘class’]
y=y.map({‘p’: ‘Posionous’, ‘e’: ‘Edible’})
cat_cols=X.select_dtypes(include=’object’).columns.tolist()
forcolincat_cols:
print (f”colname : {col}, NUnique : {X[col].nunique()})

640.png

forcolincat_cols:
X[col]=X[col].astype(“category”)
X[col]=X[col].cat.codesX.head()

640.png

使用PCA的降维可视化

fromsklearn.preprocessingimportStandardScalerfromsklearn.decompositionimportPCAX_std=StandardScaler().fit_transform(X)
X_pca=PCA(n_components=2).fit_transform(X_std)
X_pca=np.vstack((X_pca.T, y)).Tdf_pca=pd.DataFrame(X_pca, columns=[‘1st_Component’,‘2n_Component’, ’class’])
df_pca.head()

640.png

plt.figure(figsize=(8, 8))
sns.scatterplot(data=df_pca, hue=’class’, x=’1st_Component’, y=’2nd_Component’)
plt.show()

640.png

t-SNE降维可视化

fromsklearn.manifoldimportTSNEtsne=TSNE(n_components=2)
X_tsne=tsne.fit_transform(X_std)
X_tsne_data=np.vstack((X_tsne.T, y)).Tdf_tsne=pd.DataFrame(X_tsne_data, columns=[‘Dim1’, ‘Dim2’, ‘class’])
df_tsne.head()

640.png

plt.figure(figsize=(8, 8))
sns.scatterplot(data=df_tsne, hue=’class’, x=’Dim1', y=’Dim2')
plt.show()

640.png

PCA vs t-SNE

640.png

根据以上分类结果,可以说与PCA的性能相比,t-SNE的表现要好。

t-SNE算法将有毒和可食用蘑菇聚类,没有任何重叠

PCA无法将蘑菇分类完美。

要知道在哪里可以得到稳定的形状,我们应该使用困惑度和n_iter参数。

在困惑度= 30且n_iter = 5000之后,聚簇形状变得稳定。

总结

与PCA不同,t-SNE可以更好地应用于线性和非线性良好聚类的数据集,并产生更有意义的聚类。尽管t-SNE在可视化分离良好的群集方面非常出色,但大多数情况下它无法保留数据的整体几何形状。


目录
相关文章
|
3月前
|
数据采集 机器学习/深度学习 数据可视化
【优秀python web系统毕设】基于python的全国招聘数据分析可视化系统,包括随机森林算法
本文介绍了一个基于Python的全国招聘数据分析可视化系统,该系统利用数据挖掘技术、随机森林算法和数据可视化技术,从招聘网站抓取数据,进行处理、分析和预测,帮助用户洞察招聘市场,为求职者和企业提供决策支持。
108 2
|
3月前
|
搜索推荐 前端开发 数据可视化
【优秀python web毕设案例】基于协同过滤算法的酒店推荐系统,django框架+bootstrap前端+echarts可视化,有后台有爬虫
本文介绍了一个基于Django框架、协同过滤算法、ECharts数据可视化以及Bootstrap前端技术的酒店推荐系统,该系统通过用户行为分析和推荐算法优化,提供个性化的酒店推荐和直观的数据展示,以提升用户体验。
140 1
|
21天前
|
数据可视化 搜索推荐 Python
Leecode 刷题笔记之可视化六大排序算法:冒泡、快速、归并、插入、选择、桶排序
这篇文章是关于LeetCode刷题笔记,主要介绍了六大排序算法(冒泡、快速、归并、插入、选择、桶排序)的Python实现及其可视化过程。
11 0
|
3月前
|
机器学习/深度学习 数据采集 数据可视化
基于python 机器学习算法的二手房房价可视化和预测系统
文章介绍了一个基于Python机器学习算法的二手房房价可视化和预测系统,涵盖了爬虫数据采集、数据处理分析、机器学习预测以及Flask Web部署等模块。
基于python 机器学习算法的二手房房价可视化和预测系统
|
5月前
|
算法 数据可视化 数据挖掘
算法金 | 一个强大的算法模型:t-SNE !!
**t-SNE算法简介** t-SNE(t-Distributed Stochastic Neighbor Embedding)是一种非线性降维技术,用于高维数据的可视化和结构保留。它通过保持高维数据点间的局部相似性来创建低维表示,尤其适用于揭示复杂数据集的模式。算法的关键在于使用高斯分布计算高维相似性,而用t分布计算低维相似性,并通过最小化Kullback-Leibler散度来优化低维空间的位置。t-SNE在图像、文本和生物信息学等领域有广泛应用,但计算复杂度高,不适合大规模数据。
58 6
算法金 | 一个强大的算法模型:t-SNE !!
|
3月前
|
机器学习/深度学习 算法 数据可视化
基于Python flask的豆瓣电影数据分析可视化系统,功能多,LSTM算法+注意力机制实现情感分析,准确率高达85%
本文介绍了一个基于Python Flask框架的豆瓣电影数据分析可视化系统,该系统集成了LSTM算法和注意力机制进行情感分析,准确率高达85%,提供了多样化的数据分析和情感识别功能,旨在帮助用户深入理解电影市场和观众喜好。
121 0
|
3月前
|
监控 数据可视化 算法
基于朴素贝叶斯算法的微博舆情监控系统,flask后端,可视化丰富
本文介绍了一个基于朴素贝叶斯算法和Python技术栈的微博舆情监控系统,该系统使用Flask作为后端框架,通过数据爬取、清洗、情感分析和可视化等手段,为用户提供丰富的舆情分析和监测功能。
|
4月前
|
Dart 算法 数据可视化
用flutter实现五种寻路算法的可视化效果,快来看看!
半年前我写了一篇有关排序算法可视化的文章,挺有意思,还被张风捷特烈-张老师收录进了FlutterUnit,今天让我们再来做一个有关寻路算法的可视化效果吧!
|
5月前
|
算法 数据可视化 Python
【KMeans】Python实现KMeans算法及其可视化
【KMeans】Python实现KMeans算法及其可视化
|
6月前
|
存储 机器学习/深度学习 算法
R语言贝叶斯Metropolis-Hastings采样 MCMC算法理解和应用可视化案例
R语言贝叶斯Metropolis-Hastings采样 MCMC算法理解和应用可视化案例