1. 程式人生 > >主成分分析(PCA)-最大方差解釋

主成分分析(PCA)-最大方差解釋

我閱讀了PCA、SVD和LDA。這幾個模型相近,卻都有自己的特點。本篇打算先介紹PCA,至於他們之間的關係,只能是邊學邊體會了。PCA以前也叫做Principal factor analysis。

1. 問題

     真實的訓練資料總是存在各種各樣的問題:

1、 比如拿到一個汽車的樣本,裡面既有以“千米/每小時”度量的最大速度特徵,也有“英里/小時”的最大速度特徵,顯然這兩個特徵有一個多餘。

2、 拿到一個數學系的本科生期末考試成績單,裡面有三列,一列是對數學的興趣程度,一列是複習時間,還有一列是考試成績。我們知道要學好數學,需要有濃厚的興趣,所以第二項與第一項強相關,第三項和第二項也是強相關。那是不是可以合併第一項和第二項呢?

3、 拿到一個樣本,特徵非常多,而樣例特別少,這樣用迴歸去直接擬合非常困難,容易過度擬合。比如北京的房價:假設房子的特徵是(大小、位置、朝向、是否學區房、建造年代、是否二手、層數、所在層數),搞了這麼多特徵,結果只有不到十個房子的樣例。要擬合房子特徵->房價的這麼多特徵,就會造成過度擬合。

4、 這個與第二個有點類似,假設在IR中我們建立的文件-詞項矩陣中,有兩個詞項為“learn”和“study”,在傳統的向量空間模型中,認為兩者獨立。然而從語義的角度來講,兩者是相似的,而且兩者出現頻率也類似,是不是可以合成為一個特徵呢?

5、 在訊號傳輸過程中,由於通道不是理想的,通道另一端收到的訊號會有噪音擾動,那麼怎麼濾去這些噪音呢?

     回顧我們之前介紹的《模型選擇和規則化》,裡面談到的特徵選擇的問題。但在那篇中要剔除的特徵主要是和類標籤無關的特徵。比如“學生的名字”就和他的“成績”無關,使用的是互資訊的方法。

     而這裡的特徵很多是和類標籤有關的,但裡面存在噪聲或者冗餘。在這種情況下,需要一種特徵降維的方法來減少特徵數,減少噪音和冗餘,減少過度擬合的可能性。

     下面探討一種稱作主成分分析(PCA)的方法來解決部分上述問題。PCA的思想是將n維特徵對映到k維上(k<n),這k維是全新的正交特徵。這k維特徵稱為主元,是重新構造出來的k維特徵,而不是簡單地從n維特徵中去除其餘n-k維特徵。

