用Python的sklearn库进行PCA(主成分分析)

在python的sklearn的库里面集成很多机器学习算法的库,其中也包括主成分分析的方法。

1.PCA算法的原理:

PCA主要是用来数据降维,将高纬度的特征映射到低维度的特征,加快机器学习的速度。比如在三维空间里面有一个薄饼状的三维物体,由于薄饼的厚度相对于薄饼的直径要小很多很多,故我们在平时的时候就说这个薄饼是圆的,而不说它的是圆柱的,这就是无意识中把描述薄饼的特征从三维降到二维了。(由于学识疏浅,这个例子可能不是特别恰当,还请谅解)。

下面看这个图片(该图片来自台湾大学李宏毅老师的ppt):


  在这个图片中,我们用两个特征,一个是attack,一个是defense来描述样本。但是如下图所示,我们作了两条线,可以看出在右边这条线上有较大的方差,而左边这条线的方差比较小,我们知道,方差越大,所包含的信息就越多。那么如何把这两个特征进行降维呢,降维要尽可能保持原始数据的信息,故要取使方差最大的一个维度(本例中从二维降到一维)。假设右边这条线的方差最大,我们就可以把这条线所在的直线当作降维后的一个维度。也就是二维降到一维后,这个一维空间的x轴所在的位置。那么这个降维后的x轴代表着什么呢?在本例中,我们可以看到这个新的特征由defense和attack这两个特征向量相加,新特征的含义我个人理解为防御力和攻击力在差不多的情况下的大小。不同的人可能理解不一样,现在就成功的将这个二个特征降到了一个特征。在实际的情况中可能有成千上万维数据,具体降到多少个特征要根据实际情况而定。一般来说,前几个特征的累计贡献率就可能达到百分之九十几了。



2.在python里面使用pca算法:

首先要导入库:

from sklearn.decomposition import PCA

下面是官网上的例子:

>>> X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])
>>> pca = PCA(n_components=2)
>>> pca.fit(X)
PCA(copy=True, n_components=2, whiten=False)
>>> print(pca.explained_variance_ratio_) 
[ 0.99244...  0.00755...]

先创建一个PCA对象,其中参数n_components表示保留的特征数,默认为1。如果设置成‘mle’,那么会自动确定保留的特征数

最后显示的 参数 explained_variance_ratio_:array, [n_components]返回 所保留的n个成分各自的方差百分比,这里可以理解为单个变量方差贡献率,

可以看到第一个特征的单个变量方差贡献率已经到达0.99,意味着几乎保留了所有的信息。所以只保留一个特征即可

>>> import numpy as np
>>> from sklearn.decomposition import PCA
>>> X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])
>>> pca = PCA(n_components='mle')
>>> pca.fit(X)
# PCA(copy=True, n_components=2, whiten=False)
>>> print(pca.explained_variance_ratio_)
[ 0.99244291]
现在我们将n_components设置成"mle",发现自动保留了一个特征。


  • 48
    点赞
  • 357
    收藏
    觉得还不错? 一键收藏
  • 19
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值