转载:https://blog.csdn.net/dugudaibo/article/details/78931825

PCA 的原理相信大家十分熟悉了已经,但是很多人没有真正的进行过相关的推到。在这里本文将举一个利用 PCA 降维的手工计算实例。

1 .问题的描述

  已知现在有一个二维矩阵如下所示

这个是一个已经去掉均值的矩阵。其中每一行是一个维度,而每一列是一个样本。去均值的运算是针对每一个维度进行的运算,也就是说每一行减去这一行的均值。

2. 计算过程

2.1 计算协方差矩阵

  由于已经进行了去均值化,所以可以直接求取协方差矩阵。需要注意的是,协方差矩阵计算的是每一个维度之间的协方差,不是计算样本之间的协方差,所以本例中的协方差矩阵为一个2×2的矩阵。

在这里需要注意的是,通过MATLAB计算协方差矩阵与手工计算有两点不同:
  (1) 这里前面乘以的是1515,这个是有偏估计,但是MATLAB计算的时候乘以的是1414,计算的是无偏估计。
  (2) 在 MATLAB 中,默认每一列是一个维度。所以如果输入原始的数据(2行5列)会返回一个5行5列的协方差矩阵。所以应该先对矩阵进行转置在求解协方差矩阵。

2.2 计算协方差的特征值和特征向量

  通过求解方程

可以得到两个特征值 λ=25λ=25 和 λ=2λ=2。通过求解下面的矩阵,可以得到协方差矩阵的特征向量。

将两个特征向量进行归一化,得到的特征向量如下

求中第一个特征向量为特征值 λ=2λ=2 的特征向量,第二个特征向量为特征值 λ=25λ=25 的特征向量。

2.3 构建变换矩阵并降维

  到这里只需要将变换矩阵与原始矩阵相乘既可以完成降维的工作,在进行降维的过程中有两个容易出现的易错点。首先,特征向量的先后顺序要按照特征值的大小顺序进行排列;其次,如果原始数据的矩阵每一行是一个维度,每一列是一个样本的话,这个时候变换矩阵中的每一行是一个特征向量,如下变换矩阵P

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

如果原始的数据矩阵是每一行是一个样本,而每一列是一个维度的话,此时的变换矩阵中每一列是特征向量,即

P的第一列乘以数据矩阵,就得到了降维后的表示:

3. 参考文献

[1]《PCA算法》

--------------------- 本文来自 独孤呆博 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/dugudaibo/article/details/78931825?utm_source=copy

