流形学习技术在球面数据集上的应用

流形学习是一种降维技术,它旨在在低维空间中保持数据的内在结构。本文将探讨不同的流形学习方法如何应用于一个球面数据集。在这个数据集中,移除了球体的两极以及侧面的一个薄片,以便流形学习技术能够在二维空间中展开并投影这个数据集。这种技术类似于地球的平面地图投影,其中需要将三维的地球表面映射到二维平面上。

在流形学习中,多维尺度分析(MDS)的目标是找到一个低维表示(本例中为2D),使得这个低维空间中的距离能够很好地反映原始高维空间中的距离。与其他流形学习算法不同,MDS并不寻求在低维空间中得到数据的各向同性表示。这里的流形问题与表示地球的平面地图非常相似,例如地图投影标准。

以下是一些流形学习方法在球面数据集上的应用实例,包括执行时间:

from time import time import matplotlib.pyplot as plt import mpl_toolkits.mplot3d # noqa: F401 import numpy as np from matplotlib.ticker import NullFormatter from sklearn import manifold from sklearn.utils import check_random_state # 流形学习变量 n_neighbors = 10 n_samples = 1000 # 创建球体 random_state = check_random_state(0) p = random_state.rand(n_samples) * (2 * np.pi - 0.55) t = random_state.rand(n_samples) * np.pi # 移除球体的两极 indices = (t < (np.pi - (np.pi / 8))) & (t > ((np.pi / 8))) colors = p[indices] x, y, z = (np.sin(t[indices]) * np.cos(p[indices]), np.sin(t[indices]) * np.sin(p[indices]), np.cos(t[indices])) # 绘制数据集 fig = plt.figure(figsize=(15, 8)) plt.suptitle("流形学习 %i 个点, %i 个邻居" % (1000, n_neighbors), fontsize=14) ax = fig.add_subplot(251, projection="3d") ax.scatter(x, y, z, c=colors, cmap=plt.cm.rainbow) ax.view_init(40, -10) # 执行局部线性嵌入流形学习 methods = ["standard", "ltsa", "hessian", "modified"] labels = ["LLE", "LTSA", "Hessian LLE", "Modified LLE"] sphere_data = np.array([x, y, z]).T for i, method in enumerate(methods): t0 = time() trans_data = (manifold.LocallyLinearEmbedding(n_neighbors=n_neighbors, n_components=2, method=method, random_state=42).fit_transform(sphere_data).T) t1 = time() print("%s: %.2g sec" % (methods[i], t1 - t0)) ax = fig.add_subplot(252 + i) plt.scatter(trans_data[0], trans_data[1], c=colors, cmap=plt.cm.rainbow) plt.title("%s (%.2g sec)" % (labels[i], t1 - t0)) plt.axis("tight") # 执行t-分布随机邻域嵌入 t0 = time() tsne = manifold.TSNE(n_components=2, random_state=0) trans_data = tsne.fit_transform(sphere_data).T t1 = time() print("t-SNE: %.2g sec" % (t1 - t0)) ax = fig.add_subplot(2, 5, 10) plt.scatter(trans_data[0], trans_data[1], c=colors, cmap=plt.cm.rainbow) plt.title("t-SNE (%.2g sec)" % (t1 - t0)) plt.axis("tight") plt.show()

上述代码展示了如何在Python中使用scikit-learn库来执行流形学习。首先创建了一个球面数据集,并移除了球体的两极。然后,使用不同的流形学习方法来处理这个数据集,并将结果投影到二维空间中。这些方法包括局部线性嵌入(LLE)、t-SNE等。每种方法的执行时间也被打印出来,以供参考。

通过这些方法,可以更好地理解数据的内在结构,并在低维空间中可视化高维数据。这对于数据探索和分析非常有用,尤其是在处理复杂数据集时。

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