2. PCA計算過程

     首先介紹PCA的計算過程:

     假設我們得到的2維資料如下:

     clip_image001[4]

     行代表了樣例,列代表特徵,這裡有10個樣例,每個樣例兩個特徵。可以這樣認為,有10篇文件,x是10篇文件中“learn”出現的TF-IDF,y是10篇文件中“study”出現的TF-IDF。也可以認為有10輛汽車,x是千米/小時的速度,y是英里/小時的速度,等等。

     第一步分別求x和y的平均值,然後對於所有的樣例,都減去對應的均值。這裡x的均值是1.81,y的均值是1.91,那麼一個樣例減去均值後即為(0.69,0.49),得到

     clip_image002[4]

     第二步,求特徵協方差矩陣,如果資料是3維,那麼協方差矩陣是

     clip_image003[4]

     這裡只有x和y,求解得

     clip_image004[4]

     對角線上分別是x和y的方差,非對角線上是協方差。協方差大於0表示x和y若有一個增,另一個也增;小於0表示一個增,一個減;協方差為0時,兩者獨立。協方差絕對值越大,兩者對彼此的影響越大,反之越小。

     第三步,求協方差的特徵值和特徵向量,得到

     clip_image005[4]

     上面是兩個特徵值,下面是對應的特徵向量,特徵值0.0490833989對應特徵向量為clip_image007[4],這裡的特徵向量都歸一化為單位向量。

    第四步,將特徵值按照從大到小的順序排序,選擇其中最大的k個,然後將其對應的k個特徵向量分別作為列向量組成特徵向量矩陣。

     這裡特徵值只有兩個,我們選擇其中最大的那個,這裡是1.28402771,對應的特徵向量是clip_image009[6]

     第五步,將樣本點投影到選取的特徵向量上。假設樣例數為m,特徵數為n,減去均值後的樣本矩陣為DataAdjust(m*n),協方差矩陣是n*n,選取的k個特徵向量組成的矩陣為EigenVectors(n*k)。那麼投影后的資料FinalData為

     clip_image011[4]

     這裡是

     FinalData(10*1) = DataAdjust(10*2矩陣)×特徵向量clip_image009[7]

     得到結果是

     clip_image012[4]

     這樣,就將原始樣例的n維特徵變成了k維,這k維就是原始特徵在k維上的投影。

     上面的資料可以認為是learn和study特徵融合為一個新的特徵叫做LS特徵,該特徵基本上代表了這兩個特徵。

     上述過程有個圖描述:

     clip_image013[4]

     正號表示預處理後的樣本點,斜著的兩條線就分別是正交的特徵向量(由於協方差矩陣是對稱的,因此其特徵向量正交),最後一步的矩陣乘法就是將原始樣本點分別往特徵向量對應的軸上做投影。

     如果取的k=2,那麼結果是

     clip_image014[4]

     這就是經過PCA處理後的樣本資料,水平軸(上面舉例為LS特徵)基本上可以代表全部樣本點。整個過程看起來就像將座標系做了旋轉,當然二維可以圖形化表示,高維就不行了。上面的如果k=1,那麼只會留下這裡的水平軸,軸上是所有點在該軸的投影。

     這樣PCA的過程基本結束。在第一步減均值之後,其實應該還有一步對特徵做方差歸一化。比如一個特徵是汽車速度(0到100),一個是汽車的座位數(2到6),顯然第二個的方差比第一個小。因此,如果樣本特徵中存在這種情況,那麼在第一步之後,求每個特徵的標準差clip_image016[6],然後對每個樣例在該特徵下的資料除以clip_image016[7]

     歸納一下,使用我們之前熟悉的表示方法,在求協方差之前的步驟是:

     clip_image017[4]

     其中clip_image019[6]是樣例,共m個,每個樣例n個特徵,也就是說clip_image019[7]是n維向量。clip_image021[4]是第i個樣例的第j個特徵。clip_image023[4]是樣例均值。clip_image025[4]是第j個特徵的標準差。

     整個PCA過程貌似及其簡單,就是求協方差的特徵值和特徵向量,然後做資料轉換。但是有沒有覺得很神奇,為什麼求協方差的特徵向量就是最理想的k維向量?其背後隱藏的意義是什麼?整個PCA的意義是什麼?

3. PCA理論基礎

     要解釋為什麼協方差矩陣的特徵向量就是k維理想特徵,我看到的有三個理論:分別是最大方差理論、最小錯誤理論和座標軸相關度理論。這裡簡單探討前兩種,最後一種在討論PCA意義時簡單概述。

3.1 最大方差理論

     在訊號處理中認為訊號具有較大的方差,噪聲有較小的方差,信噪比就是訊號與噪聲的方差比,越大越好。如前面的圖,樣本在橫軸上的投影方差較大,在縱軸上的投影方差較小,那麼認為縱軸上的投影是由噪聲引起的。

