首页牛牛算账机器人牛牛算账机器人 在 Scikit-Learn 中实现 PCA(主成分分析)降维,通常可以概括为以下五个关键步骤

牛牛算账机器人 在 Scikit-Learn 中实现 PCA(主成分分析)降维,通常可以概括为以下五个关键步骤

分类牛牛算账机器人时间2026-10-10 13:54:40发布admin浏览14
摘要:在 Scikit-Learn 中实现 PCA(主成分分析)降维,通常可以概括为以下五个关键步骤。这一流程不仅涵盖了代码实现,还包含了确保模型效果所必需的数据预处理和结果评估环节。第一步:数据标准化(Standardization)...

在 Scikit-Learn 中实现 PCA(主成分分析)降维,通常可以概括为以下五个关键步骤。这一流程不仅涵盖了代码实现,还包含了确保模型效果所必需的数据预处理和结果评估环节。


第一步:数据标准化(Standardization)


PCA 对特征的量纲(单位)极其敏感。如果原始数据中不同特征的数值范围差异巨大(例如“收入”是几万,“评分”是几分之一),数值大的特征会主导主成分的方向,导致降维结果失真。因此,‌必须先进行标准化‌,使每个特征的均值为 0,标准差为 1。


python

from sklearn.preprocessing import StandardScaler

from sklearn.datasets import load_iris


# 加载示例数据

data = load_iris()

X = data.data

y = data.target


# 初始化标准化器并拟合转换

scaler = StandardScaler()

X_scaled = scaler.fit_transform(X)


第二步:实例化 PCA 模型


根据需求选择降维后的维度数量。你可以直接指定整数(如 n_components=2),也可以指定保留的信息比例(如 n_components=0.95 表示保留 95% 的方差信息)。


python

from sklearn.decomposition import PCA


# 实例化 PCA,这里以降至 2 维为例,便于后续可视化

pca = PCA(n_components=2)


第三步:拟合并转换数据(Fit & Transform)


使用标准化后的数据进行模型训练和数据转换。fit_transform 方法会同时完成计算协方差矩阵、特征值分解以及将数据投影到新坐标系的过程。


python

# 拟合模型并得到降维后的数据

X_pca = pca.fit_transform(X_scaled)


# 此时 X_pca 的形状为 (样本数, 2)

print(f"降维后数据形状: {X_pca.shape}")


第四步:评估降维效果


降维必然伴随信息损失。我们需要检查保留的主成分解释了多少原始数据的方差(信息量)。通过 explained_variance_ratio_ 属性可以查看每个主成分贡献的方差比例。


python

# 查看每个主成分解释的方差比例

variance_ratios = pca.explained_variance_ratio_

print(f"各主成分解释方差比例: {variance_ratios}")

print(f"累计解释方差比例: {sum(variance_ratios):.4f}")


# 如果累计比例过低(如低于 0.8),说明降维丢失了过多信息,可能需要增加维度


第五步:可视化或后续建模


降维后的数据通常用于两个目的:一是直观展示数据分布(如聚类情况),二是作为新特征输入到机器学习模型中以加速训练或消除共线性。


场景 A:数据可视化(2D/3D 散点图)‌


python

import matplotlib.pyplot as plt


plt.figure(figsize=(8, 6))

scatter = plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y, cmap='viridis', edgecolor='k', s=50)

plt.title('PCA of Iris Dataset')

plt.xlabel('First Principal Component')

plt.ylabel('Second Principal Component')

plt.colorbar(scatter)

plt.show()



场景 B:作为分类器的输入‌


python

from sklearn.model_selection import train_test_split

from sklearn.svm import SVC

from sklearn.metrics import accuracy_score


# 划分训练集和测试集

X_train, X_test, y_train, y_test = train_test_split(X_pca, y, test_size=0.3, random_state=42)


# 使用降维后的数据训练 SVM

clf = SVC(kernel='rbf')

clf.fit(X_train, y_train)

y_pred = clf.predict(X_test)


print(f"分类准确率: {accuracy_score(y_test, y_pred):.4f}")


核心注意事项

标准化不可省略‌:除非所有特征已经在相同的量纲下,否则务必先使用 StandardScaler。

线性假设‌:PCA 是一种线性降维方法,它假设数据的主要结构可以通过线性组合来捕捉。如果数据具有复杂的非线性流形结构(如瑞士卷形状),PCA 效果可能不佳,此时可考虑 Kernel PCA 或 t-SNE、UMAP 等非线性方法。

信息损失权衡‌:降维是为了简化问题或去噪,但也会丢失细节。在实际业务中,应通过交叉验证对比“原始数据建模”与“降维后数据建模”的效果,确保降维带来的效率提升或泛化能力增强大于其带来的信息损失。


牛牛机器人 / 牛牛算账机器人版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

牛牛机器人 鸿蒙(HarmonyOS)超级终端是华为基于分布式技术打造的核心能力 QQ牛牛机器人 ‌CamusDB‌,由PHP圈传奇大佬、Phalcon高性能框架创始人 Andrés Gutiérrez 用C#从零手搓的分布式SQL数据库
↑