t-SNE技术及其困惑度参数的影响

t-SNE(t-distributed Stochastic Neighbor Embedding)是一种非线性降维技术,广泛应用于数据可视化领域。本文将探讨不同困惑度(perplexity)参数对t-SNE结果的影响。困惑度是t-SNE算法中的一个重要参数,它影响着数据点之间的相似度计算,进而影响降维后数据的分布和聚类效果。

在t-SNE中,困惑度参数的取值范围通常在5到50之间。困惑度值较小时,算法更倾向于保持数据点之间的局部结构,但可能导致全局结构的丢失;而困惑度值较大时,算法更注重保持数据点之间的全局结构,但可能会模糊局部细节。因此,选择合适的困惑度值对于获得有意义的数据可视化结果至关重要。

为了直观展示困惑度参数的影响,使用两个经典的数据集:同心圆和S曲线。通过改变困惑度参数,观察t-SNE降维后数据点的分布和聚类效果。实验结果表明,随着困惑度值的增加,同心圆数据集的聚类效果逐渐变得清晰,但聚类的大小和距离会略有变化。而对于S曲线数据集,即使在较大的困惑度值下,t-SNE降维后的形状也会与原始的S曲线拓扑结构产生较大的偏差。

此外,还使用了一个2D均匀网格数据集来进一步验证困惑度参数的影响。实验结果表明,对于不同的困惑度值,t-SNE降维后的数据点分布和聚类效果存在明显差异。这些实验结果表明,困惑度参数对于t-SNE的聚类和可视化效果具有重要影响,选择合适的困惑度值对于获得有意义的数据可视化结果至关重要。

为了更深入地理解t-SNE算法及其参数的影响,可以参考这篇文章。它详细讨论了t-SNE算法的工作原理、参数选择以及如何通过交互式图表来探索不同参数对结果的影响。通过学习这篇文章,可以更好地理解t-SNE算法,并在实际应用中选择合适的参数以获得最佳的可视化效果。

代码示例

from sklearn.manifold import TSNE import matplotlib.pyplot as plt import numpy as np from sklearn import datasets from matplotlib.ticker import NullFormatter # 生成同心圆数据集 X, y = datasets.make_circles(n_samples=150, factor=0.5, noise=0.05, random_state=0) red = y == 0 green = y == 1 # 设置画布和子图 fig, subplots = plt.subplots(3, 5, figsize=(15, 8)) perplexities = [5, 30, 50, 100] # 对每个困惑度值进行t-SNE降维并绘制结果 for i, perplexity in enumerate(perplexities): tsne = TSNE(n_components=2, init='random', random_state=0, perplexity=perplexity, max_iter=300) Y = tsne.fit_transform(X) print(f"circles, perplexity={perplexity} in {time.time() - t0:.2g} sec") ax = subplots[0][i + 1] ax.set_title(f"Perplexity={perplexity}") ax.scatter(Y[red, 0], Y[red, 1], c="r") ax.scatter(Y[green, 0], Y[green, 1], c="g") ax.xaxis.set_major_formatter(NullFormatter()) ax.yaxis.set_major_formatter(NullFormatter()) plt.axis("tight") plt.show()

以上代码展示了如何使用t-SNE对同心圆数据集进行降维,并根据不同的困惑度值绘制降维后的数据点分布。通过调整困惑度参数,可以观察到不同参数设置下t-SNE降维效果的变化。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485