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

用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,我们使用数据科学获得对所拥有数据集的宝贵见解,并进一步了解周…

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

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

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…

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

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

java 加载class文件路径_动手实现MVC: 1. Java 扫描并加载包路径下class文件

背景用过spring框架之后,有个指定扫描包路径,然后自动实例化一些bean,这个过程还是比较有意思的,抽象一下,即下面三个点如何扫描包路径下所有的class文件如何扫描jar包中对应包路径下所有的class文件如何加载class文件…

java jolt tuxedo_java通过jolt调用tuxedo服务.xls

java通过jolt调用tuxedo服务.xls还剩20页未读,继续阅读下载文档到电脑,马上远离加班熬夜!亲,喜欢就下载吧,价低环保!内容要点:?private bea.jolt.pool.servlet.ServletSessionPoolManager bool…

pandas之Seris和DataFrame

pandas是一个强大的python工具包,提供了大量处理数据的函数和方法,用于处理数据和分析数据。 使用pandas之前需要先安装pandas包,并通过import pandas as pd导入。 一、系列Series Seris为带标签的一维数组,标签即为索引。 1.Seri…

机器学习:分类_机器学习基础:K最近邻居分类

机器学习:分类In the previous stories, I had given an explanation of the program for implementation of various Regression models. Also, I had described the implementation of the Logistic Regression model. In this article, we shall see the algorithm of the K…

安卓中经常使用控件遇到问题解决方法(持续更新和发现篇幅)(在textview上加一条线、待续)...

TextView设置最多显示30个字符。超过部分显示...(省略号)&#xff0c;有人说分别设置TextView的android:signature"true",而且设置android:ellipsize"end";可是我试了。居然成功了&#xff0c;供大家參考 [java] view plaincopy<TextView android:id…

垃圾邮件分类 python_在python中创建SMS垃圾邮件分类器

垃圾邮件分类 python介绍 (Introduction) I have always been fascinated with Google’s gmail spam detection system, where it is able to seemingly effortlessly judge whether incoming emails are spam and therefore not worthy of our limited attention.我一直对Goo…

简单易用的MongoDB

从我第一次听到Nosql这个概念到如今已经走过4个年头了&#xff0c;但仍然没有具体的去做过相应的实践。最近获得一段学习休息时间&#xff0c;购买了Nosql技术实践一书&#xff0c;正在慢慢的学习。在主流观点中&#xff0c;Nosql大体分为4类&#xff0c;键值存储数据库&#x…

java断点续传插件_视频断点续传+java视频

之前仿造uploadify写了一个HTML5版的文件上传插件&#xff0c;没看过的朋友可以点此先看一下~得到了不少朋友的好评&#xff0c;我自己也用在了项目中&#xff0c;不论是用户头像上传&#xff0c;还是各种媒体文件的上传&#xff0c;以及各种个性的业务需求&#xff0c;都能得到…

tomcat中设置Java 客户端程序的http(https)访问代理

1、假定http/https代理服务器为 127.0.0.1 端口为8118 2、在tomcat/bin/catalina.sh脚本文件中设置JAVA_OPTS&#xff0c;如下图&#xff1a; 保存后重启tomcat就能生效。转载于:https://www.cnblogs.com/zhangmingcheng/p/11211776.html

MQTT服务器搭建--Mosquitto用户名密码配置

前言&#xff1a; 基于Mosquitto服务器已经搭建成功&#xff0c;大部分都是采用默认的是允许匿名用户登录模式&#xff0c;正式上线的系统需要进行用户认证。 1.用户参数说明 Mosquitto服务器的配置文件为/etc/mosquitto/mosquitto.conf&#xff0c;关于用户认证的方式和读取的…

压缩/批量压缩/合并js文件

写在前面 如果文件少的话&#xff0c;直接去网站转化一下就行。 http://tool.oschina.net/jscompress?type3 1.压缩单个js文件 cnpm install uglify-js -g 安装 1>压缩单个js文件打开cmd,目录引到当前文件夹&#xff0c;cduglifyjs inet.js -o inet-min.js 或者 uglifyjs i…

软件安装(JDK+MySQL+TOMCAT)

一&#xff0c;JDK安装 1&#xff0c;查看当前Linux系统是否已经安装了JDK 输入 rpm -qa | grep java 如果有&#xff1a; 卸载两个openJDK&#xff0c;输入rpm -e --nodeps 要卸载的软件 2&#xff0c;上传JDK到Linux 3&#xff0c;安装jdk运行需要的插件yum install gl…

TensorFlow 2.X中的动手NLP深度学习模型准备

简介&#xff1a;为什么我写这篇文章 (Intro: why I wrote this post) Many state-of-the-art results in NLP problems are achieved by using DL (deep learning), and probably you want to use deep learning style to solve NLP problems as well. While there are a lot …

静态代码块

静态代码块 静态代码块&#xff1a;定义在成员位置&#xff0c;使用static修饰的代码块{ }。位置&#xff1a;类中方法外。执行&#xff1a;随着类的加载而执行且执行一次&#xff0c;优先于main方法和构造方法的执行。格式&#xff1a;作用&#xff1a; 给类变量进行初始化赋值…

学java 的要点_零基础学Java,掌握Java的基础要点

对于程序员群体来说&#xff0c;了解一定的技巧会对学习专业技能更有帮助&#xff0c;也更有助于在自己的职业发展中处于有利地位&#xff0c;无限互联Java培训专家今天就为大家总结Java程序员入门时需要掌握的基础要点&#xff1a;掌握静态方法和属性静态方法和属性用于描述某…