PCA详解-并用scikit-learn实现PCA压缩红酒数据集

Posted 普通网友

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PCA详解-并用scikit-learn实现PCA压缩红酒数据集相关的知识,希望对你有一定的参考价值。

引言

在这篇文章中,我会介绍一些PCA背后的数学概念,然后我们用Wine数据集作为实例,一步一步地实现PCA。最后,我们用更加强大的scikit-learn方便快速地实现PCA,并用逻辑回归来拟合用PCA转换后的数据集。为了让大家更好地理解PCA,整篇文章都贯穿着实例,现在,让我们享受这篇文章吧。

标准差(Standard Deviation)

在引入标准差之前,我先介绍一下平均值,假设我们有个样本集X,其中的样本为 X=[1,2,3,4,5,6] ,求平均值的公式如下:

X¯=ni=1Xin

  • X¯ :平均值
  • n :样本的个数
  • Xi :第 i 个样本

X的平均值为:

X¯=6i=1Xi6=1+2+3+4+5+66=3.5

求平均值的Python代码如下:

import numpy as np
X=np.array([1,2,3,4,5,6])
np.mean(X)
 
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

不幸的是平均值并没有告诉我们关于样本集的很多信息。比如[0,8,12,20]和[8,9,11,12]的平均值都是10,但是它们的数据分散程度有着明显的不同。因此,我们并不满足于仅仅求出一个小小的平均值,它只是一个我们到达伟大目标的一个垫脚石。下面让我们引入标准差,它度量着数据的分散程度。它的公式如下:

s=ni=1(XiX¯)2n1

上面的公式测量着样本到样本均值的平均距离。你可能会想,分母为什么不是 n 而是 n1 ?

比如说:你想调查整个人类的生活水平,但是你的能力和精力都是有限的,你不可能调查到世界上的每一个人,因此,你只能找出一部分人来评估整个人类的生活水平。也就是说,你的样本集是现实世界的子集。在这样的情况下,你应该用 n1 ,它被证明是更加接近标准差的。然而,如果你的样本集是调查了全部的人口,那么你应该用 n 而不是 n1 。这个解释给你一种直观的感觉,如果你想要看更多的细节,请参考http://mathcentral.uregina.ca/RR/database/RR.09.95/weston2.html

求标准差的python代码如下:

import numpy as np
X=np.array([1,2,3,4,5,6])
np.std(X)
 
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

方差(Variance)

方差和标准差一样,都是度量着数据的分散程度。它的公式就是标准差的平方,如下:

s2=ni=1(XiX¯)2n1

求方差的python代码如下:

import numpy as np
X=np.array([1,2,3,4,5,6])
np.var(X)
 
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

协方差(Covariance)

方差和标准差只能操作一维的数据集,但是在现实生活中,样本可能有很多的特征,也就是说你的数据集有可能是很多维的。但是,测量样本特征之间的关系很有必要,比如说:我们的样本有2个特征,一个是你的学习时间,一个是你的成绩,那么正常情况下,一定是你的学习时间越长,你的成绩越好。但是,方差和标准差不能度量这种特征之间的关系,而协方差可以。

假设我们有两个特征X,Y。计算它们之间的协方差公式为:

cov(X,Y)=ni=1(XiX¯)(YiY¯)n1

从上面的公式我们能看出 cov(X,Y)cov(Y,X)

协方差具体的大小并不重要,但是它的正负是重要的。如果它的值是正的,这表明两个特征之间同时增加或减小;如果它的值是负的,这表明两个特征之间有一个增加而另一个减小。如果它的值为0,则表明两个特征之间是独立的。

在实际应用中,我们样本的特征不可能只有2个,而是有更多的特征。在这种情况下我们用协方差矩阵表示。假设我们的样本有n个特征,这里我用 1,2,3,4,,n 来表示每个特征。协方差矩阵如下所示:

C=cov(1,1)cov(2,1)cov(3,1)cov

以上是关于PCA详解-并用scikit-learn实现PCA压缩红酒数据集的主要内容,如果未能解决你的问题,请参考以下文章

用scikit-learn学习主成分分析(PCA)

scikit-learn 中的 PCA 投影和重建

使用 scikit-learn PCA 找到具有最高方差的维度

Spark 中的 PCA 输出与 scikit-learn 不匹配

scikit-learn PCA 没有“分数”方法

在 scikit-learn 中从 PCA 中查找和利用特征值和特征向量