数据降维:PCA主成分分析降维示例及函数参数解释

主成分分析(PCA)介绍

PCA也被叫做卡尔胡宁-勒夫转换(KLT),是一种用户在高维空间发现模式的技术。PCA常被用于探索和可视化高纬度数据集。PCA可以压缩数据,也就是所谓的数据降维。数据降维是指在保留重要信息的同时消除那些“无用信息量的信息”。PCA关注的是线性相关性,如果一个数据矩阵的列空间的秩小于特征总数,那么多数特征就是几个关键的特征的线性组合,这些多数的特征是对空间以及计算能力的浪费,因为它们包含的信息可以从关键的特征推导出来,所以为了避免这种情况,PCA就是试图将这些数据挤压到一个维度大大小于原空间的线性子空间。
PCA的核心思想是:使用一些新的特征代替冗余特征,这些新特征能恰当地总结初始空间中包含的信息。

关于矩阵列空间以及秩可以看这篇文章
https://www.jianshu.com/p/15572fa072cf

在这里插入图片描述
如图a,数据点均匀的分布在两个特征上,在这个例子,列空间是满秩的。而有些特征是其他特征的线性组合,如图b,特征f1可以由f2得到,它是f2和一个标量的乘积。在这里我们称点团的本征维数为1,因为一个特征可以得到另一个特征。
但是实际上,完全相关的特征是很少见的,几乎不会出现,更多的情况是像图C一样,特征之间非常接近但是又不完全相同,这时如果想要削减传递给模型的特征的数量,就得需要一个全新的特征,一个由f1和f2得到的特征,可以称之为f1.5。

PCA转化步骤

  • 数据矩阵中心化
  • 计算SVD
  • 找出主成分
  • 转化数据
    在这里插入图片描述
    如图所示,是PCA的整个过程,它将数据线性投影到一个新的特征上,并且保持最大化数据的方差。具体的推导可以看这篇文章 PCA推导

PCA示例

import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
from sklearn.datasets import load_iris    # 导入数据集 

data = load_iris()
y = data.target  #  数据集为字典形式,这里将y分离出来
x = data.data
pca = PCA(n_components=2)   # 降维为2维
reduce_x = pca.fit_transform(x)

red_x,red_y = [],[]
blue_x,blue_y = [],[]
green_x,green_y = [],[]
for i in range(len(reduce_x)):
    if y[i] == 0:
        red_x.append(reduce_x[i][0])
        red_y.append(reduce_x[i][1])
    elif y[i] == 1:
        blue_x.append(reduce_x[i][0])
        blue_y.append(reduce_x[i][1])
    else:
        green_x.append(reduce_x[i][0])
        green_y.append(reduce_x[i][1])
plt.scatter(red_x,red_y,c='r',marker='*')
plt.scatter(blue_x,blue_y,c='b',marker='x')
plt.scatter(green_x,green_y,c='g',marker='.')
plt.show()

运行结果
在这里插入图片描述
鸢尾花数据集是一个拥有50个样本,每个样本有4个解释变量的数据集,根据这4个变量推断出鸢尾花的品种,这里使用PCA将数据集的4个特征降维到两个维度,这样子就可以在二维上观察到数据,这样子可以更直观的观察到数据,方便后续的分类模型选择。

sklearn中的PCA

class sklearn.decomposition.PCA(n_components=None, copy=True, whiten=False, svd_solver=’auto’, tol=0.0, iterated_power=’auto’, random_state=None)

n_component: 指定降维后的特征数量,

  • 可以直接指定降维后特征数量。
  • 可以指定等于‘mle(极大似然估计)’,算法根据MLE算法以及特征的方差来决定维数。使用mle需要另一个参数svd_solver == ‘full’
  • 我们也可以指定主成分的方差和所占的最小比例阈值,让PCA类自己去根据样本特征方差来决定降维到的维度数,此时n_components是一个(0,1]之间的数。这个也需要svd_solver == ‘full’
  • 不输入值,此时n_components = (样本数,特征数) - 1。

copy: 是否复制原数据

whiten: 白化,白化是PCA转化乘以奇异值的倒数,白化后数据特征之间方差为1,通常不白化,除非后续有特殊处理。

svd_solver: 有四种选择{‘auto’,‘full’,‘arpack’,‘randomized’}

  • auto:默认值,PCA会自动选择合适的模式去计算
  • full:通过scipy.linalg.svd运行完全的SVD算法
  • arpack:调用scipy.sparse.linalg.svds,要求保留成分小于原始特征数,适用于数据量大,数据维度多同时主成分数目比例又较低的PCA降维
  • randomized:与arpack的适用场景类似,但它使用了一些加快SVD的随机算法。

tol: 可选{float,0}默认0,当svd_solver == ‘arpack’奇异值的公差

iterated_power: 可选{int,auto}默认auto,当svd_solver == ‘randomized’时幂方法的迭代次数

random_state: 可选{int,None},默认None,当svd_solver == ‘randomized’或svd_solver == ‘arpack’时,如果为None,随机数生成是用numpy.random生成。如果输入int数据,则生成的随机数是输入的数

通常只需要n_component这个数据。

PCA优缺点

优点

  • 减少特征空间维度,降低了数据复杂度
  • 方便模型拟合

缺点

  • 计算成本高
  • 可能会降低模型精度,因为会丢弃一些信息
  • 转换过程复杂,结果难以解释
  • 对异常值敏感
  • 2
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
主成分分析(Principal Component Analysis,PCA)是一种常用的降维技术,用于减少高维数据的特征数量。在Matlab中,可以使用内置函数`pca`来进行主成分分析。 下面是一个简单的示例代码,展示如何使用Matlab进行主成分分析降维: ```matlab % 假设有一个包含m个样本和n个特征的数据矩阵X X = [x1, x2, x3, ..., xn]; % 对数据进行中心化处理 X_centered = X - mean(X); % 计算协方差矩阵 covariance_matrix = cov(X_centered); % 进行特征值分解 [eigenvectors, eigenvalues] = eig(covariance_matrix); % 将特征向量按照对应的特征值大小降序排列 [~, index] = sort(diag(eigenvalues), 'descend'); eigenvectors_sorted = eigenvectors(:, index); % 选择前k个特征向量作为新的基,k为降维后的维度 k = 2; new_basis = eigenvectors_sorted(:, 1:k); % 将数据投影到新的基上得到降维后的数据 reduced_data = X_centered * new_basis; ``` 在上述代码中,通过计算数据矩阵的协方差矩阵,然后进行特征值分解,得到特征向量和特征值。将特征向量按照对应的特征值大小降序排列,选择前k个特征向量作为新的基,然后将数据投影到新的基上得到降维后的数据。 需要注意的是,上述代码中的`X`表示输入的数据矩阵,每一列代表一个特征,每一行代表一个样本。`x1, x2, x3, ..., xn`是数据矩阵的列向量。 希望以上代码能够帮助到你!如有任何问题,请随时提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

2020重新做人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值