本博客根据 百面机器学习,算法工程师带你去面试 一书总结归纳,公式都是出自该书.
本博客仅为个人总结学习,非商业用途,侵删.
网址 http://www.ptpress.com.cn

目录:

  • PCA最大方差理论

  • PCA最小平方误差理论

在机器学习中, 数据通常需要被表示成向量形式以输入模型进行训练。 但是在对向维向量进行处理和分析时, 会极大地消耗系统资源, 甚至产生维度灾难。 因此, 对特征向量进行降维, 即用一个低维度的向量表示原始高维度的特征就显得尤为重要。

PCA(Principal Components Analysis),它属于一种线性,非监督,全局的降维方法。旨在找到数据中的主成分,并利用这些主成分表征原始数据,从而达到降维的目的。

PCA最大方差理论

我们不妨先从最简单的二维数据进行推到,看PCA是如何工作的。如下图所示:

上图中表示经过中心化的一组数据,我们很容易看出主成分所在的轴的大致方向,即图b中黄线所在的轴。因为在黄线所处的轴上,数据分布的更为分散,意味着数据在这个方向上方差更大。所以从上图可以引出,PCA的目标即最大化投影方差,也就是让数据在主轴上投影的方差最大。

对给定的一组数据点{\(v_1,v_2,…,v_n\)},其中所以向量均为列向量,中心化后的表示为:
=,其中

进行中心化的意义是让数据投影后的平均值为0,更容易描述找到的投影向量。且在进行了中心化后,所有样本投影之后的均值为0,即

我们知道向量内积在几何上表示为第一个向量投影到第二个向量上的长度,因此向量\(x_i\)在ω( 单位方向向量) 上的投影坐标可以表示为 。 所以目标是找到一个投影方向ω, 使得\(x_1,x_2,...,x_n\),在ω上的投影方差尽可能大。

所以投影后得方差可以表示为:



仔细观察可以发现,其实就是样本的协方差矩阵,我们将其写作Σ。由于ω是单位方向向量, 即有\(ω^Tω\)=1。因此我们要求解的最大化问题,可以表示为:

引入拉格朗日乘子, 并对ω求导令其等于0, 便可以推出Σω=λω, 此时

根据我们学过的线性代数知识,我们会发现,原来,\(x\)投影后的方差就是协方差矩阵的特征值。我们要找的最大的方差也就是协方差矩阵最大的特征值,最佳投影方向就是最大特征值所对应得特征向量。次投影方向位于最佳投影方向得正交空间中,是第二大特征向量对应得特征向量,以此类推。
所以我们可以得到PCA求解得步骤:

  • 1,对样本数据进行中心化;
  • 2,求样本得协方差矩阵;
  • 3,对协方差矩阵进行特征值分解,将特征值从大到小排序;
  • 4,去特征值前d大对应得特征向量\(ω_1,ω_2,...,ω_d\),通过以下映射将n维样本映射到d维。

新的\(x_i^′\)的第d维就是\(x_i\)在第d个主成分\(ω_d\)方向上的投影, 通过选取最大的d个特征值对应的特征向量, 我们将方差较小的特征( 噪声) 抛弃, 使得每个n维列向量\(x_i\)被映射为d维列向量\(x_i^′\), 定义降维后的信息占比为

总结: PCA是一种线性降维方法,有一定的局限性,我们可以通过核映射对PCA进行扩展得到核主成分分析(KPCA),也可以通过流形映射的降维方法, 比如等距映射、 局部线性嵌入、 拉普拉斯特征映射等, 对一些PCA效果不好的复杂数据集进行非线性降维操作。

PCA最小平方误差理论

前面求解一条直线使得样本点投影到该直线上的方差最大。从求解直线的思路出发,很容易联想到数学中的线性回归问题,其目标也是求解一个线性函数使得对应直线能够很好地拟合样本点集合。从这个角度出发,PCA的目标就会转换为一个回归问题,在高维空间中,我们实际要找一个d维超平面,使得数据点到这个超平面的距离平方和最小.

以d=1为例,超平面退化为直线,即把样本投影到最佳直线,最小化的就是所有点到直线的距离平方之和。如下图所示:

数据集中每个点\(x_k\)到d维超平面D的距离为:

其中 表示\(x_k\)在超平面D上的投影向量。如果该超平面由d个标准正交基构成,根据线性代数理论可以由这组基线性表示:

其中\(ω_i^T x_k\)表示\(x_k\)在\(ω_i\)方向上投影的长度.因此,实际上就是\(x_k\)在W这组标准正交基下的坐标.而PCA要优化的目标为:

由向量内积的性质,我们可以知道,,于是可以将上面式子中的每一个距离展开

根据展开后的式子来看,

  • 第一项\(x_k^Tx_k\)与选取的W无关,是个常数。
  • 第二项为:


  • 第三项为:

第三项中,\(ω_i^T x_k\) 和\(ω_j^T x_k\) 表示投影长度, 都是数字.且当i≠j时,\(ω_i^Tω_j=0\),因此第三项的交叉项中只剩下d项:

我们可以看到实际上就是矩阵\(W^Tx_kx_k^TW\)的迹(对角线之和),于是可以将距离差的平方继续化简为:

所以原来的优化目标函数可以写成:


根据矩阵乘法的性质,因此优化问题可以转化为,这等价于求解带约束的优化问题

如果我们对W中的d个基\(ω_1,ω_2,...,ω_d\)依次求解, 就会发现和最大方差理论的方法
完全等价。 比如当d=1时, 我们实际求解的问题是

最佳直线ω与最大方差法求解的最佳投影方向一致, 即协方差矩阵的最大特征值所对应的特征向量, 差别仅是协方差矩阵Σ的一个倍数, 以及常数 偏差,但这并不影响我们对最大值的优化。

