【机器学习】主成分分析、主成分如何选择标准以及碎石图如何帮助进行主成分分析(含python代码)

引言

主成分回归(Principal Component Regression,简称 PCR)是一种统计方法,用于构建回归模型,尤其适用于自变量存在多重共线性的情况

一、主成分分析

在机器学习中,主成分回归可以作为一种降维技术,帮助解决高维数据中的多重共线性问题,从而提高模型的预测性能和稳定性

1.1 主成分回归的基本思想

主成分回归的基本思想是首先通过主成分分析(Principal Component Analysis,简称 PCA)对自变量进行降维处理,将原始的多个自变量转换为一组新的主成分,这些主成分是原始变量的线性组合,且相互之间不相关。然后,使用这些主成分作为新的自变量来构建回归模型

1.2 主成分分析(PCA)

主成分分析是一种常用的数据降维技术,它通过正交变换将原始数据转换为一系列不相关的变量,这些变量被称为主成分

1.3 主成分分析的主要步骤

  1. 计算协方差矩阵
  2. 计算协方差矩阵的特征值和特征向量
  3. 根据特征值的大小,选择前k个主成分,其中k是主成分的数量,通常根据数据的特点和分析需求来确定

1.4 主成分回归的优点

  1. 解决多重共线性问题:主成分分析可以减少数据中的多重共线性,从而提高模型的稳定性和预测能力
  2. 降维:通过主成分分析,可以将多个自变量转换为几个主成分,从而减少模型的复杂度,简化模型的解释和分析
  3. 提高模型的鲁棒性:主成分分析可以消除噪声和异常值的影响,提高模型的鲁棒性

1.5 主成分回归的局限性

  1. 无法处理非线性关系:主成分回归假设自变量之间存在线性关系,无法处理非线性关系
  2. 可能丢失重要信息:主成分分析可能会丢失一些原始数据中的重要信息,导致模型的预测能力下降

1.6 在Python中实现主成分回归

在Python中,可以使用sklearn库来实现主成分回归

from sklearn.decomposition import PCA
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
# 假设X是特征矩阵,y是目标向量
X = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
y = [1, 2, 3]
# 添加截距项
X = sm.add_constant(X)
# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 创建PCA对象
pca = PCA(n_components=2)
X_train_pca = pca.fit_transform(X_train)
X_test_pca = pca.transform(X_test)
# 创建线性回归模型
model = LinearRegression()
model.fit(X_train_pca, y_train)
# 预测
y_pred = model.predict(X_test_pca)
# 评估模型
print(model.score(X_test_pca, y_test))
  • 首先添加了截距项
  • 然后使用train_test_split函数将数据分为训练集和测试集
  • 创建了一个PCA对象,并使用它将训练集和测试集的特征矩阵转换为主成分
  • 最后创建了一个线性回归模型,并对转换后的数据进行了训练和预测

注意,这个例子需要根据具体数据和需求进行调整。此外,为了更好地拟合数据,需要对数据进行标准化或其他预处理

二、主成分如何选择标准

主成分的选择标准通常基于以下几个方面

2.1 特征值(Eigenvalues)

  • 主成分分析会计算协方差矩阵的特征值和特征向量
  • 特征值的大小反映了主成分对数据变异的解释程度
  • 通常选择特征值大于1的主成分,因为这些主成分至少解释了比一个原始变量更多的变异
  • 有些文献建议选择特征值大于1的前k个主成分,其中k是原始变量的数量

2.2 累积方差贡献率(Cumulative Variance Explained)

  • 累积方差贡献率是指前k个主成分解释的总体变异的比例
  • 选择累积方差贡献率达到一定阈值(如70%、80%等)的主成分,可以保证大部分的变异被保留

2.3 Kaiser准则

  • 根据Kaiser准则,只有当特征值大于1时,才认为主成分是有效的
  • 这个准则可以帮助你决定保留多少个主成分

2.4 观察实际数据

  • 有时候,实际数据的分布和模式可能会影响主成分的选择
  • 例如,如果某个主成分与数据的真实结构相吻合,那么这个主成分可能比其他主成分更有价值