因此我們認為,最好的k維特徵是將n維樣本點轉換為k維後,每一維上的樣本方差都很大。

     比如下圖有5個樣本點:(已經做過預處理,均值為0,特徵方差歸一)

     clip_image026[4]

     下面將樣本投影到某一維上,這裡用一條過原點的直線表示(前處理的過程實質是將原點移到樣本點的中心點)。

     clip_image028[4]

     假設我們選擇兩條不同的直線做投影,那麼左右兩條中哪個好呢?根據我們之前的方差最大化理論,左邊的好,因為投影后的樣本點之間方差最大。

     這裡先解釋一下投影的概念:

     QQ截圖未命名

     紅色點表示樣例clip_image037[14],藍色點表示clip_image037[15]在u上的投影,u是直線的斜率也是直線的方向向量,而且是單位向量。藍色點是clip_image037[16]在u上的投影點,離原點的距離是clip_image039[4](即clip_image030[4]或者clip_image041[4])由於這些樣本點(樣例)的每一維特徵均值都為0,因此投影到u上的樣本點(只有一個到原點的距離值)的均值仍然是0。

     回到上面左右圖中的左圖,我們要求的是最佳的u,使得投影后的樣本點方差最大。

     由於投影后均值為0,因此方差為:

     clip_image042[4]

     中間那部分很熟悉啊,不就是樣本特徵的協方差矩陣麼(clip_image037[17]的均值為0,一般協方差矩陣都除以m-1,這裡用m)。

     用clip_image044[10]來表示clip_image046[4]clip_image048[6]表示clip_image050[4],那麼上式寫作

     clip_image052[4]

     由於u是單位向量,即clip_image054[4],上式兩邊都左乘u得,clip_image056[4]

     即clip_image058[4]

     We got it!clip_image044[11]就是clip_image048[7]的特徵值,u是特徵向量。最佳的投影直線是特徵值clip_image044[12]最大時對應的特徵向量,其次是clip_image044[13]第二大對應的特徵向量,依次類推。

     因此,我們只需要對協方差矩陣進行特徵值分解,得到的前k大特徵值對應的特徵向量就是最佳的k維新特徵,而且這k維新特徵是正交的。得到前k個u以後,樣例clip_image037[18]通過以下變換可以得到新的樣本。

     clip_image059[4]

     其中的第j維就是clip_image037[19]clip_image061[4]上的投影。

     通過選取最大的k個u,使得方差較小的特徵(如噪聲)被丟棄。

最小平方誤差理論:

clip_image001

     假設有這樣的二維樣本點(紅色點),回顧我們前面探討的是求一條直線,使得樣本點投影到直線上的點的方差最大。本質是求直線,那麼度量直線求的好不好,不僅僅只有方差最大化的方法。再回想我們最開始學習的線性迴歸等,目的也是求一個線性函式使得直線能夠最佳擬合樣本點,那麼我們能不能認為最佳的直線就是迴歸後的直線呢?迴歸時我們的最小二乘法度量的是樣本點到直線的座標軸距離。比如這個問題中,特徵是x,類標籤是y。迴歸時最小二乘法度量的是距離d。如果使用迴歸方法來度量最佳直線,那麼就是直接在原始樣本上做迴歸了,跟特徵選擇就沒什麼關係了。

     因此,我們打算選用另外一種評價直線好壞的方法,使用點到直線的距離d’來度量。

     現在有n個樣本點clip_image003,每個樣本點為m維(這節內容中使用的符號與上面的不太一致,需要重新理解符號的意義)。將樣本點clip_image005在直線上的投影記為clip_image007,那麼我們就是要最小化

clip_image009

     這個公式稱作最小平方誤差(Least Squared Error)。

     而確定一條直線,一般只需要確定一個點,並且確定方向即可。

     第一步確定點:

     假設要在空間中找一點clip_image011來代表這n個樣本點,“代表”這個詞不是量化的,因此要量化的話,我們就是要找一個m維的點clip_image011[1],使得

clip_image012

     最小。其中clip_image014是平方錯誤評價函式(squared-error criterion function),假設m為n個樣本點的均值:

clip_image015

     那麼平方錯誤可以寫作:

clip_image017

     後項與clip_image019無關,看做常量,而clip_image021,因此最小化clip_image014[1]時,