总结:我们从最小平方误差的角度解释了PCA的原理、 目标函数和求解方法。 不难发现,这与最大方差角度殊途同归, 从不同的目标函数出发, 得到了相同的求解方法。

【降维】主成分分析PCA推导的更多相关文章

  1. 机器学习之路:python 特征降维 主成分分析 PCA

    主成分分析: 降低特征维度的方法. 不会抛弃某一列特征, 而是利用线性代数的计算,将某一维度特征投影到其他维度上去, 尽量小的损失被投影的维度特征 api使用: estimator = PCA(n_c ...

  2. 线性判别分析(LDA), 主成分分析(PCA)及其推导【转】

    前言: 如果学习分类算法,最好从线性的入手,线性分类器最简单的就是LDA,它可以看做是简化版的SVM,如果想理解SVM这种分类器,那理解LDA就是很有必要的了. 谈到LDA,就不得不谈谈PCA,PCA ...

  3. 降维(一)----说说主成分分析(PCA)的源头

    降维(一)----说说主成分分析(PCA)的源头 降维系列: 降维(一)----说说主成分分析(PCA)的源头 降维(二)----Laplacian Eigenmaps --------------- ...

  4. 主成分分析(PCA)原理及推导

    原文:http://blog.csdn.net/zhongkejingwang/article/details/42264479 什么是PCA? 在数据挖掘或者图像处理等领域经常会用到主成分分析,这样 ...

  5. 机器学习降维方法概括, LASSO参数缩减、主成分分析PCA、小波分析、线性判别LDA、拉普拉斯映射、深度学习SparseAutoEncoder、矩阵奇异值分解SVD、LLE局部线性嵌入、Isomap等距映射

    机器学习降维方法概括   版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u014772862/article/details/52335970 最近 ...

  6. 一步步教你轻松学主成分分析PCA降维算法

    一步步教你轻松学主成分分析PCA降维算法 (白宁超 2018年10月22日10:14:18) 摘要:主成分分析(英语:Principal components analysis,PCA)是一种分析.简 ...

  7. 机器学习课程-第8周-降维(Dimensionality Reduction)—主成分分析(PCA)

    1. 动机一:数据压缩 第二种类型的 无监督学习问题,称为 降维.有几个不同的的原因使你可能想要做降维.一是数据压缩,数据压缩不仅允许我们压缩数据,因而使用较少的计算机内存或磁盘空间,但它也让我们加快 ...

  8. 主成分分析PCA数据降维原理及python应用(葡萄酒案例分析)

    目录 主成分分析(PCA)——以葡萄酒数据集分类为例 1.认识PCA (1)简介 (2)方法步骤 2.提取主成分 3.主成分方差可视化 4.特征变换 5.数据分类结果 6.完整代码 总结: 1.认识P ...

  9. 机器学习 —— 基础整理(四)特征提取之线性方法:主成分分析PCA、独立成分分析ICA、线性判别分析LDA

    本文简单整理了以下内容: (一)维数灾难 (二)特征提取--线性方法 1. 主成分分析PCA 2. 独立成分分析ICA 3. 线性判别分析LDA (一)维数灾难(Curse of dimensiona ...

随机推荐

  1. windows系统下,gpu开发环境部署

    1,安装python,使用anaconda或者直接用python.exe安装都可以.我用的是python3.6版的 对于相关的程序包,比如tensorflow或者opencv等,anaconda可以在 ...

  2. 虚拟函数是否应该被声明仅为private/protected?

    问题导入 我想对于大家来说,虚拟函数并不能算是个陌生的概念吧.至于怎么样使用它,大部分人都会告诉我:通过在子类中重写(override)基类中的虚拟函数,就可以达到OO中的一个重要特性——多态(pol ...

  3. spring 的异步处理

    1.先解析几个类的用法 1.1  java.lang.annotation.Annotation @Target(ElementType.FIELD) @Retention(RetentionPoli ...

  4. windows 动态库导出

    以下内容来自博客:https://blog.csdn.net/fengbingchun/article/details/78825004 __declspec是Microsoft VC中专用的关键字, ...

  5. Git - 03. git 工作空间

    1. 概述 git 存放代码的地方 2. 创建 命令 # 1. 从无到有 > git init # 2. 从远程拉去现有的仓库 > git clone <url> 3. 文件生 ...

  6. Python常用数据类型转换

    常用的数据类型转换 目标 了解类型转换的作用 掌握常用的类型转换 函数 说明 int(x [,base ]) 将x转换为一个整数 long(x [,base ]) 将x转换为一个长整数 float(x ...

  7. 一个c程序的执行是从什么开始的?

    一个C语言的执行是从本程序的main函数开始,到main函数结束,但需要注意的是,也是有特殊情况的,若是代码中出现了exit函数,则直接结束程序,对于这一点还是需要了解的. 关于c语言需要了解的是,C ...

  8. 七、linux基础-jdk1.8和weblogic12.2.1.3.0安装

    1.环境探查与准备 安装jdk和weblogic前需要对进行安装的linux系统硬件和软件环境进行探查确认,以确保支持对jdk1.8.0_144_1和weblogic12.2.1.3和的安装.webl ...

  9. Vacation

    题目看上去倒是蛮复杂的样子嘞!

  10. 为什么安装了淘宝镜像,永用cnpm安装依赖包会报错,而用npm就不会?报错:cnpm : 无法加载文件 C:\Users\93457\AppData\Roaming\npm\cnpm.ps1。。。。

    cnpm - 解决 " cnpm : 无法加载文件 C:\Users\93457\AppData\Roaming\npm\cnpm.ps1,因为在此系统上禁止运行脚本.有关详细信息 ... ...