1. 程式人生 > >[機器學習](八)cs229之主成分分析

[機器學習](八)cs229之主成分分析

主成分分析的程式碼和原理都比較簡單,之前也用過很多次,轉載的這篇部落格的目的是通過例項來學習這個演算法,方便之後可以快速上手,有關python的程式碼,可以見《機器學習實戰》這本書。

對於PCA原理的理解,可以參考下面的部落格:

1.最大方差理論:


2.最小平方差理論

參考:http://www.cnblogs.com/jerrylead/archive/2011/04/18/2020216.html

下面的內容轉自:http://blog.csdn.net/u010480899/article/details/52263227

主成分分析(Principal Component Analysis,PCA),是一種統計方法。在處理實際問題中,多個變數之間可能存在一定的相關性,當變數的個數較多且變數之間存在複雜的關係時,增加了問題分析的難度。主成分分析是一種數學降維的方法,該方法主要將原來眾多具有一定相關性的變數,重新組合成為一種新的相互無關的綜合變數。例如,當選擇第一個線性組合即第一個綜合變數為F1,希望F1能夠反映更多的資訊,因此F1在所有線性組合中的方差是最大的,此時F1為第一主成分。如果F1作為第一主成分,不足以代表原來P個變數的資訊,則繼續選擇F2作為第二個線性組合,為了更加有效的反映最初的資訊,F1已經具有的資訊不需要再次反映在F2中,那麼要求此時Cov(F1,F2)=0,則F2可以稱之為第二主成分。以此類推,可以構造出多個主成分。 
主成分分析的主要步驟如下: 
(1)對原始資料進行標準化處理,若樣本資料矩陣如下: 
這裡寫圖片描述

對原始資料進行標準化處理: 
這裡寫圖片描述

(2)計算樣本相關係數矩陣(注意這裡假設原始資料標準化後仍用X表示,後面給出的計算該係數矩陣元素值的方法中設計到的Xi和Xj並不是原始資料矩陣X,而是標準化後的矩陣元素,這是這裡依舊用了X表示而已!) 
這裡寫圖片描述

(3)計算相關係數矩陣R的特徵值和相應的特徵向量: 
這裡寫圖片描述

(4)選擇重要的主成分: 
由主成分分析可以得到P個主成分,根據前面的介紹,主成分F1包含的資訊大於F2,且可以以此類推,因此各個主成分的方差也是遞減的,包含的資訊量也是遞減的,所以實際使用該方法的時候不在選取所有的P個主成分,而是根據各個主成分累計貢獻的大小選取前面K個主成分。這裡的貢獻率是指某個主成分的方差佔據全部主成分方差的比重,也就是某個特徵值佔據全部特徵值和的比重,即: 
這裡寫圖片描述

某個主成分的貢獻率越大說明該主成分包含的原始資訊量越大,主成分K值的選取,主要依據主成分 累計貢獻率來決定,一般來說當累計貢獻率達到85%以上時,可以認為這K個主成分包含了原始資訊絕大多數的資訊。

(5)計算主成分得分,其形式如下: 
這裡寫圖片描述

(6)根據主成分得分的資料對問題進行後續的分析和建模。 
案例資料:對15家企業通過8個不同指標資料進行評估。 
這裡寫圖片描述

Matlab程式碼:

clc
clear all
A=xlsread('D:\資料庫區\大三上\HUAWEI\MATLAB\主成分分析.xls','B3:I17');
%得到的資料矩陣的行數和列數
a=size(A,1);
b=size(A,2
); %資料的標準化處理:得到標準化後的矩陣SA for i=1:b SA(:,i)=(A(:,i)-mean(A(:,i)))/std(A(:,i)); end %計算係數矩陣:CM CM=corrcoef(SA); %計算CM的特徵值和特徵向量 [V,D]=eig(CM); %將特徵值按降序排列到DS中 for j=1:b DS(j,1)=D(b+1-j,b+1-j); end %計算貢獻率 for i=1:b DS(i,2)=DS(i,1)/sum(DS(:,1));%單個貢獻率 DS(i,3)=sum(DS(1:i,1))/sum(DS(:,1));%累計貢獻率 end %假定主成分的資訊保留率 T=0.9; for k=1:b if DS(k,3) >= T com_num=k; break; end end %提取主成分的特徵向量 for j=1:com_num PV(:,j)=V(:,b+1-j); end %計算主成分得分 new_score=SA*PV; for i=1:a total_score(i,1)=sum(new_score(i,:)); total_score(i,2)=i; end %強主成分得分與總分放到同一個矩陣中 result_report=[new_score,total_score]; %按總分降序排列 result_report=sortrows(result_report,-4); %輸出結果 disp('特徵值、貢獻率、累計貢獻率:') DS disp('資訊保留率T對應的主成分數與特徵向量:') com_num PV disp('主成分得分及排序(按第4列的總分進行降序排列,前3列為個各成分得分,第5列為企業編號)') result_report
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53

