一、定义
PCA,即主成分分析法,是一种旋转数据集的方法,所谓主成分就是最大方差的主要方向,一般来说,主成分的个数与原始特征相同。
二、应用
2.1降维从而达到数据可视化的目的:
很多数据集的维度很高,而我们如果想得到可视化的效果,必须降到三维及以下,所以,这就需要用到PCA算法。下面以乳腺癌数据集为例,进行分析:
好,延续我们以前的习惯,把想说的话放到代码的注释里,话不多说,直接上代码:
from sklearn.decomposition import PCA
#首先对数据进行缩放,使得每个特征的方差等于1,这里我们采用StandardScaler缩放
#导入数据集
from sklearn.datasets import load_breast_cancer
#导入StandardScaler缩放函数需要的依赖
from sklearn.preprocessing import StandardScaler
cancer=load_breast_cancer()
scaler=StandardScaler()
scaler.fit(cancer.data)
X_scaled=scaler.transform(cancer.data)
#上面两句话可以合并为X_scaled=scaler.fit_transform(cancer.data)
#缩放完毕
#保留数据的前两个主成分,实例化pca对象
pca=PCA(n_components=2)
#对乳腺癌数据拟合PCA模型
pca.fit(X_scaled)
#将数据变换到前两个主成分的方向上
x_pca=pca.transform(X_scaled)
#让我们看一下前后发生的变化
print("Original shape:{}".format(str(X_scaled.shape)))
print("Reduced shape:{}".format(str(x_pca.shape)))
输出如下:
Original shape:(569, 30)
Reduced shape:(569, 2)
降维成功,本来30个特征,新的数据集只有两个特征,设置特征数用参数n_components=2,下面让我们看看绘图结果。
#对第一第二个主成分作图,按照类别着色
import matplotlib.pyplot as plt
import mglearn.datasets
plt.figure(figsize=(8,8))
mglearn.discrete_scatter(x_pca[:,0],x_pca[:,1],cancer.target)
plt.legend(cancer.target_names,loc="best")
plt.gca().set_aspect("equal")
plt.xlabel("First principal component")
plt.ylabel("Second principal component")
plt.show()
从图中我们可以看到,即使是线性分类器(在这个空间中学习一条直线),也可以在区分这两个类别时表现得相当不错。