PCA是主要成分分析,principal componetn analysis的缩写。
它是一种帮助定义更小、更相关特征集合的技术。新的特征是现有特征的线性组合(即旋转)。输入空间经过旋转后,输出集合的第一个向量包含信号的大部分能量(即方差)。第二个向量与第一个向量正交,它包含剩余能量的大部分;第三个向量又与前两个向量正交,并包含剩余能量的大部分。(摘自《数据科学导论》)
PCA降维就是将数据映射到新的一组基上,获得一个新的表达,并且新的表达仍然包含了原向量的绝大部分信息。
例如在图中,红色向量为(3, 2)。而当将基底换为蓝色的两个正交向量后红色向量不再是(3, 2)。
现在比如将5个特征降维成2维,特征的数字失去了实际意义。2维的数据仍然包含了绝大部分信息从而防止了实际商业信息的泄露。比如有150条有5个特征的数据,想要将此数据降维为2维,那么只需要用这些向量乘上一个基向量2*150的基向量,就可以得到一个150*2的矩阵从而实现降维。
这里利用iris数据集,原数据集为150*4的矩阵。现在将其降维为2。
iris=datasets.load_iris()
pca=PCA(n_components=2)
X_pca=pca.fit_transform(iris.data)
print(pca.explained_variance_ratio_.sum())
结果显示,降维维度为1,2,3时输出能量分别为0.924, 0.977 和0.995
通常情况下,结果要保证输入能量的95%以上(有时是99%)。所以当维度为1时并不是一个好的维度约减。
有的时候,需要将信号进行白化处理(各维度特征向量方差强制为1)。白化会损失一部分信息但是能够提高学习算法的精度。
pca=PCA(n_components=2,whiten=True)
结果为0.978Randomized PCA
这是一种基于SVD(奇异值分解法),相比于PCA更快更轻,近似迭代分解的方法,适用于数据量大的样本。使用方法类似PCA。
iris=datasets.load_iris()
pca=RandomizedPCA(n_components=2)
X_pca=pca.fit_transform(iris.data)
print(pca.explained_variance_ratio_.sum())
结果为0.9776