matlab pca重構,Matlab – PCA分析和重建多維數據

這是一個快速的演練.首先我們創建一個隱藏變量的矩陣.它有100個觀察,有兩個特點.

>> Y = randn(100,2);

現在創建一個加載矩陣.這將把隱藏的變量映射到觀察到的變量上.說你觀察到的變量有四個特征.那么你的加載矩陣需要是2×4

>> W = [1 1; 1 -1; 2 1; 2 -1]';

這告訴你,觀察的第一部分是兩個因素的總和,第二個是兩個因素的差異,第三個和第四個是各種其他組合.

現在創建你的觀察:

>> X = Y * W + 0.1 * randn(100,4);

我添加了少量隨機噪聲來模擬實驗誤差.現在我們使用stats工具箱中的princomp函數執行PCA:

>> [w pc ev] = princomp(X);

你應該如何解釋這些?那么,pc是主要組件的矩陣.它應該拉出與原始Y變量非常接近的因子.你可以查看這個:

>> corr(pc(:,1),Y(:,1)); % returns -0.9981

>> corr(pc(:,2),Y(:,2)); % returns 0.9830

組合pc * w’將重新創建您的原始數據,減去其平均值.在執行PCA之前總是減去平均值.所以要獲取我們做的原始數據

>> mu = mean(X);

>> xhat = bsxfun(@minus,X,mu); % subtract the mean

