11、PCA 介绍

背景

在许多领域的研究与应用中,通常需要对含有多个变量的数据进行观测,收集大量数据后进行分析寻找规律。
因此需要找到一种合理的方法,在减少需要分析的指标同时,尽量减少原指标包含信息的损失,以达到对所收集数据进行全面分析的目的。

1、 PCA 介绍

PCA(Principal Component Analysis) 是一种常见的数据分析方式,常用于高维数据的降维,可用于提取数据的主要特征分量。
PCA的主要思想是将n维特征映射到k维上,这k维是全新的正交特征也被称为主成分,是在原有n维特征的基础上重新构造出来的k维特征

2、 PCA 步骤和实例分析

2.1 步骤

1、求均值,每列减去对应的均值
2、求特征协方差矩阵
3、求协方差的特征值和特征向量
4、特征值排序,选择最大的k个,特征向量分别作为列向量组成特征向量矩阵。
5、样本点投影到选取的特征向量上

2.2 实例

现在假设有一组数据如下:

image

行代表了样例,列代表特征,这里有10个样例,每个样例两个特征。可以这样认为,有10篇文档,x是10篇文档中“learn”出现的TF-IDF,y是10篇文档中“study”出现的TF-IDF。

  • 第一步,分别求x和y的平均值,然后对于所有的样例,都减去对应的均值。这里x的均值是1.81,y的均值是1.91,那么一个样例减去均值后即为(0.69,0.49),得到
    image

  • 第二步,求特征协方差矩阵,如果数据是3维,那么协方差矩阵是
    image

这里只有x和y,求解得
image
对角线上分别是x和y的方差,非对角线上是协方差。协方差是衡量两个变量同时变化的变化程度。协方差大于0表示x和y若一个增,另一个也增;小于0表示一个增,一个减。如果x和y是统计独立的,那么二者之间的协方差就是0;但是协方差是0,并不能说明x和y是独立的。

  • 第三步,求协方差的特征值和特征向量,得到
    image
    上面是两个特征值,下面是对应的特征向量,特征值0.0490833989对应特征向量为,这里的特征向量都归一化为单位向量。

  • 第四步,将特征值按照从大到小的顺序排序,选择其中最大的k个,然后将其对应的k个特征向量分别作为列向量组成特征向量矩阵。
    这里特征值只有两个,我们选择其中最大的那个,这里是1.28402771,对应的特征向量是(-0.677873399, -0.735178656)T。

  • 第五步,将样本点投影到选取的特征向量上。假设样例数为m,特征数为n,减去均值后的样本矩阵为DataAdjust(mn),协方差矩阵是nn,选取的k个特征向量组成的矩阵为EigenVectors(nk)。那么投影后的数据FinalData为
    FinalData(10
    1) = DataAdjust(10*2矩阵) x 特征向量(-0.677873399, -0.735178656)T
    得到的结果是
    image

这样,就将原始样例的n维特征变成了k维,这k维就是原始特征在k维上的投影。

3、 代码实例

##用sklearn的PCA
from sklearn.decomposition import PCA
import numpy as np
X = np.array([[-1, 1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])
pca=PCA(n_components=1)
pca.fit(X)
print(pca.transform(X))

4、 总结

  • 缓解维度灾难:
    PCA 算法通过舍去一部分信息之后能使得样本的采样密度增大(因为维数降低了),这是缓解维度灾难的重要手段;
  • 降噪:
    当数据受到噪声影响时,最小特征值对应的特征向量往往与噪声有关,将它们舍弃能在一定程度上起到降噪的效果;
  • 过拟合:
    PCA 保留了主要信息,但这个主要信息只是针对训练集的,而且这个主要信息未必是重要信息。有可能舍弃了一些看似无用的信息,但是这些看似无用的信息恰好是重要信息,只是在训练集上没有很大的表现,所以 PCA 也可能加剧了过拟合;
  • 特征独立:
    PCA 不仅将数据压缩到低维,它也使得降维之后的数据各特征相互独立;

你可能感兴趣的:(机器学习算法研究,Python基础学习,流量&搜广推,机器学习,数据挖掘,人工智能)