Author:Liedra
https://www.cnblogs.com/LieDra/
下面是对数据进行预处理主成分分析的过程。
主成分分析(Principal Components Analysis),简称PCA,是一种数据降维技术,用于数据预处理。
PCA的一般步骤是:先对原始数据零均值化,然后求协方差矩阵,接着对协方差矩阵求特征向量和特征值,这些特征向量组成了新的特征空间。矩阵的主成分就是其协方差矩阵对应的特征向量,按照对应的特征值大小进行排序,最大的特征值就是第一主成分,其次是第二主成分,以此类推。
通过使用 SPSS 软件对该处理后的数据集进行主成分分析,得到总方差解释表如下:
我们选取累积方差贡献率达 80%以上的 13 个 维度,作为原始数据集 20 维降维后的结果(因此下面代码中n_components=13参数为13)。
代码示例
'''
version:
author:
Method:PCA--主成分分析
'''
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
# from sklearn.model_selection import train_test_split
from sklearn.decomposition import PCA
readFileName="D:/study/5/code/python/python Data analysis and mining/class/dataset/german-全标准化.xls" #这里路径注意修改
# 读取excel
df=pd.read_excel(readFileName)
list_columns=list(df.columns[:-1])
x=df.ix[:,:-1]
# print(x)
y=df.ix[:,-1]
names=x.columns
# X_train, X_test, y_train, y_test = train_test_split(x, y, test_size=0.3, random_state=0)
# 训练,
# pca = PCA(n_components=5) n_components表示要保留的特征个数
pca = PCA(random_state=5,n_components=13)
pca.fit(x) # PCA是无监督学习算法,此处y自然等于None。
result = pca.transform(x) # 将数据转换为降维后的数据
print(result)
res = pca.explained_variance_ratio_ #explained_variance_ratio_:返回 所保留的n个成分各自的方差百分比。
res2 = [0]*len(res)
for i in range(len(res)):
if i==0:
res2[i]=res[i]
else:
res2[i] = res2[i-1]+res[i]
print(res2) #这里得到的就是累计方差贡献
# print (pca.explained_variance_ratio_)
print (pca.explained_variance_)
# 写入文件中
# col = {}
# acolumns = []
# for i in range(13):
# acolumns.append('a'+str(i+1))
# col['a'+str(i+1)]=[]
# for each in result:
# col['a'+str(i+1)].append(each[i])
# acolumns.append('result')
# col['result']=list(y)
# result2 = pd.DataFrame(col,columns=acolumns)
# result2.to_excel(r"dataset\german-pca.xls")
主成分分析后,得到的新的数据维度减少,在此例中使得处理的数据量变少,使用起来更加方便。