zoukankan      html  css  js  c++  java
  • 主成分分析(Principal Components Analysis)

    主成分分析PCA(Principal Component Analysis),作用是:

    1. 聚类 Clustering:把复杂的多维数据点,简化成少量数据点,易于分簇
    2. 降维:降低高维数据,简化计算,达到数据降维,压缩,降噪的目的

    PCA 的目的就是找到一个低维映射空间,使得数据映射后方差最大。

    理论实现:

    首先对样本空间为 (d) 维全部的数据中心化,使得均值为 0,即将所有的样本与样本均值相减获得新的样本:

    [mathbf { x } _ { i } = mathbf { x } _ { i } - mu ]

    也就是说转换后:

    [frac { 1 } { N } sum _ { i = 1 } ^ { N } mathbf { x } _ { i } = 0_d ]

    知识补充:

    求向量 u 在向量 v 上的投影:
    在这里插入图片描述
    那么根据上图可以列出以下公式

    [egin{aligned} u ^ { prime } & = frac { d } { | v | } v \ d & = | u | cos heta \ cos heta & = frac { u^T cdot v } { | u | | v | } end{aligned} ]

    所以可以解出向量 (u) 在向量 (v) 上的投影 (u^prime) 为:

    [u^prime = frac { u ^ T cdot v } { | v | ^ { 2 } } v ]

    那么将向量 (v) 所在直线视为一维空间,那么向量 (u) 映射在该维度的表示为

    [u^v = frac { u ^ T cdot v } { | v | } = frac { v ^ T cdot u } { | v | } ]

    也就是说映射后的长度(有方向)成为向量 (u) 映射在该维度的表示。

    那么现在求取映射后空间,先考虑映射到一维空间,也就是说向一个向量做投影,假如现在向向量 (u _ { 1 }) 做投影。

    那么由于一开始的中心化操作,使得映射后均值仍然为零:

    [frac { 1 } { n } sum _ { i = 1 } ^ { n } frac { u _ { 1 } ^ { T } } { | u _ { 1 } | } mathbf x _ { i } = frac { u _ { 1 } ^ { T } } { | u _ { 1 } | } sum _ { i = 1 } ^ { n } frac { 1 } { n } mathbf x _ { i } = 0 ]

    那么映射后的方差有:

    [ frac { 1 } { n } sum _ { i = 1 } ^ { n } left( frac { u _ { 1 } ^ { T } } { | u _ { 1 } | } mathbf x _ { i } - 0 ight) ^ { 2 } = frac { 1 } { n } sum _ { i = 1 } ^ { n } frac { u _ { 1 } ^ { T } } { | u _ { 1 } | } mathbf x _ { i } mathbf x _ { i } ^ { T } frac { u _ { 1 } } { | u _ { 1 } | } = frac { u _ { 1 } ^ { T } } { | u _ { 1 } | } frac { 1 } { n } sum _ { i = 1 } ^ { n } mathbf x _ { i } mathbf x _ { i } ^ { T } frac { u _ { 1 } } { | u _ { 1 } | } =frac { u _ { 1 } ^ { T } } { | u _ { 1 } | }S frac { u _ { 1 } } { | u _ { 1 } | } ]

    其中 (S) 为数据集的协方差矩阵:

    [S = frac { 1 } { n } sum _ { i , j = 1 } ^ { n } mathbf x _ { i } ^ { T } cdot mathbf x _ { j } ]

    现在想要映射在该一维空间后数据的方差最大,那么该优化问题为:

    [egin{aligned} max _ { u _ { 1 } } quad & u _ { 1 } ^ { T } cdot S cdot u _ { 1 } \ ext { s.t.} quad & left| u _ { 1 } ight| _ { 2 } ^ { 2 } = 1 end{aligned} ]

    其中为了方便,将映射向量的长度定为一作为约束条件。为了去掉这一约束条件,使用拉格朗日乘数法转换该最优化问题:

    [ max _ { u _ { 1 } } left{ u _ { 1 } ^ { T } cdot S cdot u _ { 1 } + lambda left( 1 - left| u _ { 1 } ight| _ { 2 } ^ { 2 } ight) ight} ]

    对于凸优化问题,在最优点出导数为零,所以最优解的必要条件为:

    [2 u _ { 1 } cdot S + lambda left( - 2 u _ { 1 } ight) = 0 ]

    也就是说:

    [S u _ { 1 } = lambda u _ { 1 } ]

    可以看出 (u _ { 1 }) 是协方差矩阵 (S) 的一个特征向量,那么现在代入到原最优化问题:

    [egin{aligned} max _ { u _ { 1 } } quad & u _ { 1 } ^ { T } cdot lambda cdot u _ { 1 } \ ext { s.t.} quad & left| u _ { 1 } ight| _ { 2 } ^ { 2 } = 1 end{aligned} ]

    可以进一步转换为:

    [egin{aligned} max _ { u _ { 1 } } quad & lambda \ ext { s.t.} quad & left| u _ { 1 } ight| _ { 2 } ^ { 2 } = 1 end{aligned} ]

    也就是说在约束条件下希望该特征值最大。那么推广到多维空间映射,仍然适用。那么最佳的多维空间则由 Top (d^{prime}) 特征值(最大的(d^{prime}) 个特征值)所对应的特征向量构成。

    那么PCA的具体实现流程 :

    [egin{aligned} & ext { 1. let }overline { mathbf { x } } = frac { 1 } { N } sum _ { n = 1 } ^ { N } mathbf { x } _ { n } , ext { and let } mathbf { x } _ { n } leftarrow mathbf { x } _ { n } - overline { mathbf { x } } , X^T = [mathbf x_1,cdots,mathbf x_N] \ & ext { 2. calculate } ilde { d } ext { top eigenvectors } mathbf { w } _ { 1 } , mathbf { w } _ { 2 } , ldots , mathbf { w } _ { ilde { d } } ext { of } mathbf { X } ^ { T } mathbf { X } \ & ext { 3. return feature transform } mathbf { Phi } ( mathbf { x } ) = mathbf { W } ( mathbf { x } - overline { mathbf { x } } ) end{aligned} ]

    任世事无常,勿忘初心
  • 相关阅读:
    如何增加VM Ware虚拟机的硬盘空间
    安装完成oracle 11g R2 后,使用sqlplus 报错"sqlplus: error while loading shared libraries" ...
    listener.ora
    ExtJS项目框架有关问题讨论
    Oracle启动监听报错:The listener supports no services解决
    Linq学习笔记一
    PAT 1054 The Dominant Color[简单][运行超时的问题]
    Andrew NgML第十八章大规模机器学习
    PAT 1042 Shuffling Machine[难]
    PAT 1103 Integer Factorization[难]
  • 原文地址:https://www.cnblogs.com/FlameBlog/p/14715207.html
Copyright © 2011-2022 走看看