java做主成分分析_主成分分析PCA

PCA(Principal Component Analysis),即主成分分析,一种常用于数据降维分析的方法。要理解PCA的原理,首先需要理解矩阵变换的意义。

矩阵变换,有两种意义:1,在当前坐标系下的向量,经过矩阵M变换后,结果为被变换的向量在当前坐标系下的新向量。

2,保持向量不变,矩阵M对当前坐标系进行变换,结果为当前向量在新坐标系下的向量表示。该新坐标系即矩阵M,变换后的向量是在新坐标系下各坐标轴上的投影。

以二维空间样本为例,有如下一批样本:

3b6db6185c9091aa98bcffa4e155416e.png

我们需要将该二维样本数据转换到一维空间中,只分析一维空间样本数据。如果我们直接在当前坐标系下分析该样本,把所有样本投影到X或者Y轴的任意一个一维空间上,样本数据都会有较大的损失。如果我们能够找到一个变换矩阵M,使得当前坐标系旋转到下图X' Y'位置:

dbba0dbfc040590ee39fcf0a53a79d7e.png

此时,所有样本数据在X'坐标轴上的投影达到最大,分散的最开。因此直观上X' Y'坐标系就是我们需要寻找的最优变换M。

如何得到这个变换矩阵M?假设我们有如上图一组样本数据A=(x,y),经过矩阵M变换后,样本数据在M坐标系下的投影变成了B=(x',y')。下面分析如何得到M:

(1)首先我们对样本做一次归一化处理(每个样本数据减去相应的样本均值)。这么处理的好处主要是方便后续计算样本方差和协方差。处理后的样本分布如下图所示:

c66c8606240e8e25540865aa37127486.png

(2)所以我们的目标是使得变换后的单个样本数据B在X' Y'上的投影最分散和最大化,也就是使得B=(x', y')中 |x'|或者|y'|最大,而 x'y' 趋近于0。进一步,所有样本数据,使得

402f708fe9545c444b84985ccdf58a3c.png或者  

bd9238e77e967935cffc42163e032ca1.png最大化,而

299f50e2d30a2ca1573ed7d8e1cb64a4.png趋近于0。

对样本数据A=(x,y)来说,令C=

f01e1d0599af7b7c3d571706a07b4649.png,对变换后的样本数据B=(x',y')来说,令D=

9aa4eea45c3444df5135604bcb824106.png。那么,C和D的矩阵表示如下:

C=(

670f8c02e04b56c8911342a8e9c3073a.png)    D=(

6a2efd37d1e37dfbd4c6f303af402ce1.png)

可以看到C和D的主对角线上的元素就是(x,y)和(x',y')的方差。而非主对角线上元素就是(x,y)和(x',y')的协方差。这个C和D被称为C和D的协方差矩阵。

现在我们的目标是找到变换矩阵M,使得协方差矩阵D对角化。

(3)那么C,D和M是什么关系呢?

50b3da729b30c8d99dde3c7e6888e82d.png

上式表明我们的目标变成:寻找一个变换矩阵M,使得MC

0efe132b6817e7554651dc3431918064.png是一个对角矩阵。

又已知C是一个对称矩阵,由对称矩阵的性质可知,一定存在一组C的特征向量作为行组成的特征矩阵E,使得

fa00d2b8a27da442cf1ad089922b2fbd.png=F,其中F是对角矩阵。

结论:这与我们的目标一致,我们要寻找的PCA变换矩阵M就是E,也就是原始样本数据A的协方差矩阵C的特征向量作为行组成的特征矩阵。

那么,下面我们总结一下PCA的步骤:

(1)样本数据归一化处理

(2)对归一化后的样本数据求出协方差矩阵C

(3)对协方差矩阵C求出其特征向量和特征值

(4)以特征值大小按行排列相应的特征向量,舍弃特征值较小的特征向量行,组成的矩阵就是需要找寻的降维后的变换矩阵M。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/392504.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

个人学习进度(第十六周)

转载于:https://www.cnblogs.com/lhj1017/p/7011993.html

什么叫静态构建版本号码_为什么要使用GatsbyJS构建静态网站

什么叫静态构建版本号码by Ajay NS由Ajay NS 为什么要使用GatsbyJS构建静态网站 (Why you should use GatsbyJS to build static sites) Gatsby has been growing over time, and I’m glad to see it in use by a huge number of sites like marketing sites, blogs, and gen…

leetcode 217. 存在重复元素

