1.导入相应库
from matplotlib import pyplot as plt
from sklearn.datasets import load_iris
from sklearn.decomposition import PCA
import pandas as pd
import numpy as np
2.准备数据集
iris = load_iris()
X = iris.data
y = iris.target
pd.DataFrame(X).head()
3.PCA降维
#设置降维后的维数为2
pca = PCA(n_components=2)
X_dr = pca.fit_transform(X)
X_dr
4.根据标签对降维后数据可视化
%matplotlib inline
#设置颜色
color = ['red', 'black', 'orange']
#依次画出不同种类的点
for i in [0, 1, 2]:
plt.scatter(X_dr[y == i, 0], X_dr[y == i, 1], c=color[i], alpha=0.7, label=iris.target_names[i])
plt.savefig(r"C:\Users\86377\Desktop\1.png")
plt.legend()
plt.title("PCA of IRIS dataset")
最后绘制图像如下
5.查看降维后每一列的信息量(可解释性方差大小)
pca.explained_variance_
6.降维后每个新特征向量所占总信息量占原始数据信息量的百分比
pca.explained_variance_ratio_
#将百分比求和看总信息保留
pca.explained_variance_ratio_.sum()
7.累积可解释方差贡献率曲线
pca_line = PCA().fit(X)
plt.plot([1,2,3,4],np.cumsum(pca_line.explained_variance_ratio_))
plt.xticks([1,2,3,4]) #这是为了限制坐标轴显示为整数
plt.xlabel("number of components after dimension reduction")
plt.ylabel("cumulative explained variance ratio")
plt.savefig(r"C:\Users\86377\Desktop\2.png")
plt.show()
绘制图像如下:
我们可以看到图像的增幅越来越小,对可解释的方差贡献率越来越低。
8.最大似然估计自选超参数
pca_mle = PCA(n_components='mle').fit(X)
X_mle = pca_mle.transform(X)
pca_mle.explained_variance_ratio_.sum()
9.按信息量占比选超参数
pca_f = PCA(n_components=0.97, svd_solver='full')
X_f = pca_f.fit_transform(X)
pca_mle.explained_variance_ratio_.sum()