>> norm(pc * w' - xhat);

ans =

2.3385e-014

因為w是正交的,所以你也有Xhat * w = pc或者示意性地(即這個代碼不會執行)

(X - mu) * w = pc <=> X = mu + pc * w'

要獲得原始數據的近似值,您可以從計算的主要組件開始刪除列.要了解哪些列要放棄,我們檢查ev變量

>> ev

ev =

11.1323

3.0812

0.0116

0.0068

我們可以清楚地看到,前兩個因素比第二個因素更重要.所以我們來試試看

>> Xapprox = pc(:,1:2) * w(:,1:2)';

>> Xapprox = bsxfun(@plus,mu,Xapprox); % add the mean back in

我們現在可以嘗試繪圖:

>> plot(Xapprox(:,1),X(:,1),'.'); hold on; plot([-4 4],[-4 4])

>> xlabel('Approximation'); ylabel('Actual value'); grid on;

它看起來像一個非常合理的近似值.它高估了一點,但我們不能都是完美的.

如果我們想要一個更粗略的近似,我們可以使用第一個主成分:

>> Xapprox = pc(:,1) * w(:,1)';

>> Xapprox = bsxfun(@plus,mu,Xapprox);

>> plot(Xapprox(:,1),X(:,1),'.'); hold on; plot([-4 4],[-4 4])

>> xlabel('Approximation'); ylabel('Actual value'); grid on;

這次重建不是很好.那是因為我們故意構造我們的數據有兩個因素,我們只是從其中一個重建它們.

最后,您可能希望看到每個因素解釋了多少差異.您可以使用ev變量來執行此操作:

>> 100*ev/sum(ev)

ans =

78.2204

21.6499

0.0818

0.0479

因此,第一個組件解釋了78%的方差,下一個組件解釋了大約22%,最后兩個組件解釋了其余部分.

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/393172.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/393172.shtml
英文地址,請注明出處:http://en.pswp.cn/news/393172.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

文檔對象模型dom_什么是文檔對象模型,以及為什么應該知道如何使用它。

文檔對象模型domby Leonardo Maldonado萊昂納多馬爾多納多(Leonardo Maldonado) 什么是文檔對象模型&#xff0c;以及為什么應該知道如何使用它。 (What’s the Document Object Model, and why you should know how to use it.) So, you’ve studied HTML, you’ve created y…

安裝Docker step by step

1. 系統要求 centos7以上 使用cat /etc/redhat-release查看系統版本&#xff0c;我的Centos 7.6 centos-extra 倉庫 enable&#xff0c;默認是打開的 2.安裝docker docer安裝分為聯網安裝和離線安裝兩種安裝 方式&#xff0c; 第一種 在有外網環境下安裝docker,一般使用yum安…

linux用戶空間和內核exit的語義--linux沒有線程

如果你在程序中調用了exit&#xff0c;那么很顯然你的程序會退出&#xff0c;可是至于為何會退出那就是庫的事情了&#xff0c;我為什么說只是庫的事情而不關linux內核的事情呢&#xff1f;那是因為linux內核根本不管用戶空間的行為策略。庫的策略是什么&#xff1f;很簡單的退…

leetcode1328. 破壞回文串

給你一個回文字符串 palindrome &#xff0c;請你將其中 一個 字符用任意小寫英文字母替換&#xff0c;使得結果字符串的字典序最小&#xff0c;且 不是 回文串。 請你返回結果字符串。如果無法做到&#xff0c;則返回一個空串。 示例 1&#xff1a; 輸入&#xff1a;palindro…

php補充 擴展,PHP安裝擴展補充說明

上一篇文章中用到了&#xff0c;php的sodium擴展&#xff0c;那么如何安裝PHP擴展呢&#xff1f;基于我之前踩過的一些坑&#xff0c;大致整理了幾種安裝php擴展的方法。已安裝sodium為例1、先做點準備工作&#xff0c;安裝sodium依賴rpm -ivh http://mirrors.whsir.com/centos…

Java調用存儲過程出現Bug,sql語法錯誤

因為SQL Server運行沒有正常,檢查了傳入參數的值,發現問題,然后傳入默認參數,解決了問題.轉載于:https://www.cnblogs.com/JimmySeraph/p/11043490.html

leetcode1438. 絕對差不超過限制的最長連續子數組

給你一個整數數組 nums &#xff0c;和一個表示限制的整數 limit&#xff0c;請你返回最長連續子數組的長度&#xff0c;該子數組中的任意兩個元素之間的絕對差必須小于或者等于 limit 。 如果不存在滿足條件的子數組&#xff0c;則返回 0 。 示例 1&#xff1a; 輸入&#…

gitlab 2.7版本升級到2.8

第一步 關閉服務 /etc/init.d/gitlab stop第二部 更新代碼cd /home/gitlab/gitlab# Get latest codesudo -u gitlab git pull origin stable# Install libssudo -u gitlab bundle install --without development test# update dbsudo -u gitlab bundle exec rake db:migrate RA…

arkit技術介紹_面向移動AR的觸覺技術:如何以“觸摸”感增強ARKit應用

arkit技術介紹by Neil Mathew通過尼爾馬修(Neil Mathew) 面向移動AR的觸覺技術&#xff1a;如何以“觸摸”感增強ARKit應用 (Haptics for mobile AR: how to enhance ARKit apps with a sense of “touch”) I’m really excited about the future of haptics for AR and VR. …

Unity3D的坑系列:動態加載dll

Unity3D的坑系列&#xff1a;動態加載dll 我現在參與的項目是做MMO手游&#xff0c;目標平臺是Android和iOS&#xff0c;iOS平臺不能動態加載dll&#xff08;什么原因找喬布斯去&#xff09;&#xff0c;可以直接忽略&#xff0c;而在Android平臺是可以動態加載dll的&#xff0…

微信小程序 php配置,微信小程序的配置

我們使用app.json文件來對微信小程序進行全局配置&#xff0c;決定頁面文件的路徑、窗口表現、設置網絡超時時間、設置多 tab 等。以下是一個包含了所有配置選項的簡單配置app.json{"pages": ["pages/index/index","pages/logs/index"],"wi…

leetcode332. 重新安排行程(dfs)

給定一個機票的字符串二維數組 [from, to]&#xff0c;子數組中的兩個成員分別表示飛機出發和降落的機場地點&#xff0c;對該行程進行重新規劃排序。所有這些機票都屬于一個從 JFK&#xff08;肯尼迪國際機場&#xff09;出發的先生&#xff0c;所以該行程必須從 JFK 開始。 …

PWA - service worker - Workbox(未完)

Get Started&#xff08;開始&#xff09; 只有get請求才能cache緩存嗎&#xff1f;Create and Register a Service Worker File&#xff08;創建和注冊 Service Worker&#xff09; Before we can use Workbox, we need to create a service worker file and register it to o…

draft.js_如何使用快捷方式在Draft.js中創建有序列表和無序列表

draft.jsby Andrey Semin通過安德烈塞米(Andrey Semin) 如何使用快捷方式在Draft.js中創建有序列表和無序列表 (How to create ordered and unordered lists in Draft.js with a shortcut) We at Propeller have encountered many differences between Draft.js and popular t…

當javaScript從入門到提高前需要注意的細節:變量部分

到了HTML5的時代&#xff0c;對javaScript的要求不是降低了&#xff0c;而是更提高了。javaScript語言的入門非常簡單&#xff0c;如果你有java、C#等C風格的結構化語言的基礎&#xff0c;那javaScript你最多半天就可以寫點什么了。但是javaScript是一種動態語言&#xff0c;這…

PAT乙級 1003. 我要通過!

題目&#xff1a; “答案正確”是自動判題系統給出的最令人歡喜的回復。本題屬于PAT的“答案正確”大派送 —— 只要讀入的字符串滿足下列條件&#xff0c;系統就輸出“答案正確”&#xff0c;否則輸出“答案錯誤”。 得到“答案正確”的條件是&#xff1a; 1. 字符串中必須僅有…

電臺復活節_如何通過在控制臺中隱藏復活節彩蛋使您的應用程序用戶驚訝

電臺復活節by Ethan Ryan由伊桑瑞安(Ethan Ryan) 如何通過在控制臺中隱藏復活節彩蛋使您的應用程序用戶驚訝 (How to surprise your app’s users by hiding Easter eggs in the console) I love console.logging(“stuff”).我喜歡console.logging(“ stuff”)。 I do it th…

leetcode1267. 統計參與通信的服務器(dfs)

這里有一幅服務器分布圖&#xff0c;服務器的位置標識在 m * n 的整數矩陣網格 grid 中&#xff0c;1 表示單元格上有服務器&#xff0c;0 表示沒有。 如果兩臺服務器位于同一行或者同一列&#xff0c;我們就認為它們之間可以進行通信。 請你統計并返回能夠與至少一臺其他服務…

System類入門學習

第三階段 JAVA常見對象的學習 System類 System類包含一些有用的字段和方法&#xff0c;他不能被實例化 //用于垃圾回收 public static void gc()//終止正在運行的java虛擬機。參數用作狀態碼&#xff0c;根據慣例&#xff0c;非0表示異常終止 public static void exit(int stat…

gulpfile php,Laravel利用gulp如何構建前端資源詳解

什么是gulp&#xff1f;gulp是新一代的前端項目構建工具&#xff0c;你可以使用gulp及其插件對你的項目代碼(less,sass)進行編譯&#xff0c;還可以壓縮你的js和css代碼&#xff0c;甚至壓縮你的圖片&#xff0c;gulp僅有少量的API&#xff0c;所以非常容易學習。 gulp 使用 st…