Python3 PCA理解小攻略

主成分分析(Principal Component Analysis,PCA), 是一种多元统计方法,也广泛应用于机器学习和其它领域。通过正交变换将一组可能存在相关性的变量转换为一组线性不相关的变量,转换后的这组变量叫主成分。它的主要作用是对高维数据进行降维。PCA把原先的n个特征用数目更少的k个特征取代,新特征是旧特征的线性组合,这些线性组合最大化样本方差,尽量使新的k个特征互不相关。关于PCA的更多介绍,请参考:https://en.wikipedia.org/wiki/Principal_component_analysis.

PCA的主要算法如下
(1)组织数据为矩阵形式,以便于模型使用,矩阵的一行表示一个样本,矩阵的一列表示一个属性;
(2)计算样本每个特征的平均值;
(3)每个样本数据减去该特征的平均值(归一化处理);
(4)求协方差矩阵;
(5)找到协方差矩阵的特征值和特征向量;
(6)对特征值和特征向量重新排列(特征值从大到小排列);
(7) 对特征值求取累计贡献率;
(8)对累计贡献率按照某个特定比例选取特征向量集的子集合;
(9)对原始数据(第三步后)进行转换。

······其中协方差矩阵的分解可以通过按对称矩阵的特征向量来,也可以通过分解矩阵的SVD来实现,而在Scikit-learn中,也是采用SVD来实现PCA算法的。关于SVD的介绍及其原理,可以参考:矩阵的奇异值分解(SVD)
  本文将用三种方法来实现PCA算法,一种是原始算法,即上面所描述的算法过程,具体的计算方法和过程,可以参考:A tutorial on Principal Components Analysis, Lindsay I Smith. 一种是带SVD的原始算法,在Python的Numpy模块中已经实现了SVD算法,并且将特征值从大从小排列,省去了对特征值和特征向量重新排列这一步。最后一种方法是用Python的Scikit-learn模块实现的PCA类直接进行计算,来验证前面两种方法的正确性。
·······本文从代码的角度,做了一次PCA独立成分分析的小攻略,主要是为了回答如下几个问题:

  1. 经过PCA降维后数据变了没有?变了没有取决于最后训练直接输入机器学习的数据到底是PCA的输出,还是通过PCA找出来的对应主属性列的原始数据列。
  2. 在继续使用机器学习算法做分类时,是直接使用PCA降维后的特征?还是需要恢复数据到原始数据?本文针对主要针对此问题做攻略展开!
  3. 实现PCA的三种方式

代码

# -*- coding: utf-8 -*-
import numpy as np
from sklearn.decomposition import PCA
import sys
#返回选择多少个主要的特征(属性列)
def index_lst(lst, 
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值