clip_image023

clip_image019[1]是樣本點均值。

     第二步確定方向:

     我們從clip_image019[2]拉出要求的直線(這條直線要過點m),假設直線的方向是單位向量e。那麼直線上任意一點,比如clip_image007[1]就可以用點me來表示

clip_image025

     其中clip_image027clip_image029到點m的距離。

     我們重新定義最小平方誤差:

clip_image030

     這裡的k只是相當於iclip_image032就是最小平方誤差函式,其中的未知引數是clip_image034e

     實際上是求clip_image032[1]的最小值。首先將上式展開:

clip_image036

     我們首先固定e,將其看做是常量,clip_image038,然後對clip_image027[1]進行求導,得

clip_image039

     這個結果意思是說,如果知道了e,那麼將clip_image041e做內積,就可以知道了clip_image043e上的投影離m的長度距離,不過這個結果不用求都知道。

     然後是固定clip_image027[2],對e求偏導數,我們先將公式(8)代入clip_image032[2],得

clip_image044

相關推薦

成分分析PCA-大方解釋

我閱讀了PCA、SVD和LDA。這幾個模型相近,卻都有自己的特點。本篇打算先介紹PCA,至於他們之間的關係,只能是邊學邊體會了。PCA以前也叫做Principal factor analysis。 1. 問題      真實的訓練資料總是存在各種各樣的問題: 1、

成分分析PCA原理詳解轉載

增加 信息 什麽 之前 repl 神奇 cto gmail 協方差 一、PCA簡介 1. 相關背景 上完陳恩紅老師的《機器學習與知識發現》和季海波老師的《矩陣代數》兩門課之後,頗有體會。最近在做主成分分析和奇異值分解方面的項目,所以記錄一下心得體會。

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

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

【原始碼】成分分析PCA與獨立分量分析ICAMATLAB工具箱

本MATLAB工具箱包含PCA和ICA實現的多個函式,並且包括多個演示示例。 在主成分分析中,多維資料被投影到最大奇異值相對應的奇異向量上,該操作有效地將輸入訊號分解成在資料中最大方差方向上的正交分量。因此,PCA常用於維數降低的應用中,通過執行PCA產生資料的低維表示,同時,該低維表

成分分析PCA詳細講解

介紹 主成分分析(Principal Component Analysis,PCA)是一種常用的資料降維演算法,可以將高維度的資料降到低維度,並且保留原始資料中最重要的一些特徵,同時去除噪聲和部分關聯特徵,從而提高資料的處理效率,降低時間成本。 資料降維優點: 低維資

成分分析PCA原理詳解

1. 問題      真實的訓練資料總是存在各種各樣的問題: 1、 比如拿到一個汽車的樣本,裡面既有以“千米/每小時”度量的最大速度特徵,也有“英里/小時”的最大速度特徵,顯然這兩個特徵有一個多餘。 2、 拿到一個數學系的本科生期末考試成績單,裡面有三列,一列是對數學的

成分分析PCA在壓縮影象方面的應用

一、主成分分析的原理主成分分析能夠通過提取資料的主要成分,減少資料的特徵,達到資料降維的目的。具體的原理可參見之前寫的關於PCA原理的一篇文章:二、使用matlab模擬實現%% 利用PCA對影象壓縮 close all clear all clc %% 輸入 In = i

Machine Learning第八講【非監督學習】--成分分析PCA

一、Principal Component Analysis Problem Formulation(主成分分析構思) 首先來看一下PCA的基本原理: PCA會選擇投影誤差最小的一條線,由圖中可以看出,當這條線是我們所求時,投影誤差比較小,而投影誤差比較大時,一定是這條線偏離最優直線。

使用成分分析PCA方法對資料進行降維

我們知道當資料維度太大時,進行分類任務時會花費大量時間,因此需要進行資料降維,其中一種非常流行的降維方法叫主成分分析。 Exploratory Data Analysis 鳶尾花資料集: import numpy as np from skle