给定一个整数数组,判断是否存在重复元素。 如果任意一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false 。 示例 1: 输入: [1,2,3,1] 输出: true 代码 class Solution {public boolean containsDuplica…

C#正则表达式提取HTML中IMG标签的URL地址 .

/// <summary> /// 取得HTML中所有图片的 URL。 /// </summary> /// <param name"sHtmlText">HTML代码</param> /// <returns>图片的URL列表</returns> public static string[] GetHtmlImageUrlList(string sHtmlText) { // 定…

java datarow 使用_DataRow中的链接(数据表)

我正在动态构建一个DataTable&#xff0c;我正在尝试在DataRow中添加一个“链接”&#xff0c;我将其添加到DataTable中 . DataTable在创建后绑定到GridView .像这样的东西&#xff1a;DataTable dataTable new DataTable();foreach (Item item in items){DataRow row dataTa…

mac、windows如何强制关闭tomcat进程

方式1.打开cmd&#xff0c;或mac的终端&#xff0c;输入&#xff1a;① ps aux | grep "tomcat"&#xff0c;找到响应的进程id&#xff1b;② kill -9 查询的id&#xff0c;来强制关闭进程方式2&#xff1a;window&#xff0c;打开tomcat文件夹 --> bin --> sh…

用python绘制箱线图_用卫星图像绘制世界海岸线图-第一部分

用python绘制箱线图At the UKHO, we use data science to gain valuable insight into the data sets we hold and further our understanding of the marine environment around us.在UKHO&#xff0c;我们使用数据科学获得对所拥有数据集的宝贵见解&#xff0c;并进一步了解周…

vue 递归创建菜单_如何在Vue中创建类似中等的突出显示菜单

vue 递归创建菜单by Taha Shashtari由Taha Shashtari 如何在Vue中创建类似中等的突出显示菜单 (How to Create a Medium-Like Highlight Menu in Vue) A cool feature in Medium is the highlight menu that pops up when you select some text. This menu contains buttons t…

leetcode 376. 摆动序列(dp)

如果连续数字之间的差严格地在正数和负数之间交替&#xff0c;则数字序列称为摆动序列。第一个差&#xff08;如果存在的话&#xff09;可能是正数或负数。少于两个元素的序列也是摆动序列。 例如&#xff0c; [1,7,4,9,2,5] 是一个摆动序列&#xff0c;因为差值 (6,-3,5,-7,3…

在ASP.NET Atlas中调用Web Service——创建Mashup调用远端Web Service(基础知识以及简单示例)...

作者&#xff1a;Dflying Chen &#xff08;http://dflying.cnblogs.com/&#xff09; 注&#xff1a;Atlas中的Mashup极其复杂&#xff0c;其中涉及众多的对象与架构&#xff0c;为了写这篇文章&#xff0c;我花了不少时间学习研究。同时&#xff0c;关于这方面资源的匮乏简直…

java弹框形式输入_java中点击一个按钮弹出两个输入文本框的源代码

展开全部写了一个很简单的案例,可以参考和修改import java.awt.BorderLayout;import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;import javax.swing.JDialog;import javax.swing.JFrame;import…

sap wm内向交货步骤_内向型人在数据科学中成功的五个有效步骤

sap wm内向交货步骤Just like most attributes of humans, including both the bright and dark sides, being an introvert is no exception. This article was not written to inspire you as most articles about data science or engineering do. What we want is that by …

C# 学习之路--百度网盘爬虫设计与实现(一)

百度网盘爬虫 现在市面上出现了很多网盘搜索引擎&#xff0c;写这系列博文及爬虫程序的初衷&#xff1a; 更方面的查找资源学习C#学习爬虫的设计与实现记录学习历程自我监督 能力有限&#xff0c;如有不妥之处&#xff0c;还请各位看官点评。同在学习的网友~与君共勉。工具/库选…

实习生对企业的认识_如何成为您认识的超级明星实习生

实习生对企业的认识by Maple Ong由Maple Ong 如何成为您认识的超级明星实习生 (How to be The Superstar Intern You Know You Are) 遏制冒名顶替综合症&#xff0c;为即将到来的软件工程实习做准备 (Curb the Impostor Syndrome and get prepared for your upcoming Software…

7时过2小时是几时_2017最北师大版二年级下册数学第七单元《时、分、秒》过关检测卷...

二年级数学下册时分秒测试卷一、填一填。(每空1分&#xff0c;共36分)1.钟面上有()大格&#xff0c;()个小格&#xff0c;时针走1个大格是()时&#xff0c;分针走一个大格是()分。2.1分()秒()分1时1分15秒()秒3.1小时20分()分90分()小时()分 70秒()分()秒4.用时、分、秒填空a)我…

在没人相信的时候,你的坚持才真正可贵

2018 世界 VR 产业大会在南昌开幕&#xff0c;阿里巴巴创始人马云在演讲中说&#xff1a; “在人人都相信一个产业的时候&#xff0c;其实你已经没有机会了。在没有人相信的时候&#xff0c;你的坚持才是真正的珍贵。很多人是因为看见而相信&#xff0c;只有很少数的人是因为相…

leetcode 49. 字母异位词分组(排序+hash)

给定一个字符串数组&#xff0c;将字母异位词组合在一起。字母异位词指字母相同&#xff0c;但排列不同的字符串。 示例: 输入: [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”] 输出: [ [“ate”,“eat”,“tea”], [“nat”,“tan”], [“bat”] ] 代码 class S…

数据库备份策略 分布式_管理优秀的分布式数据团队的4种基本策略

数据库备份策略 分布式COVID-19 has forced nearly every organization to adapt to a new workforce reality: distributed teams. We share four key tactics for turning your remote data team into a force multiplier for your entire company.COVID-19迫使几乎每个组织都…

如何使用阿里云云解析API实现动态域名解析,搭建私有服务器

原文地址&#xff1a;http://www.yxxrui.cn/article/116.shtml 未经许可请勿转载&#xff0c;如有疑问&#xff0c;请联系作者&#xff1a;yxxrui163.com 公司的网络没有固定的公网IP地址&#xff0c;但是能够保证的是&#xff0c;每次动态分配的IP地址均为独立的公网IP&#x…

新手指南:dvwa_如何构建基本的Slackbot:新手指南

新手指南:dvwaBy Vishwa ShahVishwa Shah着 Update: code and tutorial updated on June 28 to reflect Slack API changes.更新&#xff1a;代码和教程已于6月28日更新&#xff0c;以反映Slack API的更改 。 Slackbots&#xff1a;为什么要使用它们&#xff1f; (Slackbots:…