主成分分析法PCA的原理及计算

主成分分析法

主成分分析法(Principal Component Analysis),简称PCA,其是一种统计方法,是数据降维,简化数据集的一种常用的方法

它本身是一个非监督学习的算法,作用主要是用于数据的降维,降维的意义是挺重要的,除了显而易见的通过降维,可以提高算法的效率之外,通过降维我们还可以更加方便的进行可视化,以便于我们去更好的理解数据,可以发现更便于人类理解,主成分分析其一个很重要的作用就是去噪,有的时候,经过去噪以后再进行机器学习,效果会更好

我们可以基于主成分分析法的降维来理解其原理

原理及计算

我们设一个二维的坐标系,横轴为特征一,纵轴为特征二,相应的存在一些样本,其对应相应的点,既然是二维的,那么我们就可进行降维

那么降维到一维的具体操作是什么呢?

一个很明显的方案就是对这两个特征选一个特征,将另一个特征去除掉,如果说我们将特征二扔掉保留特征一的话,那么全部的点就会相应的全部映射到横轴上,相反,我们选择特征二的话,所有的点就会映射到纵轴上

这就是对应的两种降维的方案,这两个方案哪一个是更好的呢,我们将所有的点映射到了横轴以后,点和点之间距离是相对比较大的的方案就是更好的方案,为什么呢,点和点之间的距离大,即点和点之间有着更高的可区分度,这样也更好的保持了原来的点和点之间的距离,虽然也不同,但是也相应的更小的

还有一种更好的方案,我们可以选取一条直线,将所有的点都映射到这根直线上,使用这种方式,所有的点更趋近于原来的分布情况,区分度也比映射到横纵轴上更加明显

那么如何找到这个让样本间间距最大的轴?为了找到这个轴,我们先使用方差来定义一下这个样本间间距

这样这个问题就变成了,我们需要找到一个轴(直线),使得样本空间中的所有点在映射到这个轴以后,方差是最大的

那么怎么操作呢?

首先,我们将样本的均值归0,即所有的样本都减去这批样本的均值,这样就相当于让坐标轴进行了移动,使得样本在每个维度上均值都为0,这样我们就可以将方差的式子变成(xi是已经映射到新的轴上的新的样本)

然后我们要求这个轴的方向w=(w1,w2)(此处用二维来表示),使得我们所有的样本,在映射到w以后,有使映射以后的样本Xproject的方差值最大,式子展开如下

需要注意的是:

对于这个X来说,可能有多个维度,因此每一个X都是一个有多个元素的向量,因此更准确的式子应该是

其均值等依然是含有多个内容的向量,为什么呢,因为虽然映射到了这个轴上,但是本身这个轴还是处在这个n维的坐标系中,那么这实际上就是这两个向量相减之后的模的平方,又因为我们之前对样本进行了demean处理(均值取0),因此,这个式子化简以后为,即为映射完的点的模的平方和再除以m最大

那么这个Xprojecti到底是要怎么表示呢?

我们设这个轴为w,样本点为Xi,其也是一个向量,那么现在这个Xi要映射到w轴上的话,可以向w轴做一个垂直的直线,那么其与w轴的交点就是我们对应的Xproject这一点,那么说白了我们要求的模的平方就是指向交点的这个直线,相当于我们要求将一个向量映射到另一个向量上对应的映射的长度是多少

实际上这种映射就是点乘的定义

我们知道现在这个w轴是一个方向向量,所以其模为1,那么式子就化简成

运用数学定理,很明显可以得出

那么我们带入之前的式子就可以得到我们真正要求的式子,即Xi与w点乘完以后的平方和再除以m以后的结果最大

这样我们的主成分分析法就是要求一个w轴,使得映射上去的点与w点乘完以后的平方和再除以m以后的结果最大,这样主成分分析法就变成了一个目标函数的最优化问题,求一个函数的最大值,我们就可以使用梯度上升法来解决

线性回归和这个是不一样的,最直观的不同在于线性回归的样本是关于这个新的垂直的方向是关于特征的方向,并不是垂直于这根直线的

用梯度上升法来求解PCA问题

我们说可以使用梯度上升法来解决主成分分析问题,那么怎么用梯度上升法来求解此类问题呢?

那么我们知道,求一个函数的最大值,关键是我们要求这个函数的梯度,对于上面最终的式子来说,除了w以外就没有未知数了,那么对应的梯度就是函数对w求偏导,整理合并以后可以写成

对这个式子进行向量化的处理,我们观察这个式子,我们可以发现其中的式子就是点乘的形式,其实际上每一项就是Xw这个向量和X中的第n列中的每一个元素相乘再相加,Xw可以写成这种行向量的形式

而上面的计算过程计算下来就是Xw和一个矩阵相乘,这个矩阵可以写成(其就是X这个矩阵,有m个样本,n个特征)

其最后将梯度的计算的向量化的结果就可以写成(经过转置之后符合要求的)

介就是最后的计算公式啦

我们可以在直接使用这个公式来进行计算,最后得到需要的结果

