主成分分析(PCA)是一种基于变量协方差矩阵对数据进行压缩降维、去噪的有效方法,PCA的思想是将n维特征映射到k维上(k<n),这k维特征称为主成分,是旧特征的线性组合,这些线性组合最大化样本方差,尽量使新的k个特征互不相关。
主成分分析再说白点就是将多项指标转化为少数几项综合指标,用综合指标来解释多变量的方差- 协方差结构。综合指标即为主成分。所得出的少数几个主成分要尽可能多地保留原始变量的信息,且彼此不相关,使得主成分比原始变量具有某些更优越的性能(主成分必须保留原始变量90%以上的信息),从而达到简化系统结构,抓住问题实质的目的综合指标即为主成分。
协方差(Covariance)在概率论和统计学中用于衡量两个变量的总体误差。而方差是协方差的一种特殊情况,即当两个变量是相同的情况。协方差表示的是两个变量的总体的误差,这与只表示一个变量误差的方差不同。 如果两个变量的变化趋势一致,也就是说如果其中一个大于自身的平均值,另外一个也大于自身的平均值,那么两个变量之间的协方差就是正值。 如果两个变量的变化趋势相反,即其中一个大于自身的期望值,另外一个却小于自身的期望值,那么两个变量之间的协方差就是负值。
案例
以sklearn自带的葡萄酒数据集为例,对13个特征进行降维处理。
from sklearn import datasets
from sklearn.decomposition import PCA
from matplotlib import pyplot as plt
wine=datasets.load_wine()
x=wine.data
y=wine.target
target_names=wine.target_names
pca = PCA(n_components=5)
X_p= pca.fit_transform(x)#各成份数据
feature_vector=pca.components_ # 降维后特征向量,
feature_variance=pca.explained_variance_ # 特征值的方差
feature_variance_ratio=pca.explained_variance_ratio_ #特征值方差贡献率
score=pca.score(x) # 样本的平均log相似性值
score_samples=pca.score_samples(x) # 每个样本的log相似性值
singular_values_=pca.singular_values_
covariance=pca.get_covariance() #计算并返回协方差矩阵
precision=pca.get_precision() #计算数据精度矩阵
X=pca.inverse_transform(X_p) #还原数据到原来空间
#由方差贡献率可知取两个主成分,进行二维散点图绘制
c=['r','g','b']
plt.figure(1)
for i in range(max(y)+1):
data=X_p[y==i]
plt.scatter(data[:, 0], data[:, 1],c=c[i],label=target_names[i])
plt.legend()
plt.xlabel('PC1')
plt.ylabel('PC2')
plt.title('PCA of wine')
结果分析
前两个主成分累计贡献达到99.97%,因此用两个主成分(特征)来代表13个特征,两个主成分对葡萄酒的识别效果如下散点图。
PCA算法优点
(1)使得数据集更易使用;
(2)降低算法的计算开销;
(3)去除噪声;
(4)使得结果容易理解;
(5)完全无参数限制。
PCA算法缺点
(1)如果用户对观测对象有一定的先验知识,掌握了数据的一些特征,却无法通过参数化等方法对处理过程进行干预,可能会得不到预期的效果,效率也不高;
(2) 特征值分解有一些局限性,比如变换的矩阵必须是方阵;
(3) 在非高斯分布情况下,PCA方法得出的主元可能并不是最优的。
PCA算法应用
(1)高维数据集的探索与可视化。
(2)数据压缩。
(3)数据预处理。
(4)图象、语音、通信的分析处理。
(5)降维(最主要),去除数据冗余与噪声。
如果对你有帮助,请点下赞,予人玫瑰手有余香!
时时仰望天空,理想就会离现实越来越近!