📅  最后修改于: 2023-12-03 15:36:34.120000             🧑  作者: Mango
主成分分析(PCA)是一种经典的线性降维方法,它可以从高维数据空间中提取出一些有效的低维度特征。在 scikit-learn 中,PCA 已经被封装成了 PCA 类,我们可以直接使用它进行操作。本文将介绍如何在 Python 中使用 scikit-learn 实现 PCA。
首先,我们需要引入所需的模块,包括 numpy 和 sklearn:
import numpy as np
from sklearn.decomposition import PCA
我们用 iris 数据集来演示 PCA 的用法。iris 是一个经典的数据集,包含了 150 个样本,每个样本有 4 个特征,共分为 3 类。我们可以使用 scikit-learn 自带的 load_iris 函数来加载数据:
from sklearn.datasets import load_iris
iris = load_iris()
X = iris.data
y = iris.target
在进行 PCA 前,我们需要对数据进行预处理,将数据进行标准化处理。这是因为 PCA 是一种基于方差的分析方法,而每个特征的尺度影响了特征的方差,因此需要将数据的每个特征尺度化。我们可以使用 sklearn 中的 StandardScaler 来标准化数据:
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
接下来,我们可以使用 PCA 对数据进行降维。PCA 的核心是计算数据的协方差矩阵,并对它进行特征值分解,从中提取出最大的 k 个特征值所对应的特征向量,作为主成分,最终得到降维后的数据。我们可以使用 PCA 类来实现这个过程:
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X_scaled)
在上面的代码中,我们设置了 n_components=2,表示最终得到的降维后的数据维度为 2。PCA 会自动计算主成分,因此不需要手动指定。
最后,我们可以将降维后的数据可视化。由于我们的数据只有 2 个维度,因此可以直接在二维坐标系中绘制散点图:
import matplotlib.pyplot as plt
plt.scatter(X_pca[:,0], X_pca[:,1], c=y)
plt.xlabel('PC1')
plt.ylabel('PC2')
plt.show()
在上面的代码中,我们使用 c=y 表示不同类别的数据用不同的颜色表示,方便区分。
下面是本文的完整代码:
import numpy as np
from sklearn.decomposition import PCA
from sklearn.datasets import load_iris
from sklearn.preprocessing import StandardScaler
import matplotlib.pyplot as plt
iris = load_iris()
X = iris.data
y = iris.target
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X_scaled)
plt.scatter(X_pca[:,0], X_pca[:,1], c=y)
plt.xlabel('PC1')
plt.ylabel('PC2')
plt.show()
以上就是使用 scikit-learn 在 Python 中实现 PCA 的全部过程。通过 PCA 进行数据降维可以在保持尽量多的特征信息的情况下,减小计算压力,提高模型校验的效率和准确度,是许多数据分析场合的必选技能。