非线性降维技术比较

在数据科学领域,降维技术是探索高维数据集的重要工具。本研究旨在对比两种主流的非线性降维方法:T分布随机邻近嵌入(t-SNE)和局部线性嵌入(LLE),并分析它们在处理Swiss Roll数据集时的表现。Swiss Roll是一种经典的三维数据集,常用于测试降维算法的效果。此外,还将探讨在数据集中添加空洞(hole)时,这两种算法的表现如何。

Swiss Roll 数据集的生成与可视化

首先,使用Python的matplotlib库和sklearn库生成Swiss Roll数据集。这个数据集包含1500个样本点,并通过三维散点图进行可视化。在三维空间中,Swiss Roll呈现出一种卷曲的形态,类似于瑞士卷蛋糕。

import matplotlib.pyplot as plt from sklearn import datasets, manifold # 生成Swiss Roll数据集 sr_points, sr_color = datasets.make_swiss_roll(n_samples=1500, random_state=0) # 绘制三维散点图 fig = plt.figure(figsize=(8, 6)) ax = fig.add_subplot(111, projection="3d") ax.scatter(sr_points[:, 0], sr_points[:, 1], sr_points[:, 2], c=sr_color, s=50, alpha=0.8) ax.set_title("Swiss Roll in Ambient Space") ax.view_init(azim=-66, elev=12) plt.show()

通过上述代码,能够在三维空间中直观地观察到Swiss Roll数据集的形态。接下来,将使用LLE和t-SNE算法对数据进行降维,并在二维空间中进行可视化。

LLE与t-SNE的降维效果比较

局部线性嵌入(LLE)算法通过保持数据点之间的局部线性关系来实现降维。在Swiss Roll数据集上,LLE能够有效地展开卷曲的数据,使其在二维空间中呈现出较为清晰的结构。然而,t-SNE算法虽然能够保持数据的总体结构,但在表示数据的连续性方面表现不佳,有时会将数据点不必要地聚集在一起。

# 计算LLE和t-SNE降维 sr_lle, sr_err = manifold.locally_linear_embedding(sr_points, n_neighbors=12, n_components=2) sr_tsne = manifold.TSNE(n_components=2, perplexity=40, random_state=0).fit_transform(sr_points) # 绘制降维结果 fig, axs = plt.subplots(figsize=(8, 8), nrows=2) axs[0].scatter(sr_lle[:, 0], sr_lle[:, 1], c=sr_color) axs[0].set_title("LLE Embedding of Swiss Roll") axs[1].scatter(sr_tsne[:, 0], sr_tsne[:, 1], c=sr_color) axs[1].set_title("t-SNE Embedding of Swiss Roll") plt.show()

通过对比LLE和t-SNE在Swiss Roll数据集上的降维结果,可以发现LLE在展开数据时表现较好,而t-SNE虽然在保持数据总体结构方面有一定优势,但在处理连续性数据时存在一定的局限性。

Swiss-Hole 数据集的生成与降维效果

为了进一步测试LLE和t-SNE算法的性能,在Swiss Roll数据集中添加了一个空洞(hole),生成了Swiss-Hole数据集。通过对比两种算法在处理Swiss-Hole数据集时的表现,可以更全面地评估它们的性能。

# 生成Swiss-Hole数据集 sh_points, sh_color = datasets.make_swiss_roll(n_samples=1500, hole=True, random_state=0) # 绘制三维散点图 fig = plt.figure(figsize=(8, 6)) ax = fig.add_subplot(111, projection="3d") ax.scatter(sh_points[:, 0], sh_points[:, 1], sh_points[:, 2], c=sh_color, s=50, alpha=0.8) ax.set_title("Swiss-Hole in Ambient Space") ax.view_init(azim=-66, elev=12) plt.show()

在Swiss-Hole数据集上,LLE算法依然能够很好地展开数据,并保留空洞的结构。而t-SNE算法虽然在某些情况下会将数据点聚集在一起,但总体上仍然能够保持数据的拓扑结构。

# 计算LLE和t-SNE降维 sh_lle, sh_err = manifold.locally_linear_embedding(sh_points, n_neighbors=12, n_components=2) sh_tsne = manifold.TSNE(n_components=2, perplexity=40, init="random", random_state=0).fit_transform(sh_points) # 绘制降维结果 fig, axs = plt.subplots(figsize=(8, 8), nrows=2) axs[0].scatter(sh_lle[:, 0], sh_lle[:, 1], c=sh_color) axs[0].set_title("LLE Embedding of Swiss-Hole") axs[1].scatter(sh_tsne[:, 0], sh_tsne[:, 1], c=sh_color) axs[1].set_title("t-SNE Embedding of Swiss-Hole") plt.show()

通过对比LLE和t-SNE在Swiss-Hole数据集上的降维结果,可以得出结论:尽管两种算法在处理带有空洞的数据集时都有一定的局限性,但LLE在保持数据结构方面表现更好,而t-SNE在保持数据拓扑结构方面具有一定的优势。

本研究通过对比LLE和t-SNE在Swiss Roll和Swiss-Hole数据集上的表现,揭示了两种算法在非线性降维任务中的优缺点。LLE算法在展开卷曲数据和保持数据结构方面表现较好,而t-SNE算法在保持数据的总体结构和拓扑关系方面具有一定的优势。然而,t-SNE算法在处理连续性数据时存在一定的局限性,需要通过调整参数来优化其性能。

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