• 主成分分析(PCA)原理


    降维就是一种对高维度特征数据预处理方法。降维是将高维度的数据保留下最重要的一些特征,去除噪声和不重要的特征,从而实现提升数据处理速度的目的。

    在实际的生产和应用中,降维在一定的信息损失范围内,可以为我们节省大量的时间和成本。降维也成为应用非常广泛的数据预处理方法。

    PCA(Principal Component Analysis),即主成分分析方法,是一种使用最广泛的数据降维算法。

    设训练集数据如下:

    $$T = egin{bmatrix}
    X_{1} & X_{2} & X_{3} & X_{4} \
    Y_{1} & Y_{1} & Y_{3} & Y_{4} \
    Z_{1} & Z_{2} & Z_{3} & Z_{4}
    end{bmatrix}$$

    总体 $X,Y,Z$,该怎么解读这个 $3 imes 4$ 的矩阵呢?

        1)每一列代表一个样本点,一个样本点内的每个特征分别来自不同的总体,$4$ 列代表训练集中有 $4$ 个样本点;

        2)每一行的数据来自同一个总体,是对某一总体进行简单随机抽样的结果,$3$ 行代表有 $3$ 个维度/总体/特征,即一个样本点是由不同维度的数据构成的。

    既然矩阵 $T$ 有几行代表几个维度,则 PCA 的目的就是:减少矩阵的行数。设 $C_{k imes 3},; k leq 3$,则变换后的数据集为

    $$T^{'} = CT$$

    上面举了一个简单的训练集的例子。

    现在假设训练集为 $T_{m imes n}$,即有 $n$ 个样本点,每个样本点是 $m$ 维数据,现在找一个矩阵 $C_{k imes m}, ; k leq m$ 将训练集从 $m$ 维降到 $k$ 维:

    $$T^{'}_{k imes} = C_{k imes m}T_{m imes n}$$

    对矩阵 $C$ 按行分块,矩阵 $T$ 按列分块,即

    $$C_{k imes m} = egin{bmatrix}
    eta_{1}  \
    eta_{2}  \
    vdots \
    eta_{k}
    end{bmatrix} ;;;;;
    T_{m imes n} = egin{bmatrix}
    alpha_{1} & alpha_{2} & cdots & alpha_{n}
    end{bmatrix}$$

    对于矩阵 $T$,每一个向量 $alpha_{i}$ 就代表一个样本点,是在 $m$ 维空间的一个向量,现在要把这些向量变换到 $k$ 维空间,那么首先就需要

    找到 $k$ 个线性无关的向量构成一组 $k$ 维空间的基。我们要找的矩阵 $C$ 就是由这组基构成,每一行向量 $eta_{i}$ 就是基中的一个向量,任意

    两个行向量线性无关,矩阵 $C$ 行满秩,即 $r(C) = m$。考虑下面这个式子的含义:

    $$eta_{i} cdot alpha_{i}$$

    向量内积表示:$alpha_{i}$ 向 $eta_{i}$ 所在直线投影的长度和 $|eta_{i}|$ 的乘积。

    向量 $alpha_{i}$ 和 $eta_{i}$ 所在的参考系是一样的,都是 $m$ 维空间中相同的一组基,现在我们想求各个样本点 $alpha_{i}$ 以 $eta_{i}, i = 1,2,...,k$ 作为参考系时的坐标。

    当 $|eta_{i}| = 1$ 时,$eta_{i} cdot alpha_{i}$ 就是代表向量 $alpha_{i}$ 在基向量 $eta_{i}$ 上的分量或坐标。所以

    $$Calpha_{i}$$

    表示 $m$ 维空间中的样本点 $alpha_{i}$ 经过变换矩阵后在 $k$ 维空间中的坐标,基由 $eta_{i},i=1,2,...,k$ 构成。

    那么怎么选取 $k$ 个向量作为基呢?

    PCA 的工作就是从原始的 $m$ 维空间中顺序地找一组两两正交的单位向量,即 $eta_{i},i = 1,2,...,k$,因为它的参考系是在 $m$ 维空间,所以向量维度也是 $m$,

    但向量组的秩是 $k$,即所在的空间的维度是 $k$,按下面的原则选择向量:

       1)在 $m$ 维空间中选择一个基向量,所有数据变换为这个基上的坐标表示后,方差值最大,选出的向量记为 $eta_{1}$。

       2)在与 $eta_{1}$ 正交的子空间中选择一个基向量,所有数据变换为这个基上的坐标表示后,方差值最大,选出的向量记为 $eta_{2}$。

       3)$eta_{3}$ 就是在与 $eta_{1},eta_{2}$ 正交的子空间里面选,以此类推选出所有向量。

    我们已经知道样本点 $alpha_{i}$ 在某个基向量 $x$ 下的坐标为:$(alpha_{i}, x) = alpha_{i}^{T}x$,于是我们有方差:

    $$D(x) = frac{1}{n - 1}sum_{i=1}^{n} ig [ (alpha_{i} - ar{alpha}_{i})^{T}x ig ]^{2}$$

    每个 $alpha_{i}$ 向量先减去它的均值向量 $ar{alpha}_{i}$,这样求出所有样本点在基向量 $x$ 上的分量后,可以直接求方差。因为常数的转置是本身,即

    $$left [(alpha_{i} - ar{alpha}_{i})^{T}x  ight ]^{T} = (alpha_{i} - ar{alpha}_{i})^{T}x$$

    所以上面式子可以进一步转化为

    $$D(x) = frac{1}{n - 1}sum_{i=1}^{n} left [(alpha_{i} - ar{alpha}_{i})^{T}x  ight ]^{T} left [(alpha_{i} - ar{alpha}_{i})^{T}x  ight ]    \
    = frac{1}{n - 1}sum_{i=1}^{n}x^{T}(alpha_{i} - ar{alpha}_{i})(alpha_{i} - ar{alpha}_{i})^{T}x \
    = x^{T}left (frac{1}{n - 1} sum_{i=1}^{n}(alpha_{i} - ar{alpha}_{i})(alpha_{i} - ar{alpha}_{i})^{T}  ight )x$$

    $$S_{m imes n} = egin{bmatrix}
    alpha_{1} & alpha_{2} & cdots & alpha_{n}
    end{bmatrix} -
    egin{bmatrix}
    ar{alpha}_{1} & ar{alpha}_{2} & cdots & ar{alpha}_{n}
    end{bmatrix} =
    egin{bmatrix}
    alpha_{1}^{'} & alpha_{2}^{'} & cdots & alpha_{n}^{'}
    end{bmatrix}$$

    即 $S$ 是每个样本点去中心化后的数据集,因为

    $$SS^{T} = egin{bmatrix}
    alpha_{1}^{'} & alpha_{2}^{'} & cdots & alpha_{n}^{'}
    end{bmatrix}egin{bmatrix}
    alpha_{1}^{'T}\
    alpha_{2}^{'T}\
    vdots \
    alpha_{n}^{'T}
    end{bmatrix} = sum_{i = 1}^{n}alpha_{i}^{'}alpha_{i}^{'T}$$

    则方差可以转化为

    $$D(x) = x^{T}left (frac{1}{n - 1} sum_{i=1}^{n}(alpha_{i} - ar{alpha}_{i})(alpha_{i} - ar{alpha}_{i})^{T}  ight )x = x^{T}left ( SS^{T} ight )x$$

    考虑一下 $SS^{T}$ 有什么意义?现在将矩阵 $S$ 按行分块得

    $$S = egin{bmatrix}
    gamma_{1} \
    gamma_{2} \
    vdots \
    gamma_{m}
    end{bmatrix}  ;;;;
    S^{T} = egin{bmatrix}
    gamma_{1}^{T} & gamma_{2}^{T} & cdots & gamma_{m}^{T}
    end{bmatrix}
    Rightarrow ; SS^{T} = egin{bmatrix}
    gamma_{1}gamma_{1}^{T} & gamma_{1}gamma_{2}^{T} & cdots & gamma_{1}gamma_{m}^{T} \
    gamma_{2}gamma_{1}^{T} & gamma_{2}gamma_{2}^{T} & cdots & gamma_{2}gamma_{m}^{T} \
    vdots & vdots & ddots & vdots \
    gamma_{m}gamma_{1}^{T} & gamma_{m}gamma_{2}^{T} & cdots & gamma_{m}gamma_{m}^{T}
    end{bmatrix}$$

    按行解读的话,每一行都是来自一个总体的简单随机样本,那么 $SS^{T}$ 就是这 $m$ 个总体的样本协方差矩阵。

    我们要求的是能使方差最大的那个向量,先不管向量两两相互正交,可建立如下最优化问题来求解 $x$:

    $$max ;; x^{T}left ( SS^{T} ight )x \
    s.t. ;;; x^{T}x = 1$$

    必须有 $x^{T}x = 1$ 这个约束,不然向量直接取 $x = (infty, infty, ..., infty)$ 就可以了,显然这不是我们想要的解。

    建立拉格朗日函数:

    $$L(x, lambda) = x^{T}left ( SS^{T} ight )x + lambda left ( x^{T}x - 1 ight )$$

    对列向量 $x$ 求偏导得(如果不知道怎么对向量求导,可先阅读博客):

    $$frac{partial L}{partial x} = 2SS^{T}x - 2lambda  x = 0   ;; Rightarrow ;; SS^{T}x = lambda x$$

    惊讶得发现,偏导函数为 $0$ 的解就是协方差矩阵 $SS^{T}$ 的特征向量,将每一个特征向量代入 $L(x, lambda)$ 得

    $$D(x) = x^{T}SS^{T}x = lambda x^{T}x = lambda$$

    我们要找到最大方差就是协方差矩阵最大的特征值,最佳投影方向就是最大特征值所对应的特征向量,次佳就是第二大特征值对应的特征向量,

    以此类推。然后将每个特征向量单位化,$C_{k imes m}$ 就是由前 $k$ 大的特征值所对应的单位特征向量构成。

  • 相关阅读:
    POJ3714+最近点对
    HDU1632+半平面交
    POJ2402+模拟
    ASP.NET MVC几种找不到资源的问题解决办法
    ASP.NET MVC中的错误-友好的处理方法
    ASP.NET MVC 程序 报错“CS0012: 类型“System.Data.Objects.DataClasses.EntityObject”在未被引用的程序集中定义”的解决办法
    【Reporting Services 报表开发】— 表达式
    【Reporting Services 报表开发】— 级联式参数设置
    【Reporting Services 报表开发】— 数据表的使用
    【Reporting Services 报表开发】— 矩阵的使用
  • 原文地址:https://www.cnblogs.com/yanghh/p/13793377.html
Copyright © 2020-2023  润新知