PCA(Principal Component Analysis,主成分分析),PCA是一种无监督算法,也就是我们不需要标签也能对数据做降维,这就使得其应用范围更加广泛了。那么PCA的核心思想是什么呢?这里我们提到了方差,咱们可以想象一下,如果一群人都堆叠在一起,我们想区分他们是不是比较困难,但是如果这群人站在马路两侧,我们就可以很清晰的判断出来应该这是两伙人。所以基于方差我们可以做的就是让方差来去判断咱们数据的拥挤程度,在这里我们认为方差大的应该辨识度更高一些,因为分的比较开(一条马路给隔开啦)。

降维致力于解决三类问题。 
1. 降维可以缓解维度灾难问题; 
2. 降维可以在压缩数据的同时让信息损失最小化; 
3. 理解几百个维度的数据结构很困难,两三个维度的数据通过可视化更容易理解。

就像我们图上面的,我说有一个向量(3,2),但是为什么这个向量是这样的表示呢?因为它在我们的做标系中,如果我把坐标系换了,它就不是(3,2)了。作为基,首先的一个前提就是要相互垂直,或者说内积为0,因为X和Y它们表达的分别是两种指标,我们不希望它们之间内部存在任何联系,所以必须让他们内积为0,这样就是各自独立的啦!

所谓的降维就是要把我们的数据投影到最合适的基中

方差,协方差和协方差矩阵

方差(Variance)是度量一组数据的分散程度。方差是各个样本与样本均值的差的平方和的均值:

协方差(Covariance)是度量两个变量的变动的同步程度,也就是度量两个变量线性相关性程度。如果两个变量的协方差为0,则统计学上认为二者线性无关。注意两个无关的变量并非完全独立,只是没有线性相关性而已。计算公式如下:

如果协方差大于0表示一个变量增大是另一个变量也会增大,即正相关,协方差小于0表示一个变量增大是另一个变量会减小,即负相关。

对于二维数据降维到一维数据,按照上面的方法找到方差值最大就行。但是对于高维数据来说,仅此一个条件并不能完全决定。三维数据降维到二维时,首先我们希望找到一个方向使得投影后方差最大,这样就完成了第一个方向的选择,继而我们选择第二个投影方向。

如果我们还是单纯只选择方差最大的方向,很明显,这个方向与第一个方向应该是“几乎重合在一起”,显然这样的维度是没有用的,因此,应该有其他约束条件。从直观上说,让两个字段尽可能表示更多的原始信息,我们是不希望它们之间存在(线性)相关性的,因为相关性意味着两个字段不是完全独立,必然存在重复表示的信息。数学上协方差表示两组数据的相关性:

假设有一个矩阵:

然后我们用X乘以X的转置,并乘上系数1/m:

这个矩阵对角线上的两个元素分别是两个字段的方差,而其它元素是a和b的协方差。两者被统一到了一个矩阵的。根据矩阵相乘的运算法则,这个结论很容易被推广到一般情况:
设我们有m个n维数据记录,将其按列排成n乘m的矩阵X,设C=1mXXT,则C是一个对称矩阵,其对角线分别个各个字段的方差,而第i行j列和j行i列元素相同,表示i和j两个字段的协方差。

PCA算法步骤:

设有m条n维数据。
1)将原始数据按列组成n行m列矩阵X
2)将X的每一行(代表一个属性字段)进行零均值化,即减去这一行的均值
3)求出协方差矩阵 
4)求出协方差矩阵的特征值及对应的特征向量
5)将特征向量按对应特征值大小从上到下按行排列成矩阵,取前k行组成矩阵P
6)Y=PX即为降维到k维后的数据

实例:

对其进行0均值化处理:

求协方差矩阵:

求解后特征值为:


特征值和特征向量的求法是这样的:假设A

根据前面的公式AA乘以特征向量,必然等于特征值乘以特征向量。我们建立特征方程求解:

从特征方程可以看出,矩阵与单位矩阵和特征值乘积的矩阵行列式为0,即:

矩阵的两个特征值都等于-1。现在再用特征值来解特征向量。 把λ=−1带入:

得到:

所以:


对特征值分解后按照特征值大小排序,取前多少个。通过特征值排列 ,我们可以得到数据在这些特征向量上的分布和多样性。

其对应的特征向量分别是:

其中对应的特征向量分别是一个通解,c1和c2可取任意实数。那么标准化后的特征向量为:

因此我们的矩阵P是:

可以验证协方差矩阵C的对角化:

最后我们用P的第一行乘以数据矩阵,就得到了降维后的表示:

协方差及PCA降维计算相关推荐

  1. 【主成分分析】PCA降维算法及Matlab代码实现

    前言   机器学习中经常会遇到高维变量的大数据集,并且大数据集的很多高维变量之间并不是独立的,它们之间往往存在相关关系.这些变量一方面为机器学习提供了大量的信息,另一方面由于信息冗余也增加了数据处理的 ...

  2. 通俗易懂的机器学习——协方差、奇异值分解、PCA降维代码实现

    协方差.奇异值分解.PCA降维代码实现 原理剖析 数据选用 鸢尾花数据观测 瑞士卷数据观测 代码实现 奇异值分解法 鸢尾花数据集降维后的效果 瑞士卷数据集降维后的效果 协方差法 鸢尾花数据集降维后的效 ...

  3. python pca降维_协方差矩阵的计算、PCA

    python默认矩阵X每一行是一个向量,因此一共有m行个数据,对于每一个数据有统计的维度个数为列数n,因此无偏估计用的是对于某个维度的1/(m-1)来归一化得到矩阵A,然后用的是A转置矩阵乘A得到协方 ...

  4. 通俗理解PCA降维作用

    作者 | 黄礼泊,广东工业大学数据挖掘与信息检索实验室(DMIR),机器学习与人工智能,目前研究方向最优化,将最优化理论运用在图像检索.压缩感知生物信号处理等领域. ▌概述   本文主要介绍一种降维方 ...

  5. PCA降维算法原理及代码实现(python和matlab)

    常见的数据降维算法有:奇异值分解(SVD).主成分分析(PCA).因子分析(FA).独立成分分析(ICA). PCA降维的基本思想:通过计算数据矩阵的协方差矩阵,然后得到协方差矩阵的特征值.特征向量. ...

  6. matlab中利用princomp实现PCA降维

    matlab中利用princomp实现PCA降维 在matlab中有函数princomp可以实现数据的降维,本文主要说明该函数的用法. PCA的作用: PCA(主成分分析法),主要用来对数据进行降维, ...

  7. 【白话机器学习】算法理论+实战之PCA降维

    1. 写在前面 如果想从事数据挖掘或者机器学习的工作,掌握常用的机器学习算法是非常有必要的,在这简单的先捋一捋, 常见的机器学习算法: 监督学习算法:逻辑回归,线性回归,决策树,朴素贝叶斯,K近邻,支 ...

  8. python pca降维_机器学习的降维打击

    文章发布于公号[数智物语] (ID:decision_engine),关注公号不错过每一篇干货. 来源 | SAMshare(id:SAMshare) 作者 | samshare "本次主要 ...

  9. python pca降维_MLK | 机器学习的降维quot;打击quot;

    "MLK,即Machine Learning Knowledge,本专栏在于对机器学习的重点知识做一次梳理,便于日后温习,内容主要来自于<百面机器学习>一书,结合自己的经验与思考 ...

最新文章

  1. linux串口驱动分析
  2. XCTF-Reverse:python-trade
  3. vscode设置键盘快捷键
  4. php求数组的长度的函数,php如何计算数组长度?
  5. linux svn 常用命令
  6. ES6新特性_ES6函数参数的默认值设置---JavaScript_ECMAScript_ES6-ES11新特性工作笔记011
  7. mysql1040_解决mysql 1040错误Too many connections的方法
  8. 4.大数据架构详解:从数据获取到深度学习 --- 数据获取
  9. 问题-Ctrl+F7跟踪值时提示“Function to be called, TGGLPolyhedron3d.AsString, was eliminated by linker”...
  10. Atitit it计算机应用体系图  大数据 爬虫 非结构数据 nosql redis mongodb 分布式存储 es搜索 可视化 多媒体与office 19.1. 14.3 计
  11. mysql 自动复制_MySQL复制 自动监控脚本-阿里云开发者社区
  12. 20岁生日 nyoj 312(闰年算法)
  13. 【ZBrush笔刷】实用笔刷和Alpah下载,及笔刷使用方法
  14. 已知三点坐标,求圆心坐标 (外接圆)python实现
  15. 呼叫中心系统的工单流转处理流程
  16. linux redis-trib.rb,redis redis-trib.rb使用密码管理集群
  17. VOT2021比赛简介
  18. [渝粤教育] 泰州学院 信息技术基础 参考 资料
  19. poj 1436 Horizontally Visible Segments(线段树)
  20. html字体怎么变大变粗,ppt如何加粗字体更粗 幻灯片的艺术字怎么把字体变粗?...

热门文章

  1. 一个Git项目多个仓库
  2. 机器学习与算法面试太难?
  3. python __builtins__ set类 (60)
  4. A. 位运算符的应用---管理一组事务的开关状态
  5. Mysql依赖库Boost的源码安装,linux下boost库的安装
  6. NBUT 1457 Sona(莫队算法+离散化)
  7. Android模拟器学framework和driver之传感器篇1(linux sensor driver)
  8. css多行省略号兼容ie,css超出2行部分省略号……,兼容ie
  9. java arcengine_在Java程序中调用ArcEngine
  10. cron 工具 每分钟_计划任务 cron和crontab