《Python数据分析与挖掘实战》学习笔记主成分分析(PCA)

一、简介

主成分分析是一种用于连续属性的数据降维方法,它构造了原始数据的一个正交变换,新空间的基底去除了原始空间基底下数据的相关性,只需使用少数新变量就能够解释原始数据中的大部分变异。在应用中,通常是选出比原始变量个数少,能解释大部分数据中的变量的几个新变量,即所谓主成分,来代替原始变量进行建模。

 

二、Python程序实现

在Python中,主成分分析的函数位于Scikit-Learn下:

sklearn.decomposition.PCA(n_components = None, copy = True, whiten = False)

1、参数说明

(1)n_components

类型:int或string,缺省时默认为None,所有成分被保留。赋值为int,比如n_components=1,将把原始数据降到一个维度。赋值为string,比如n_components='mle',将自动选取特征个数n,使得满足所要求的方差百分比。

意义:PCA算法中所要保留的主成分个数n,既保留下来的特征个数n。

(2)copy

类型:bool, True或者False,缺省时默认为True。

意义:表示是否在运行算法时,将原始训练数据复制一份。若为True,则运行PCA算法后,原始训练数据的值不会有任何改变,因为是在原始数据的副本上进行运算;若为False,则运行PCA算法后,原始训练数据的值会改变,因为是在原始数据上进行降维计算。

(3)whiten

类型:bool,缺省时默认为False。

意义:白化,使的每个特征具有相同的方差。

2、代码实现

import pandas as pd
import xlwt

datafile = r'E:\data\chapter4\demo\data\principal_component.xls' #读取文件路径
outputfile= r'E:\data\chapter4\demo\data\output_principal_component.xls' #输出文件路径

data = pd.read_excel(datafile, header = None) #读取数据

from sklearn.decomposition import PCA

pca = PCA()
pca.fit(data)
result_1 = pca.components_ #返回模型的各个特征向量
result_2 = pca.explained_variance_ratio_ #返回各成分的方差百分比
print(result_1)
print(result_2)

运行结果:

(1)返回各模型特征向量

(2)返回各个成分各自的方差 百分比(贡献率)

从上面的结果可以得到特征方程 det(R-\lambda E) = 0 有7个特征根、各对应7个单位特征向量以及各个成分各自的方差百分比(也称贡献率)。其中,方差百分比越大,说明向量的权重越大。

当选取前四个主成分时,累计贡献率已达到97.37%,说明选取前3个主成分进行计算已经相当不错了,因此可以从新建立PCA模型,设置n_components = 3,计算成分结果。

import pandas as pd
import xlwt

datafile = r'E:\data\chapter4\demo\data\principal_component.xls' #读取文件路径
outputfile= r'E:\data\chapter4\demo\data\output_principal_component.xls' #输出文件路径

data = pd.read_excel(datafile, header = None) #读取数据

from sklearn.decomposition import PCA

pca = PCA(3)
pca.fit(data)
low_d = pca.transform(data) #用它来降低维度
result_3 = pd.DataFrame(low_d).to_excel(outputfile) #保存结果
result_1 = pca.components_ #返回模型的各个特征向量
result_2 = pca.explained_variance_ratio_ #返回各成分的方差百分比
pca.inverse_transform(low_d) #必要时可以用inverse_transform()函数来复原数据
print(result_1)
print(result_2)
print(result_3)

运行结果:

 

原始数据从8维降到了3维,同时这3维数据占了原始数据95%以上的信息。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值