第13章 利用 PCA 来简化数据

    • 我们正通过电视观看体育比赛,在电视的显示器上有一个球。
    • 显示器大概包含了100万像素点,而球则可能是由较少的像素点组成,例如说一千个像素点。
    • 人们实时的将显示器上的百万像素转换成为一个三维图像,该图像就给出运动场上球的位置。
    • 在这个过程中,人们已经将百万像素点的数据,降至为三维。这个过程就称为

    数据显示 并非大规模特征下的唯一难题,对数据进行简化还有如下一系列的原因:

    • 1) 使得数据集更容易使用
    • 2) 降低很多算法的计算开销
    • 3) 去除噪音
    • 4) 使得结果易懂

    适用范围:

    • 在已标注与未标注的数据上都有降维技术。
    • 这里我们将主要关注未标注数据上的降维技术,将技术同样也可以应用于已标注的数据。
    • 1) 主成分分析(Principal Component Analysis, PCA)
      • 通俗理解:就是找出一个最主要的特征,然后进行分析。
      • 例如: 考察一个人的智力情况,就直接看数学成绩就行(存在:数学、语文、英语成绩)
    • 3) 独立成分分析(Independ Component Analysis, ICA)
      • 通俗理解:ICA 认为观测信号是若干个独立信号的线性组合,ICA 要做的是一个解混过程。
      • 例如:我们去ktv唱歌,想辨别唱的是什么歌曲?ICA 是观察发现是原唱唱的一首歌【2个独立的声音(原唱/主唱)】。
      • ICA 是假设数据是从 N 个数据源混合组成的,这一点和因子分析有些类似,这些数据源之间在统计上是相互独立的,而在 PCA 中只假设数据是不 相关(线性关系)的。
      • 同因子分析一样,如果数据源的数目少于观察数据的数目,则可以实现降维过程。

    PCA

    主成分分析(Principal Component Analysis, PCA):通俗理解:就是找出一个最主要的特征,然后进行分析。

    例如: 考察一个人的智力情况,就直接看数学成绩就行(存在:数学、语文、英语成绩)

    1. 找出第一个主成分的方向,也就是数据 方差最大 的方向。
    2. 找出第二个主成分的方向,也就是数据 方差次大 的方向,并且该方向与第一个主成分方向 正交(orthogonal 如果是二维空间就叫垂直)
    3. 通过这种方式计算出所有的主成分方向。
    4. 通过数据集的协方差矩阵及其特征值分析,我们就可以得到这些主成分的值。
    5. 一旦得到了协方差矩阵的特征值和特征向量,我们就可以保留最大的 N 个特征。这些特征向量也给出了 N 个最重要特征的真实结构,我们就可以通过将数据乘上这 N 个特征向量 从而将它转换到新的空间上。

    为什么正交?

    1. 正交是为了数据有效性损失最小
    2. 正交的一个原因是特征值的特征向量是正交的

    例如下图:

    PCA 优缺点

    项目概述

    1. 虽然通过早期测试和频繁测试来发现有瑕疵的产品,但仍有一些存在瑕疵的产品通过测试。
    2. 如果我们通过机器学习技术用于发现瑕疵产品,那么它就会为制造商节省大量的资金。
    3. 具体来讲,它拥有590个特征。我们看看能否对这些特征进行降维处理。
    4. 对于数据的缺失值的问题,我们有一些处理方法(参考第5章)
    5. 目前该章节处理的方案是:将缺失值NaN(Not a Number缩写),全部用平均值来替代(如果用0来处理的策略就太差劲了)。

    开发流程

    文件名:secom.data

    准备数据:将value为NaN的求均值

    1. def replaceNanWithMean():
    2. datMat = loadDataSet('input/13.PCA/secom.data', ' ')
    3. numFeat = shape(datMat)[1]
    4. for i in range(numFeat):
    5. # .A 返回矩阵基于的数组
    6. meanVal = mean(datMat[nonzero(~isnan(datMat[:, i].A))[0], i])
    7. # 将value为NaN的值赋值为均值
    8. datMat[nonzero(isnan(datMat[:, i].A))[0],i] = meanVal
    9. return datMat

    分析数据:统计分析 N 的阈值

    PCA分析数据过程

    在等式 Av=入v 中,v 是特征向量, 入是特征值。

    表示 如果特征向量 v 被某个矩阵 A 左乘,那么它就等于某个标量 入 乘以 v.

    幸运的是: Numpy 中有寻找特征向量和特征值的模块 linalg,它有 eig() 方法,该方法用于求解特征向量和特征值。

    : https://github.com/apachecn/MachineLearning/blob/master/src/py2.x/13.PCA/pca.py

    1. 降维技术使得数据变的更易使用,并且它们往往能够去除数据中的噪音,使得其他机器学习任务更加精确。
    2. 降维往往作为预处理步骤,在数据应用到其他算法之前清洗数据。
    3. 比较流行的降维技术: 独立成分分析、因子分析 主成分分析, 其中又以主成分分析应用最广泛。
    4. 本章中的PCA将所有的数据集都调入了内存,如果无法做到,就需要其他的方法来寻找其特征值。
    5. 如果使用在线PCA分析的方法,你可以参考一篇优秀的论文 "Incremental Eigenanalysis for Classification"

    • 作者: 1988
    • 版权声明:欢迎转载学习 => 请标注信息来源于