一、简介
主成分分析是一种用于连续属性的数据降维方法,它构造了原始数据的一个正交变换,新空间的基底去除了原始空间基底下数据的相关性,只需使用少数新变量就能够解释原始数据中的大部分变异。在应用中,通常是选出比原始变量个数少,能解释大部分数据中的变量的几个新变量,即所谓主成分,来代替原始变量进行建模。
二、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)返回各个成分各自的方差 百分比(贡献率)
从上面的结果可以得到特征方程
有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%以上的信息。