主成分分析

Machine LearningMachine LearningBeginner
立即练习

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

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

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

虚拟机使用提示

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

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

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


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL sklearn(("Sklearn")) -.-> sklearn/AdvancedDataAnalysisandDimensionalityReductionGroup(["Advanced Data Analysis and Dimensionality Reduction"]) ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn/AdvancedDataAnalysisandDimensionalityReductionGroup -.-> sklearn/decomposition("Matrix Decomposition") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/decomposition -.-> lab-49239{{"主成分分析"}} ml/sklearn -.-> lab-49239{{"主成分分析"}} end

导入库

我们首先导入本实验所需的库。我们将使用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)是一种强大的技术,用于降低数据的维度并找到最重要的模式或特征。