PCA的实现代码过程

2020-06-12 09:11:47 浏览数 (3)

数据导入

代码语言:javascript复制
from sklearn import datasetsimport matplotlib.pyplot as pltimport numpy as npimport pandas as pd
代码语言:javascript复制
iris = datasets.load_iris()iris_x = iris.datairis_y = iris.target
代码语言:javascript复制
print(iris_y.shape)print('*'*50)print(iris_x.shape)
代码语言:javascript复制
(150,)**************************************************(150, 4)

PCA代码部分

代码语言:javascript复制
from sklearn import decomposition
pca = decomposition.PCA()pca
代码语言:javascript复制
PCA(copy=True, iterated_power='auto', n_components=None, random_state=None,  svd_solver='auto', tol=0.0, whiten=False)
代码语言:javascript复制
# 使用pca()参数默认设置iris_pca = pca.fit_transform(iris_x)iris_pca.shape
代码语言:javascript复制
(150, 4)
代码语言:javascript复制
# 保留的n(4)个成分各自的方差百分比pca.explained_variance_ratio_
代码语言:javascript复制
array([0.92461621, 0.05301557, 0.01718514, 0.00518309])
代码语言:javascript复制
pca.explained_variance_ratio_.sum()
代码语言:javascript复制
1.0
代码语言:javascript复制
# 将主成分个数设置为2pca = decomposition.PCA(n_components=2)iris_x_2 = pca.fit_transform(iris_x)iris_x_2.shape
代码语言:javascript复制
(150, 2)
代码语言:javascript复制
pca.explained_variance_ratio_
代码语言:javascript复制
array([0.92461621, 0.05301557])
代码语言:javascript复制
pca.explained_variance_ratio_.sum()
代码语言:javascript复制
0.9776317750248034
  • TIPS:可以给n_components传入转换后变量至少解释数据的百分比
代码语言:javascript复制
pca = decomposition.PCA(n_components=0.99)iris_x_3 = pca.fit(iris_x).transform(iris_x)pca.explained_variance_ratio_
代码语言:javascript复制
array([0.92461621, 0.05301557, 0.01718514])
代码语言:javascript复制
pca.explained_variance_ratio_.sum()
代码语言:javascript复制
0.9948169145498101

可视化部分

代码语言:javascript复制
%matplotlib inlinefig = plt.figure(figsize=(20,7)) ax = fig.add_subplot(121) ax.scatter(iris_x[:,0],iris_x[:,1],c=iris_y,s=40) ax.set_title('Before PCA')ax2 = fig.add_subplot(122) ax2.scatter(iris_x_3[:,0],iris_x_3[:,1],c=iris_y,s=40) ax2.set_title('After PCA')
代码语言:javascript复制
<matplotlib.text.Text at 0x188d58e4ac8>

0 人点赞