• PCA降维算法


    PCA降维算法简介

    主成分分析(Principal Component Analysis,PCA), 是一种统计方法。通过正交变换将一组可能存在相关性的变量转换为一组线性不相关的变量,转换后的这组变量叫主成分。

    PCA算法大概是解决这么一个问题:有(m)个样本和(n)种特征,每个样本有(n)个特征值对应不同的特征。如果我们把这些样本看作(n)维空间中的(m)个点,现在需要将空间的维数降为(k),同时尽可能减少信息的损失,方便后续对数据的分析和处理。

    PCA降维算法的大体思想就是特征之间的去相关性。为什么呢?如果两个特征有很强的相关性,也就是可以通过某一个的值来推出另一个的值,这时其中一个特征的存在就显得无关紧要,这就是所谓的特征冗余。如果我们能够去除那些相关性较大的特征,使保留下来的特征尽量无相关性,就可以节约大量时间。

    最大方差理论

    一个离散型随机变量(X)的方差定义为$$S2=frac{sum_{i=1}n(x_i-ar{x})^2}{n}$$
    在信号处理中认为信号具有较大的方差,噪声有较小的方差,信噪比就是信号与噪声的方差比,越大越好。也就是方差越大的特征,其信息量就越大,用来做区分的效果就会越好。因此我们认为,最好的k维特征是将n维样本点转换为k维后,每一维上的样本方差都很大。

    协方差矩阵

    仿照方差的定义,我们通过协方差来描述随机变量(X,Y)的相关性,设(X,Y)在第(i)组样本中的取值分别为(x_i,y_i),则$$Cov(X,Y)=frac{sum_{i=1}^n(x_i-ar{x})(y_i-ar{y})}{n}$$
    或者写成$$Cov(X,Y)=E[(X-E[X])(Y-E[Y])]$$

    [=E[XY]-E[X]E[Y] ]

    可以发现如果两个随机变量协方差的绝对值越大,则它们之间的相关性就越强。协方差为正表示正相关,为负则表示负相关,也就是它们变化的方向一致或者是相反。

    对于(n)个随机变量(x_1,dots,x_n),定义它们的协方差矩阵(C),满足(C_{i,j}=Cov(x_i,x_j))
    可以发现协方差矩阵必然是一个实对称矩阵,且通过推导可以得到协方差的计算公式$$C=frac{1}{m}AA^T$$其中(A)是一个经过数据中心化处理的(n*m)矩阵,也就是每一列元素的和均为(0),每个行向量是一个样本。

    特征值与特征向量

    满足方程$$Ax_i=lambda_ix_i$$的向量(x_i)称为矩阵(A)的特征多项式,对应的(lambda_i)为对应的特征值。
    如果一个矩阵的特征值互不相同,则它可以被对角化$$A=UCU$$其中(U=[x_1,dots,x_n],C)是对角线为(A)的特征值的对角矩阵。

    有个结论是一个实对称矩阵的特征多项式两两正交,证明如下:
    设$$Ap=np,Aq=mq$$则$$pTAq=mpTq$$

    [p^TAq=p^TA^Tq=(Ap)^Tq=np^Tq ]

    作差得$$(n-m)p^Tq=0$$
    又因为(n ot= m),故(p^Tq=0)

    PCA降维算法

    我们的目标是要让不同特征之间的相关性尽量小,且单个特征的方差尽可能大,也就是要让协方差矩阵的主对角线元素尽可能大,且其他元素均为(0).

    先不考虑降维,设原来的矩阵为(X),变换后的矩阵(Y=QX),则(Q)为一方阵。设(C_X,C_Y)分别表示矩阵(X,Y)的协方差矩阵,则$$C_Y=frac{1}{m}YTT=QC_XQT$$
    (C_X=UAU^T),由于(C_X)是对角阵,故(UU^T=U^TU=I),因此(A=U^TC_XU)
    若令(Q=U^T),则得到的(C_Y)就是一个对角矩阵。

    现在要让(C_Y)的主对角线元素尽可能大,则把特征向量按照对应特征值从大到小排序,并取前(k)大作为基底,求出对应的矩阵(Y)即可。

    这是PCA算法的代数理解。如果想要通过直观来理解,就是如果我们把每个样本看作(n)维空间中的一个点,现在要找一个向量,使得所有点在向量上投影的方差尽可能大。通过推导可以发现协方差矩阵对应特征值最大的特征向量是满足条件的,那么我们把它作为一个基底向量。接着我们需要继续找一个和主向量正交的向量,同样使得投影的方差尽可能大,然后就找到了特征值第二大的特征向量,如此类推。

  • 相关阅读:
    phpMyAdmin 尝试连接到 MySQL 服务器,但服务器拒绝连接 解决办法
    MySQL意外关闭, 导致软件崩溃而无法启动的解决办法
    !function 笔记
    C++中四种类型转换方式
    SpringCloud面试题及答案
    Spring Boot面试题
    javaWeb常用面试题
    mysql行转列 问题 SUM(IF(条件,列值,0))
    mysql行列转换
    C++面试常见题
  • 原文地址:https://www.cnblogs.com/beginend/p/11737398.html
Copyright © 2020-2023  润新知