主成分分析

Beginner

This tutorial is from open-source community. Access the source code

简介

主成分分析(Principal Components Analysis,PCA)是一种用于简化数据的统计技术。它是一种线性变换技术,可在数据中找到最重要的特征或模式。PCA 在数据分析和机器学习中广泛用于降维、数据压缩和特征提取。在本实验中,我们将使用 Python 的 scikit-learn 库对数据集执行 PCA 并可视化结果。

虚拟机使用提示

虚拟机启动完成后,点击左上角切换到“笔记本”标签,以访问 Jupyter Notebook 进行练习。

有时,你可能需要等待几秒钟让 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。

如果你在学习过程中遇到问题,请随时向 Labby 提问。课程结束后提供反馈,我们将立即为你解决问题。

导入库

我们首先导入本实验所需的库。我们将使用 numpy 进行数值运算,matplotlib 进行可视化,以及 scikit-learn 进行主成分分析(PCA)。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA

创建数据

我们将为这个实验生成一个随机数据集。该数据集将有三个变量xyz。我们将把xy定义为均值为 0、标准差为 0.5 的正态分布随机变量。z同样是均值为 0、标准差为 0.1 的正态分布。

e = np.exp(1)
np.random.seed(4)

y = np.random.normal(scale=0.5, size=(30000))
x = np.random.normal(scale=0.5, size=(30000))
z = np.random.normal(scale=0.1, size=len(x))

执行主成分分析(PCA)

接下来,我们将对数据集执行主成分分析(PCA)。我们首先将xyz连接起来,形成一个三维数组Y。然后,我们创建 PCA 类的一个实例,并将其拟合到我们的数据上。接着,我们可以使用 PCA 对象的components_属性来访问主成分。

Y = np.c_[x, y, z]
pca = PCA(n_components=3)
pca.fit(Y)
components = pca.components_

可视化主成分分析(PCA)结果

我们可以通过绘制主成分来可视化 PCA 的结果。我们创建数据的三维散点图,并根据每个点的密度为其着色。然后,我们将前两个主成分绘制为一个平面。我们对数据的两个不同视图重复此过程。

fig = plt.figure(figsize=(10, 5))

## 第一个视图
ax = fig.add_subplot(121, projection="3d", elev=-40, azim=-80)
ax.set_title("视图 1")

## 绘制数据
density = np.exp(-(x ** 2 + y ** 2))
ax.scatter(x, y, z, c=density, cmap="plasma", marker="+", alpha=0.4)

## 绘制主成分
v1 = components[:, 0]
v2 = components[:, 1]
x_pca_plane = np.array([v1[0], -v1[0], -v1[0], v1[0]])
y_pca_plane = np.array([v1[1], -v1[1], -v1[1], v1[1]])
z_pca_plane = np.array([v1[2], -v1[2], v1[2], v1[2]])
ax.plot_surface(x_pca_plane, y_pca_plane, z_pca_plane, alpha=0.2)

## 第二个视图
ax = fig.add_subplot(122, projection="3d", elev=30, azim=20)
ax.set_title("视图 2")

## 绘制数据
density = np.exp(-(x ** 2 + y ** 2))
ax.scatter(x, y, z, c=density, cmap="plasma", marker="+", alpha=0.4)

## 绘制主成分
v1 = components[:, 0]
v2 = components[:, 1]
x_pca_plane = np.array([v1[0], -v1[0], -v1[0], v1[0]])
y_pca_plane = np.array([v1[1], -v1[1], -v1[1], v1[1]])
z_pca_plane = np.array([v1[2], -v1[2], v1[2], v1[2]])
ax.plot_surface(x_pca_plane, y_pca_plane, z_pca_plane, alpha=0.2)

plt.show()

总结

在本实验中,我们学习了如何使用 Python 的 scikit-learn 库对数据集执行主成分分析(PCA)。我们生成了一个包含三个变量的随机数据集,执行了 PCA,并可视化了结果。我们在三维散点图中绘制了数据,并为前两个主成分添加了一个平面。主成分分析(PCA)是一种强大的技术,用于降低数据的维度并找到最重要的模式或特征。