流形学习(Manifold Learning)是一种非线性降维方法,它假设数据位于一个低维流形上,并尝试找到这个低维表示。在sklearn.manifold
模块中,有几种流行的流形学习方法,包括t-SNE(t-Distributed Stochastic Neighbor Embedding)和Isomap(Isometric Mapping)。
1. t-SNE(t-Distributed Stochastic Neighbor Embedding)
t-SNE是一种用于可视化和高维数据降维的技术。它通过在高维空间中保留数据点的局部邻域结构,并在低维空间(通常是二维或三维)中展示这种结构,来工作。
Python代码示例:
from sklearn.manifold import TSNE
from sklearn.datasets import load_digits
import matplotlib.pyplot as plt
# 加载数据
digits = load_digits()
X = digits.data
y = digits.target
# 使用t-SNE进行降维
tsne = TSNE(n_components=2, random_state=0)
X_2d = tsne.fit_transform(X)
# 可视化结果
plt.figure(figsize=(6, 5))
colors = 'r', 'g', 'b', 'c', 'm', 'y', 'k', 'w', 'orange', 'purple'
for i, c, label in zip(range(10), colors, digits.target_names):
plt.scatter(X_2d[y == i, 0], X_2d[y == i, 1], c=c, label=label)
plt.legend()
plt.show()
2. Isomap(Isometric Mapping)
Isomap是一种基于图理论的流形学习方法,它试图保持数据点之间的测地线距离(即沿着流形表面的最短路径)。
Python代码示例:
from sklearn.manifold import Isomap
from sklearn.datasets import load_digits
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# 加载数据
digits = load_digits()
X = digits.data
y = digits.target
# 使用Isomap进行降维到三维
isomap = Isomap(n_neighbors=5, n_components=3)
X_3d = isomap.fit_transform(X)
# 可视化结果(这里使用三维散点图)
fig = plt.figure(figsize=(8, 6))
ax = fig.add_subplot(111, projection='3d')
colors = 'r', 'g', 'b', 'c', 'm', 'y', 'k', 'w', 'orange', 'purple'
for i, c, label in zip(range(10), colors, digits.target_names):
ax.scatter(X_3d[y == i, 0], X_3d[y == i, 1], X_3d[y == i, 2], c=c, label=label)
ax.legend()
plt.show()
请注意,对于Isomap,我选择了三维降维以便于可视化。但在实际应用中,你可能希望将其降至二维或更低维度。
处理结果:
1. t-SNE(t-Distributed Stochastic Neighbor Embedding)
t-SNE是一种用于可视化和高维数据降维的技术。它通过在高维空间中保留数据点的局部邻域结构,并在低维空间(通常是二维或三维)中展示这种结构,来工作。
Python代码示例:
```python
加载数据
使用t-SNE进行降维
可视化结果
plt.scatter(X_2d[y == i, 0], X_2d[y == i, 1], c=c, label=label)
Isomap是一种基于图理论的流形学习方法,它试图保持数据点之间的测地线距离(即沿着流形表面的最短路径)。