2.5 模型的预测能力

  • 在某些情况下,可能需要评估使用不同数量主成分的模型在预测新数据时的性能
  • 选择能够提供最佳预测性能的主成分数量

2.6 模型的解释性

  • 选择的主成分应该能够提供对数据有意义的解释
  • 有时候,保留的主成分应该与研究的假设或理论相一致

2.7 总结

在实际应用中,可能需要结合以上几个标准来选择主成分。通常,可以通过绘制主成分分析的碎石图(Scree Plot)来帮助确定保留的主成分数量。碎石图显示了每个主成分的方差贡献率,通常可以看到随着主成分数量的增加,方差贡献率逐渐减少。选择主成分的数量通常在碎石图的拐点附近,即方差贡献率下降速度减缓的点。

三、碎石图如何帮助进行主成分分析

碎石图(Scree Plot)是一种直观的图形工具,用于帮助选择主成分的数量。它展示了主成分分析中每个主成分的方差贡献率,这些方差贡献率是协方差矩阵的特征值。碎石图通常呈现为一个递减的曲线,其中特征值随主成分数量的增加而减小

3.1 选择主成分数量的过程

3.1.1 绘制碎石图

  • 在进行主成分分析后,会得到每个主成分的方差贡献率
  • 将这些方差贡献率绘制在图表中,横轴表示主成分的数量,纵轴表示方差贡献率

3.1.2 观察曲线走势

  • 曲线通常会先快速下降,然后逐渐变缓
  • 在曲线快速下降的部分,每个主成分都解释了相当大的方差,这是重要的信息
  • 在曲线变缓的部分,额外的方差贡献率变得很小,这意味着新增加的主成分解释的方差减少,因此可能不太重要

3.1.3 确定拐点

  • 拐点是曲线从快速下降转为缓慢下降的点
  • 拐点之前的主成分通常被认为是重要的,因为它们解释了大部分的方差
  • 拐点之后的主成分可能不会提供额外的有价值的信息,因此可以考虑只保留拐点之前的主成分

3.1.4 选择主成分数量

  • 根据研究的目的和数据的特点,可以选择拐点之前的主成分数量
  • 如果研究目的需要解释尽可能多的方差,可以选择拐点之前的主成分
  • 如果研究目的更加关注模型的解释性和简化性,可以选择拐点之后的主成分数量

3.1.5 总结

通过观察碎石图,研究人员可以直观地判断保留多少个主成分是合适的。这有助于在解释数据和避免过度拟合之间找到一个平衡点

四、碎石图帮助主成分分析实例

使用Python和scikit-learn库来生成一个碎石图,并选择合适的主成分数量
首先,我们需要导入所需的库并生成一些模拟数据:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
# 生成模拟数据
np.random.seed(0)
X = np.random.rand(100, 5)  # 100个样本,5个特征

接下来,我们使用PCA对象来计算每个主成分的方差贡献率,并绘制碎石图:

# 创建PCA对象
pca = PCA()
# 计算每个主成分的方差贡献率
pca.fit(X)
explained_variance = pca.explained_variance_ratio_
# 绘制碎石图
plt.figure(figsize=(10, 6))
plt.plot(range(1, len(explained_variance) + 1), explained_variance, marker='o')
plt.title('Scree plot')
plt.xlabel('Main component quantity')
plt.ylabel('Variance contribution rate')
plt.grid(True)
plt.show()

输出结果:
在这里插入图片描述

运行上述代码后,会看到一个碎石图,在这个图中,我们可以看到前几个主成分(大约前两个或三个)解释了大部分的方差,而后续的主成分解释的方差逐渐减少,因此,在这个案例中,我们可以选择保留前两个或三个主成分

需要注意的是,碎石图的选择标准并不是绝对的,它只是一个参考工具。在实际应用中,你可能还需要考虑其他因素,如数据的解释性、模型的预测能力等,来决定保留多少个主成分

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值