Matlab執行結果: 
這裡寫圖片描述

這裡寫圖片描述

思考:

在cs229中還講到了SVD演算法,現在說明PCA和SVD的關係:

對中心化處理之後的X的協方差矩陣,即XXT進行SVD處理,也就是PCA的處理過程。這點可能會感覺比較奇怪,因為前面我們就是利用SVD的方法來進行PCA處理的,但實際上,正是由於這句話的原因,才可對PCA進行這樣的處理。

XT

XXT XXT

相關推薦

[機器學習]cs229成分分析

主成分分析的程式碼和原理都比較簡單,之前也用過很多次,轉載的這篇部落格的目的是通過例項來學習這個演算法,方便之後可以快速上手,有關python的程式碼,可以見《機器學習實戰》這本書。 對於PCA原理的理解,可以參考下面的部落格: 1.最大方差理論: 2.最小平方

機器學習 kaggle競賽泰坦尼克號專案實戰-1

引言        機器學習演算法都是為專案為資料服務的,某一個演算法都有它自己的適用範圍,以及優勢與劣勢,研究演算法由於平日的日常操練,那麼用它去做專案就如同上戰場殺敵一樣,去發揮它的價值,kaggle就是這樣一個刷怪升級

演算法工程師修仙路:吳恩達機器學習

吳恩達機器學習筆記及作業程式碼實現中文版 第六章 神經網路學習 特徵和直觀理解 從本質上講,神經網路能夠通過學習得出其自身的一系列特徵。 神經網路中,單層神經元( 無中間層)的計算可用來表示邏輯運算,比如邏輯與(AND)、邏輯或(OR)。 邏輯

[python機器學習及實踐(6)]Sklearn實現成分分析PCA

相關性 hit 變量 gray tran total 空間 mach show 1.PCA原理 主成分分析(Principal Component Analysis,PCA), 是一種統計方法。通過正交變換將一組可能存在相關性的變量轉換為一組線性不相關的變量,轉換後的這組

spring深入學習IOC 解析 bean 標籤:meta、lookup-method、replace-method

BeanDefinition中已經完成了對 Bean 標籤屬性的解析工作,這篇博文開始分析子元素的解析。完成 Bean 標籤基本屬性解析後,會依次呼叫 parseMetaElements()、parseLookupOverrideSubElements()、parseReplacedMet

機器學習——SVD推薦系統

SVD詳解 SVD(singular value decomposition),翻譯成中文就是奇異值分解。SVD的用處有很多,比如:LSA(隱性語義分析)、推薦系統、特徵壓縮(或稱資料降維)。SVD可以理解為:將一個比較複雜的矩陣用更小更簡單的3個子矩陣的相乘來表示,這3個

機器學習——感知器學習演算法The perceptron learning algorithm

現在,讓我們簡要地談論一個歷史上曾經令人很感興趣的演算法,當學習到學習理論章節的時候我們將還會提到這個。試想一下修改logistic迴歸的方法,來“迫使”它能夠輸出除了0或1亦或是其它以外的輸出值。為了達到這個目的,自然而然地會想到去改變閾值函式 gg 的定義:接下來,如果我

機器學習ML模型選擇、欠擬合和過擬合

訓練誤差和泛化誤差 需要區分訓練誤差(training error)和泛化誤差(generalization error)。前者指模型在訓練資料集上表現出的誤差,後者指模型在任意一個測試資料樣本上表現出的誤差的期望,並常常通過測試資料集上的誤差來近似。計算訓練誤差和泛化誤差可以使用之前介紹過的損失函式,例如線

機器學習MLGRU、LSTM、深度神經網路、雙向迴圈神經網路

