sklearn中PCA的使用方法

1. 函数原型及参数说明
这里只挑几个比较重要的参数进行说明。
sklearn.decomposition.PCA(n_components=None, copy=True, whiten=False)

n_components: int, float, None 或 string,PCA算法中所要保留的主成分个数,也即保留下来的特征个数,如果 n_components = 1,将把原始数据降到一维;如果赋值为string,如n_components='mle',将自动选取特征个数,使得满足所要求的方差百分比;如果没有赋值,默认为None,特征个数不会改变(特征数据本身会改变)。
 copy:True 或False,默认为True,即是否需要将原始训练数据复制。
 whiten:True 或False,默认为False,即是否白化,使得每个特征具有相同的方差。
2. PCA对象的属性
explained_variance_ratio_:返回所保留各个特征的方差百分比,如果n_components没有赋值,则所有特征都会返回一个数值且解释方差之和等于1。
 n_components_:返回所保留的特征个数。
3.PCA常用方法
fit(X): 用数据X来训练PCA模型。
 fit_transform(X):用X来训练PCA模型,同时返回降维后的数据。
 inverse_transform(newData) :将降维后的数据转换成原始数据,但可能不会完全一样,会有些许差别。
 transform(X):将数据X转换成降维后的数据,当模型训练好后,对于新输入的数据,也可以用transform方法来降维。
 
 
以下是python实例:
import numpy as np,matplotlib.pyplot as plt
from sklearn.decomposition import PCA
import sklearn.datasets as dts
# 加载乳腺癌数据集
canner = dts.load_wine()
x = canner.data
y = canner.target
# 建模
plt.scatter(x[y==0,0],x[y==0,1],c='r',label=canner.target_names[0])
plt.scatter(x[y==1,0],x[y==1,1],c='b',label=canner.target_names[1])
plt.legend()
plt.show()

model = PCA(n_components=2)
z = model.fit_transform(x) # 训练并降维

# 组件
print('特征向量:',model.components_)
# 解释方差
print('解释方差:',model.explained_variance_)
# 解释方差比
print('方差解释比',model.explained_variance_ratio_)

# 画降维后的 0-1 分布图
plt.scatter(z[:,0],z[:,1],c=y,cmap=plt.cm.Paired)
# 显示图例 看着更清晰
plt.scatter(z[y==0,0],z[y==0,1],c='r',label=canner.target_names[0])
plt.scatter(z[y==1,0],z[y==1,1],c='b',label=canner.target_names[1])
plt.legend()
plt.show()

# 数据重建 还原特征
xnew = model.inverse_transform(z)
 
posted @ 2020-03-12 17:58  氧气O2  阅读(712)  评论(0编辑  收藏  举报