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(Xi−X¯)2n−1−−−−−−−−−−−−−√
上面的公式测量着样本到样本均值的平均距离。你可能会想,分母为什么不是 n 而是 n−1 ?
比如说:你想调查整个人类的生活水平,但是你的能力和精力都是有限的,你不可能调查到世界上的每一个人,因此,你只能找出一部分人来评估整个人类的生活水平。也就是说,你的样本集是现实世界的子集。在这样的情况下,你应该用 n−1 ,它被证明是更加接近标准差的。然而,如果你的样本集是调查了全部的人口,那么你应该用 n 而不是 n−1 。这个解释给你一种直观的感觉,如果你想要看更多的细节,请参考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(Xi−X¯)2n−1
求方差的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(Xi−X¯)(Yi−Y¯)n−1
从上面的公式我们能看出 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 找到具有最高方差的维度