流形学习技术比较

在本文中,将探讨两种流行的流形学习技术:T-distributed Stochastic Neighbor Embedding(简称t-SNE)和Locally Linear Embedding(简称LLE),并使用经典的Swiss Roll数据集来展示它们的效果。接着,将分析在数据集中添加空洞时这两种技术的表现。

生成Swiss Roll数据集

首先,使用Python的matplotlib和sklearn库来生成Swiss Roll数据集。这个数据集是一个三维空间中的曲线,形状类似于瑞士卷。

import matplotlib.pyplot as plt from sklearn import datasets, manifold # 生成Swiss Roll数据集 n_samples = 1500 random_state = 0 sr_points, sr_color = datasets.make_swiss_roll(n_samples=n_samples, random_state=random_state) # 可视化数据 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在原始空间") ax.view_init(azim=-66, elev=12) _ = ax.text2D(0.8, 0.05, s="n_samples=1500", transform=ax.transAxes)

通过上述代码,得到了Swiss Roll数据集,并在三维空间中对其进行了可视化。接下来,将使用LLE和t-SNE技术对数据进行降维处理,并比较它们的效果。

LLE和t-SNE降维效果

首先对Swiss Roll数据集应用LLE和t-SNE降维技术。LLE技术能够有效地将Swiss Roll展开,而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降维的Swiss Roll") axs[1].scatter(sr_tsne[:,0], sr_tsne[:,1], c=sr_color) _ = axs[1].set_title("t-SNE降维的Swiss Roll")

通过上述代码,得到了Swiss Roll数据集的LLE和t-SNE降维结果,并进行了可视化。可以看到,LLE技术在展开Swiss Roll时表现良好,而t-SNE虽然在保持数据总体结构方面表现不错,但在连续性方面存在一定的问题。

添加空洞的Swiss-Hole数据集

接下来,将在Swiss Roll数据集中添加一个空洞,并使用LLE和t-SNE技术对新的Swiss-Hole数据集进行降维处理。

# 生成Swiss-Hole数据集 sh_points, sh_color = datasets.make_swiss_roll(n_samples=n_samples, hole=True, random_state=random_state) # 可视化Swiss-Hole数据 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在原始空间") ax.view_init(azim=-66, elev=12) _ = ax.text2D(0.8, 0.05, s="n_samples=1500", transform=ax.transAxes)

通过上述代码,生成了Swiss-Hole数据集,并在三维空间中对其进行了可视化。接下来,将使用LLE和t-SNE技术对Swiss-Hole数据集进行降维处理,并比较它们的效果。

LLE和t-SNE在Swiss-Hole上的表现

对Swiss-Hole数据集应用LLE和t-SNE降维技术。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降维的Swiss-Hole") axs[1].scatter(sh_tsne[:,0], sh_tsne[:,1], c=sh_color) _ = axs[1].set_title("t-SNE降维的Swiss-Hole")

通过上述代码,得到了Swiss-Hole数据集的LLE和t-SNE降维结果,并进行了可视化。可以看到,LLE技术在展开Swiss-Hole时表现良好,并且能够保持空洞,而t-SNE虽然在保持数据总体结构方面表现不错,但在连续性方面存在一定的问题。

通过对比LLE和t-SNE在Swiss Roll和Swiss-Hole数据集上的表现,发现t-SNE在参数调整方面有很大的潜力,通过更精细的参数调整,可能会得到更好的结果。此外,观察到t-SNE在处理真实世界数据时通常比LLE表现得更好。

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