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.pswp.cn/news/392504.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/392504.shtml
英文地址,請注明出處:http://en.pswp.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:…