一文读懂【主成分分析(PCA)】

主成分分析(PCA,Principal Component Analysis)是一种数学降维方法,其核心在于通过正交变换将一组可能线性相关的变量转换为一组线性不相关的新变量,被称为主成分。这一过程旨在在更小的维度下展示数据的特征,通过新变量以更简洁、高效的方式表达原始数据的信息。

主成分是原始变量的线性组合,其数量不多于原始变量的个数。这组新的观测数据实质上是原始数据的一种变换,虽然其含义与原始数据不同,但却包含了原始数据的大部分特征,而且维度较低,便于进一步的分析。在空间上,可以将PCA理解为将原始数据投射到一个新的坐标系统,其中第一主成分对应第一坐标轴,表示了原始数据中多个变量通过某种变换得到的新变量的变化范围。类似地,第二主成分对应第二坐标轴,代表了第二个新变量的变化范围。

投射的方式有很多种,为了最大限度地保留对原始数据的解释,通常会运用最大方差理论或最小损失理论。这意味着第一主成分具有最大的方差或变异数,即能够尽量多地解释原始数据的差异。随后的每个主成分都与前面的主成分正交(夹角为90°),并且具有仅次于前一主成分的最大方差。这种正交性质使得每个主成分都提供了不同的信息,避免了冗余,从而实现了高效的降维操作。

主成分分析(PCA,Principal Component Analysis)是一种数学降维方法,其核心在于通过正交变换将一组可能线性相关的变量转换为一组线性不相关的新变量,被称为主成分。这一过程旨在在更小的维度下展示数据的特征,通过新变量以更简洁、高效的方式表达原始数据的信息。

主成分是原始变量的线性组合,其数量不多于原始变量的个数。这组新的观测数据实质上是原始数据的一种变换,虽然其含义与原始数据不同,但却包含了原始数据的大部分特征,而且维度较低,便于进一步的分析。在空间上,可以将PCA理解为将原始数据投射到一个新的坐标系统,其中第一主成分对应第一坐标轴,表示了原始数据中多个变量通过某种变换得到的新变量的变化范围。类似地,第二主成分对应第二坐标轴,代表了第二个新变量的变化范围。

投射的方式有很多种,为了最大限度地保留对原始数据的解释,通常会运用最大方差理论或最小损失理论。这意味着第一主成分具有最大的方差或变异数,即能够尽量多地解释原始数据的差异。随后的每个主成分都与前面的主成分正交(夹角为90°),并且具有仅次于前一主成分的最大方差。这种正交性质使得每个主成分都提供了不同的信息,避免了冗余,从而实现了高效的降维操作。

其工作原理涉及以下关键步骤:

1、数据标准化:

首先,对原始数据进行标准化处理,确保每个变量具有相似的尺度。这是因为PCA对不同尺度的变量敏感,标准化能够使所有变量以相同的比例参与分析。

2、构建协方差矩阵:

基于标准化后的数据,计算变量之间的协方差矩阵。协方差矩阵反映了变量之间的线性关系强度和方向。

3、计算特征值和特征向量:

对协方差矩阵进行特征值分解,得到特征值和对应的特征向量。特征值表示协方差矩阵的特征的方差,而特征向量则是与这些特征值相关联的线性变换的方向。

4、选择主成分:

按照特征值的大小排序特征向量,选择前k个特征向量作为主成分,其中k是希望保留的新变量(主成分)的数量。这些主成分对应了原始数据中最大方差的方向。

5、构建新特征空间:

使用选定的主成分构建新的特征空间。每个数据点都可以通过将其投影到这些主成分上来表示,从而实现数据的降维。

6、数据重构:

可以通过将投影后的数据点映射回原始空间,以实现对原始数据的重构。这一步通常用于评估PCA的性能和了解降维后数据的可解释性。

在Python中,实现主成分分析(PCA)通常使用科学计算库NumPy和数据分析库pandas。此外,可以使用scikit-learn库来简化PCA的实现。以下是一个简单的例子:

首先,确保你已经安装了NumPy、pandas和scikit-learn库。你可以使用以下命令安装:

pip install numpy pandas scikit-learn

然后,可以使用以下Python代码进行PCA:

import numpy as np
import pandas as pd
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler
import matplotlib.pyplot as plt
​
# 生成模拟数据
np.random.seed(42)
data = np.random.rand(100, 5)  # 生成100个样本,每个样本有5个特征
​
# 将数据转换为pandas DataFrame
columns = ['Feature1', 'Feature2', 'Feature3', 'Feature4', 'Feature5']
df = pd.DataFrame(data, columns=columns)
​
# 标准化数据
scaler = StandardScaler()
scaled_data = scaler.fit_transform(df)
​
# 使用scikit-learn进行PCA
pca = PCA(n_components=2)  # 选择保留的主成分数量
principal_components = pca.fit_transform(scaled_data)
​
# 将主成分数据转换为DataFrame
principal_df = pd.DataFrame(data=principal_components, columns=['PC1', 'PC2'])
​
# 输出每个主成分的方差解释比例
explained_variance_ratio = pca.explained_variance_ratio_
print("Explained Variance Ratio:", explained_variance_ratio)
​
# 可视化原始数据和主成分
fig, ax = plt.subplots(1, 2, figsize=(12, 5))
​
# 原始数据可视化
ax[0].scatter(df['Feature1'], df['Feature2'])
ax[0].set_title('Original Data')
​
# 主成分可视化
ax[1].scatter(principal_df['PC1'], principal_df['PC2'])
ax[1].set_title('Principal Components')
​
plt.show()

此示例中,我们生成了一个包含5个特征的模拟数据集,然后使用PCA将数据降至2维。最后,我们可视化了原始数据和主成分。在实际应用中,你可以替换模拟数据为你自己的数据集。

  • 24
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值