python 实现pca(主成分分析)降维处理
import numpy as np
from sklearn.decomposition import PCA
import sys
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
def main():
# test data
#mat = [[-1,-1,0,2,1],[2,0,0,-1,-1],[2,0,1,1,0]]
file1 = open("ssp_all.txt","r")
list_row =file1.readlines()
list_source = []
for i in range(len(list_row)):
column_list = list_row[i].strip().split("\t") # 每一行split后是一个列表
list_source.append(column_list) # 在末尾追加到list_source
for i in range(len(list_source)): # 行数
for j in range(len(list_source[i])): # 列数
list_source[i][j]=float(list_source[i][j])
file1.close()
pca = PCA(n_components=0.85) #信息量为0.85,也可设定整型参数,那就是维度
pca.fit(list_source) #训练
newX=pca.fit_transform(list_source) #降维后的数据
# PCA(copy=True, n_components=2, whiten=False)
print(pca.explained_variance_ratio_) #输出贡献率
print(newX)
fig = plt.figure()
ax = Axes3D(fig, rect=[0, 0, 1, 1], elev=30, azim=20)
plt.scatter(newX[:, 0], newX[:, 1],newX[:,2],marker='o')
plt.show()
#因为降维后是3维数据所以后四行代码是画一个三维的图
main()
参数解释:
n_components: 我们可以利用此参数设置想要的特征维度数目,可以是int型的数字,也可以是阈值百分比,如95%,让PCA类根据样本特征方差来降到合适的维数,也可以指定为string类型,MLE。
copy: bool类型,TRUE或者FALSE,是否将原始数据复制一份,这样运行后原始数据值不会改变,默认为TRUE。
whiten:bool类型,是否进行白化(就是对降维后的数据进行归一化,使方差为1),默认为FALSE。如果需要后续处理可以改为TRUE。
explained_variance_: 代表降为后各主成分的方差值,方差值越大,表明越重要。
explained_variance_ratio_: 代表各主成分的贡献率。
inverse_transform(): 将降维后的数据转换成原始数据,X=pca.inverse_transform(newX)。