【笔记】主成分分析法PCA的原理及计算的更多相关文章

  1. 主成分分析(PCA)原理及R语言实现

    原理: 主成分分析 - stanford 主成分分析法 - 智库 主成分分析(Principal Component Analysis)原理 主成分分析及R语言案例 - 文库 主成分分析法的原理应用及 ...

  2. 主成分分析(PCA)原理及R语言实现 | dimension reduction降维

    如果你的职业定位是数据分析师/计算生物学家,那么不懂PCA.t-SNE的原理就说不过去了吧.跑通软件没什么了不起的,网上那么多教程,copy一下就会.关键是要懂其数学原理,理解算法的假设,适合解决什么 ...

  3. 吴恩达机器学习笔记(八) —— 降维与主成分分析法(PCA)

    主要内容: 一.降维与PCA 二.PCA算法过程 三.PCA之恢复 四.如何选取维数K 五.PCA的作用与适用场合 一.降维与PCA 1.所谓降维,就是将数据由原来的n个特征(feature)缩减为k ...

  4. 主成分分析(PCA)原理总结

    主成分分析(Principal components analysis,以下简称PCA)是最重要的降维方法之一.在数据压缩消除冗余和数据噪音消除等领域都有广泛的应用.一般我们提到降维最容易想到的算法就 ...

  5. 【机器学习】主成分分析法 PCA (II)

    主成分分析法(PAC)的优化——选择主成分的数量 根据上一讲,我们知道协方差为① 而训练集的方差为②. 我们希望在方差尽可能小的情况下选择尽可能小的K值. 也就是说我们需要找到k值使得①/②的值尽可能 ...

  6. 主成分分析法PCA原理

    PCA(Principal Component Analysis)是一种常用的数据分析方法.PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维数据的降 ...

  7. 特征脸是怎么提取的之主成分分析法PCA

    机器学习笔记 多项式回归这一篇中,我们讲到了如何构造新的特征,相当于对样本数据进行升维. 那么相应的,我们肯定有数据的降维.那么现在思考两个问题 为什么需要降维 为什么可以降维 第一个问题很好理解,假 ...

  8. 【机器学习】主成分分析法 PCA (I)

    主成分分析算法是最常见的降维算法,在PCA中,我们要做的是找到一个方向向量,然后我们把所有的数都投影到该向量上,使得投影的误差尽可能的小.投影误差就是特征向量到投影向量之间所需要移动的距离. PCA的 ...

  9. 主成分分析(PCA)原理详解

    一.PCA简介 1. 相关背景 在许多领域的研究与应用中,往往需要对反映事物的多个变量进行大量的观测,收集大量数据以便进行分析寻找规律.多变量大样本无疑会为研究和应用提供了丰富的信息,但也在一定程度上 ...

随机推荐

  1. AcWing 99. 激光炸弹

    地图上有n个目标,用整数x,y表示目标在地图上的位置,每个目标都有一个价值Wi. 注意:不同目标可能在同一位置. 现在有一种新型的激光炸弹,可以摧毁一个包含r个位置的正方形内的所有目标. 激光炸弹的投 ...

  2. NoSql非关系型数据库之MongoDB应用(三):MongoDB在项目中的初步应用

    业精于勤,荒于嬉:行成于思,毁于随. 我们可以结合相关的IDE做一个简单的增删改查了,实现MongoDB在项目中的初步应用. 前提是安装了MongoDB服务和MongoDB可视化工具,没有安装的可以点 ...

  3. 资源:jenkins下载路径

    Jenkins版本下载路径 所有版本:http://mirrors.jenkins.io/war/

  4. 合并两个有序链表---python

    # Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val = x # sel ...

  5. asp.net 简明代码

    <asp:RadioButton ID="daadaa" runat="server" GroupName="dada" OnChec ...

  6. Kettle——shell交互命令

    Kettle--shell交互命令 在kettle上开发了job或transform可以以单独的文件存在,也可以存放在资源库中.调用这些程序可以通过shell脚本调用,记录下: 资源库中的job: . ...

  7. java并发编程基础——线程通信

    线程通信 当线程在系统内运行时,程序通常无法准确的控制线程的轮换执行,但我们可以通过一些机制来保障线程的协调运行 一.传统的线程通信 传统的线程通信主要是通过Object类提供的wait(),noti ...

  8. ajax请求对返回数据data的处理

    1,ajax请求会根据响应头的返回数据类型对返回的数据data变量进行不同的处理 $.get("data/user-permission-submit-" + ddo.manipu ...

  9. sync/fsync/fdatasync的简单比较

    此文主要转载自 http://blog.csdn.net/zbszhangbosen/article/details/7956558 官网上有关于MySQL的flush method的设置参数说明,但 ...

  10. 【剑指offer】27. 二叉树的镜像

    剑指 Offer 27. 二叉树的镜像 知识点:二叉树:递归:栈 题目描述 请完成一个函数,输入一个二叉树,该函数输出它的镜像. 示例 输入:root = [4,2,7,1,3,6,9] 输出:[4, ...