利用PCA降维的手工计算实例相关推荐

  1. PCA降维以及Kmeans聚类实例----python,sklearn,PCA,Kmeans

    PCA 算法也叫主成分分析(principal components analysis),主要是用于数据降维的.关于降维,可以这样理解,一组数据有n个feature(客户年龄,收入,每个月消费额度等等 ...

  2. pca降维python实例_Python机器学习笔记:使用scikit-learn工具进行PCA降维

    之前总结过关于PCA的知识:深入学习主成分分析(PCA)算法原理.这里打算再写一篇笔记,总结一下如何使用scikit-learn工具来进行PCA降维. 在数据处理中,经常会遇到特征维度比样本数量多得多 ...

  3. MAT之PCA:利用PCA(四个主成分的贡献率就才达100%)降维提高测试集辛烷值含量预测准确度并《测试集辛烷值含量预测结果对比》

    MAT之PCA:利用PCA(四个主成分的贡献率就才达100%)降维提高测试集辛烷值含量预测准确度并<测试集辛烷值含量预测结果对比> 目录 输出结果 实现代码 输出结果 后期更新-- 实现代 ...

  4. 机器学习实战(十一)利用PCA来简化数据

    第十三章 利用PCA来简化数据 13.1 降维技术 13.1.1 主成分分析(PrincipalComponentAnalysis,PCA) 13.1.2 因子分析(Factor Analysis) ...

  5. Python机器学习笔记 使用scikit-learn工具进行PCA降维...

    Python机器学习笔记 使用scikit-learn工具进行PCA降维 之前总结过关于PCA的知识:深入学习主成分分析(PCA)算法原理.这里打算再写一篇笔记,总结一下如何使用scikit-lear ...

  6. Python机器学习笔记 使用scikit-learn工具进行PCA降维

    Python机器学习笔记 使用scikit-learn工具进行PCA降维 之前总结过关于PCA的知识:深入学习主成分分析(PCA)算法原理.这里打算再写一篇笔记,总结一下如何使用scikit-lear ...

  7. C/C++实现PCA降维以及故障监测

    之前使用Matlab进行过关于PCA的研究,应用于故障诊断与监测中,为了方便以后与其他平台进行耦合,采用C/C++语言实现,参考了很多人编写的C/C++代码,也走过一些弯路,针对相关学习在此记录下来, ...

  8. PCA降维的来龙去脉及Python实现

    目录 1 PCA降维 2 在讲PCA降维的原理前需要知道的一些东西 2.1 方差 2.2 协方差及协方差矩阵 2.3 向量在不同基下的坐标 2.4 矩阵乘法 2.5 矩阵的特征值和特征向量 2.6 实 ...

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

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

  10. 【视频】主成分分析PCA降维方法和R语言分析葡萄酒可视化实例|数据分享

    最近我们被客户要求撰写关于主成分分析PCA的研究报告,包括一些图形和统计输出.降维技术之一是主成分分析 (PCA) 算法,该算法将可能相关变量的一组观察值转换为一组线性不相关变量.在本文中,我们将讨论 ...

最新文章

  1. Linux系统普通用户切换省略输入用户名密码
  2. 网站如何接入支付宝(转)
  3. 【Darknet-Yolov3】Ubuntu 服务器上无权限出现 ./darknet: error while loading shared libraries: libcudart.so.8.0
  4. python获取系统内存占用信息的实例方法
  5. centos查看是否安装了某个软件
  6. jprofiler_监控远程linux服务器的JVM进程(转 非常棒)
  7. Netty源码分析第3章(客户端接入流程)----第3节: NioSocketChannel的创建
  8. 【UnityEditor】根据枚举的不同显示各自对应的内容
  9. Java学习之json篇——json介绍
  10. Android Studio安装教程
  11. 希腊字母|罗马数字|中文数字大写
  12. 创建菜单与游戏界面(下)
  13. Thinkphp使用CKEditor4富文本编辑器
  14. qq音乐网络异常获取音乐失败_QQ音乐无法播放_为什么qq音乐总是提示歌曲无效或网络连接失败?...
  15. OSChina 周一乱弹 —— 无双什么都好,但不是芙妹
  16. 老师发的周报写法,之前自己太随意没有规则了QAQ
  17. 安全问题层出不穷 加密手机悄然兴起
  18. 外挂的介绍 什么是外挂
  19. Spring AOP的术语:
  20. 两份重磅文件明确互联网平台分类分级,淘宝、微信、抖音等将迎“超级监管”...

热门文章

  1. Atitit code for biz lst idx项目分析法,包括模块分析,与模块位置idx数据库分析 数据表的分类 日志表不断增长(包括用户表,订单表等)。。元数据表表 基本不增长。。。
  2. Atitit 基于文件的数据库保存系统json文档数据库 目录 1.1. 一行数据一个文件,一个文件夹微数据表表 1 1.2. 保存C:\wamp\www\tisye\tisye.php 1 1.3
  3. Atitit 信息检索 文档资料的查询与检索 目录 1. 索引法 1 1.1. 名字placeholder索引 1 1.2. 文本txt索引 1 1.3. 索引集合包zip 1 1.4. 文件名
  4. Atitit word结构化提取考试试题读取 poi读取word nlp aiprj 目录 1.1. 结构化后数据 1 1.2. 文字读取 1 1.3. 图片读取 1 1.4. Doc的表格读取 /
  5. atitit.TokenService v3 qb1  token服务模块的设计 新特性.docx
  6. Linux环境变量配置【转】
  7. 面向生态合作伙伴的实践分享回顾
  8. Cephalocon 2020首尔峰会取消
  9. 毕设题目:Matlab无人机协同任务
  10. 【手掌识别】基于matlab形态学手掌长宽检测【含Matlab源码 1382期】