門控迴圈單元(GRU) 迴圈神經網路中的梯度計算方法。當時間步數較大或者時間步較小時,迴圈神經網路的梯度較容易出現衰減或爆炸。雖然裁剪梯度可以應對梯度爆炸,但無法解決梯度衰減的問題。通常由於這個原因,迴圈神經網路在實際中較難捕捉時間序列中時間步距離較大的依賴關係。 門控迴圈神經網路(gated recurre

機器學習MLCNN

CNN-二維卷積層 卷積神經網路(convolutional neural network)是含有卷積層(convolutional layer)的神經網路。卷積神經網路均使用最常見的二維卷積層。它有高和寬兩個空間維度,常用來處理影象資料。 二維互相關運算 雖然卷積層得名於卷積(convolution)運算,

機器學習ML十三批量歸一化、RESNET、Densenet

批量歸一化 批量歸一化(batch normalization)層,它能讓較深的神經網路的訓練變得更加容易。對影象處理的輸入資料做了標準化處理:處理後的任意一個特徵在資料集中所有樣本上的均值為0、標準差為1。標準化處理輸入資料使各個特徵的分佈相近:這往往更容易訓練出有效的模型。 通常來說,資料標準化預處理對於

Redis學習 Redis丟失訂閱訊息分析與處理和client-output-buffer-limit屬性配置說明

Redis快取行情資料,發現程式執行一段時間後,出現subscribe執行緒不再能夠接收到訂閱的行情資料,發現是由Redis的輸出緩衝機制導致的。 Redis為了解決輸出緩衝區訊息大量堆積的隱患,設定了一些保護機制,主要採用兩種限制措施: 大小限制,當某一客戶端緩衝區超過設定值後直接關

機器學習——Apriori演算法進行關聯分析

一. 關聯分析 關聯分析是一種在大規模資料集上尋找有趣關係的任務。這些關係可以有兩種形式:頻繁項集與關聯規則。頻繁項集是經常出現在一塊的物品的集合;關聯規則暗示兩種物品之間可能存在很強的關係。如何量化的評價頻繁項集和關聯規則呢?由此引出了支援度(support)和置信度(confidence)。

使用Python進行層次聚類——基本使用+成分分析繪圖觀察結果+繪製熱圖

Python常用資料探勘的工具包 python對於資料處理非常有好的語言,比如常用的scikit-learn和scipy都可以用來進行機器學習和資料探勘。同時為了使得結果視覺化,Python還提供了非常好用的視覺化工具包matplotlib和seaborn。

機器學習numpy和matplotlib學習

今天來學習第四種畫子圖的方法。 也就是plt.subplots( ).注意區別於plt.subplot( )函式。 先來看看程式碼: #!/usr/bin/env python # -*- coding: utf-8 -*- # @Author : SundayCoder-俊勇

機器學習實踐—sklearn交叉驗證與引數調優

一、交叉驗證與引數調優 交叉驗證(cross validation) 交叉驗證:將拿到的訓練資料,分為訓練集、驗證集和測試集。 訓練集:訓練集+驗證集 測試集:測試集

HBase概念學習開發一個類twitter系統表設計

至少 創建用戶 列表 ase wke long 少包 mali 。。 這邊文章先將可能的需求分析一下,設計出HBase表,下一步再開始編寫client代碼。 TwiBase系統 1、背景 為了加深HBase基本概念的學習,參考HBase實戰這本書實際動手做了這個樣

機器學習 優化演算法利器梯度下降Gradient Descend

理解:機器學習各種演算法的求解最終出來的幾乎都是求解最優模型引數的優化問題。 前言        在優化問題領域有些很多優秀思想和演算法,從約束條件分類 分為無約束條件的優化和有約束條件的優化問題,有約束條

演算法工程師修仙路:吳恩達機器學習

吳恩達機器學習筆記及作業程式碼實現中文版 神經網路引數的反向傳播演算法 代價函式 假設神經網路的訓練樣本有 m

演算法工程師修仙路:吳恩達機器學習

吳恩達機器學習筆記及作業程式碼實現中文版 第六章 神經網路學習 非線性假設 無論是線性迴歸還是邏輯迴歸都有這樣一個缺點:當特徵太多時,計算的負荷會非常大。 使用非線性的多項式項,能夠幫助我們建立更好的分類模型。假設我們有非常多的特徵,例如大於 100 個