主成分分析 PCA

1.什么是PCA

  PCA是一种常用的降维技术和数据压缩方法。它通过线性变换将原始数据投影到一个新的坐标系统中,使得在新的坐标系下数据的方差最大化。这样做的目的是保留尽可能多的原始数据信息,并找到原始数据中最重要的特征。

  主成分分析的主要思想是找到原始数据中的主要成分,即具有最大方差的方向。首先,将原始数据进行标准化处理,使每个特征的均值为0,方差为1。然后,计算数据的协方差矩阵,通过对协方差矩阵进行特征值分解,得到特征值和对应的特征向量。特征值表示数据在对应特征向量方向上的方差大小。

  根据特征值的大小,可以选择保留最大的几个特征向量作为主成分。这些主成分构成了一个新的坐标系,新的坐标系下的数据即为降维后的数据。通常情况下,保留的主成分个数会比原始数据的维度要小,从而实现了对数据的降维。

  PCA可以应用于多个领域,包括数据可视化、特征提取、噪声过滤、模式识别等。通过降低数据的维度,PCA可以更好地理解数据的结构,减少数据的冗余信息,并提高后续分析和建模的效果。

2.维度约减

 2.1 为什么要维度约减

  1. 数据可视化:高维数据往往难以可视化,因为我们人类的感知能力和理解能力有限。通过降低数据的维度,我们可以将数据映射到二维或三维空间,从而更容易可视化和理解数据的结构、模式和关系。

  2. 特征选择:在高维数据中,可能存在许多冗余或不相关的特征。这些特征可能会干扰模型的性能,增加计算和存储的负担。通过维度约减,我们可以选择最具有代表性和信息量的特征,从而提高模型的效果和效率。

  3. 模型复杂性:高维数据往往需要更复杂的模型来处理,容易导致过拟合或计算困难。通过降低数据的维度,我们可以减少模型的复杂性,提高模型的泛化能力和计算效率。

  4. 数据存储和计算成本:高维数据需要更多的存储空间和计算资源,导致数据的存储和处理成本增加。通过维度约减,我们可以降低数据的存储需求和计算复杂度,提高数据处理的效率。

 2.2 特征维度约减的概念

     特征约减的目的是将高维特征向量映射到低维子空间中。比如:给定n个样本(每个样本维度为p维){x1,....xn} 通过特征变换/投影矩阵实现特征空间的压缩:

3.主成分分析PCA

  1.主成分分析 (PCA)基本思路
–通过协方差分析,建立高维空间到低维空间的线性映射/矩阵
–保留尽可能多的样本信息
–压缩后的数据对分类、聚类尽量不产生影响,甚至有所提升
  2.将原始高维向量通过投影矩阵,投射到低维空间
–这些向量称为主成分 (PCs), 具有无关性、正交的特点。重要
的是这些向量的数量要远小于高维空间的维度。

4.PCA算法步骤

  1. 数据标准化:对原始数据进行标准化处理,使得每个特征的均值为0,方差为1。这一步骤可以帮助消除不同特征之间的量纲差异。

  2. 计算协方差矩阵:根据标准化后的数据,计算特征之间的协方差矩阵。协方差矩阵描述了不同特征之间的线性相关性。

  3. 特征值分解:对协方差矩阵进行特征值分解,得到特征值和对应的特征向量。特征值表示数据在对应特征向量方向上的方差大小,特征向量表示数据在新的坐标系中的方向。

  4. 选择主成分:根据特征值的大小,选择最大的k个特征值和对应的特征向量作为主成分。k的选择可以根据保留的方差比例或固定的维度等准则来确定。

  5. 降维投影:将原始数据投影到由所选的主成分构成的新的低维空间中,得到降维后的数据。

5.代码实现

import numpy as np
# 计算协方差矩阵
def calc_cov(X):
    m = X.shape[0] # 样本的数量,行数
    # 数据标准化
    X = (X - np.mean(X, axis=0)) / np.var(X, axis=0) # 标准化之后均值为0,方差为1
    return 1 / m * np.matmul(X.T, X) # matmul为两个矩阵的乘积
def pca(X, n_components):
    # 计算协方差矩阵
    cov_matrix = calc_cov(X)
    # 计算协方差矩阵的特征值和对应特征向量
    eigenvalues, eigenvectors = np.linalg.eig(cov_matrix) # eigenvalues特征值,eigenvectors特征向量
    # 对特征值排序
    idx = eigenvalues.argsort()[::-1]
    # 取最大的前n_component组
    eigenvectors = eigenvectors[:, idx]
    eigenvectors = eigenvectors[:, :n_components]
    # Y=XP转换
    return np.matmul(X, eigenvectors)
from sklearn import datasets
import matplotlib.pyplot as plt
# 导入鸢尾花数据集
iris = datasets.load_iris()
X = iris.data
y = iris.target
cov_matrix = calc_cov(X) # 计算特征值
cov_matrix
idx = eigenvalues.argsort()[::-1]
# 取最大的前n_component组
eigenvectors = eigenvectors[:, idx]
eigenvectors = eigenvectors[:, :3]
# Y=PX转换
np.matmul(X, eigenvectors)

运行结果:

6.PCA优缺点

优点:

  1. 数据降维:PCA可以将高维数据降低到较低维度,减少数据的复杂性和冗余性。通过降维,可以简化数据分析和建模过程,提高计算效率。

  2. 特征提取:PCA能够从原始数据中提取最具有代表性和区分性的特征。它通过线性变换找到最大方差的特征,从而保留了数据中最重要的信息。

  3. 数据可视化:通过PCA降维,可以将高维数据映射到二维或三维空间,方便可视化和理解数据的结构、模式和关系。

  4. 噪声过滤:由于PCA保留了数据中最重要的特征,它可以帮助过滤掉数据中的噪声和冗余信息,从而提高后续分析和建模的效果。

缺点:

  1. 数据线性关系假设:PCA假设数据是线性相关的,这意味着如果数据之间存在非线性关系,则PCA可能无法很好地捕捉到这些关系。

  2. 信息丢失:降维过程中,为了减少维度,可能会丢失一部分数据的信息。降维后的数据可能无法完全还原原始数据,因此需要权衡降维带来的信息损失和模型性能的变化。

  3. 特征解释性:降维后的特征是原始特征的线性组合,它们可能不太容易解释和理解,特别是在高维空间中。

  4. 计算复杂性:PCA的计算复杂度随着特征数量的增加而增加,特别是在大规模数据集上,计算成本可能很高。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值