機器學習實戰學習筆記5——成分分析PCA

1.PCA演算法概述 1.1 PCA演算法介紹 主成分分析(Principal Component Analysis)是一種用正交變換的方法將一個可能相關變數的觀察值集合轉換成一個線性無關變數值集合的統計過程,被稱為主成分。主成分的數目小於或等於原始

成分分析PCA-理論基礎

要解釋為什麼協方差矩陣的特徵向量可以將原始特徵對映到 k 維理想特徵,我看到的有三個理論:分別是最大方差理論、最小錯誤理論和座標軸相關度理論。這裡簡單探討前兩種,最後一種在討論PCA 意義時簡單概述。 最大方差理論 在訊號處理中認為訊號具有較大的方差

成分分析PCA的線性代數推導過程

【摘自Ian Goodfellow 《DEEP LEANRNING》一書。覺得寫得挺清楚,儲存下來學習參考使用。】 主成分分析(principal components analysis, PCA)是一個簡單的機器學習演算法,可以通過基礎的線性代數知識推導。 假設在n維的R空間中我們有 m

成分分析PCA演算法做人臉識別

詳細資料可以參考https://www.cnblogs.com/xingshansi/p/6445625.html一、概念主成分分析(PCA)是一種統計方法。通過正交變換將一組可能存在相關性的變數轉化為一組線性不相關的變數,轉換後的這組變數叫主成分。二、思想PCA的思想是將n

成分分析pca演算法原理

影象處理中對很多副圖片提取特徵時,由於特徵的維數過高而影響程式的效率,所以用到pca進行特徵降維。 那怎樣才能降低維數呢?它又用到了什麼數學方法呢? 1.協方差矩陣         假設有一個樣本集X,裡面有N個樣本,每個樣本的維度為d。即: 將這些樣本組織成樣本矩陣形

成分分析pca演算法的實現步驟及程式碼

%%%%%%%%%%%%開啟一個30行8列資料的txt檔案%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% %第一步:輸入樣本矩陣%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% filename='src.txt'; fid=fopen(filename,'

成分分析PCA與Kernel PCA

本部落格在之前的文章【1】中曾經介紹過PCA在影象壓縮中的應用。其基本思想就是設法提取資料的主成分(或者說是主要資訊),然後摒棄冗餘資訊(或次要資訊),從而達到壓縮的目的。本文將從更深的層次上討論PCA

機器學習十三:CS229ML課程筆記9——因子分析成分分析PCA、獨立成分分析ICA

1.因子分析:高維樣本點實際上是由低維樣本點經過高斯分佈、線性變換、誤差擾動生成的,因子分析是一種資料簡化技術,是一種資料的降維方法,可以從原始高維資料中,挖掘出仍然能表現眾多原始變數主要資訊的低維資料。是基於一種概率模型,使用EM演算法來估計引數。因子分析,是分析屬性們的公

深入學習成分分析PCA演算法原理及其Python實現

一:引入問題   首先看一個表格,下表是某些學生的語文,數學,物理,化學成績統計:   首先,假設這些科目成績不相關,也就是說某一科目考多少分與其他科目沒有關係,那麼如何判斷三個學生的優秀程度呢?首先我們一眼就能看出來,數學,物理,化學這三門課的成績構成了這組資料的主成分(很顯然,數學作為第一主成分,

對KLT,成分分析PCA演算法的理解

1 #include "pcaface.h" 2 #include "ui_pcaface.h" 3 #include <QString> 4 #include <iostream> 5 #include <stdio.h> 6 7 usi

成分分析PCA原理總結

    主成分分析(Principal components analysis,以下簡稱PCA)是最重要的降維方法之一。在資料壓縮消除冗餘和資料噪音消除等領域都有廣泛的應用。一般我們提到降維最容易想到的演算法就是PCA,下面我們就對PCA的原理做一個總結。 1. PCA的思想     PCA顧名思義,就是找出