大家好,很高興可以和大家一起來繼續(xù)學(xué)習(xí)機(jī)器學(xué)習(xí),這幾天時(shí)間,我著重研究了下主成分分析法,不過因?yàn)槠鋽?shù)學(xué)推理實(shí)在有些過于繁瑣和復(fù)雜,我也沒太搞得太清楚,如果在文章當(dāng)中出現(xiàn)了什么錯(cuò)誤,也請(qǐng)各位多多指教.
1:什么是PCA?
主成分分析法是機(jī)器學(xué)習(xí)領(lǐng)域中常用的一種算法,是Pearson在1901年提出的,再后來由hotelling在1933年加以發(fā)展提出的一種多變量的統(tǒng)計(jì)方法.
主成分分析最主要的用途在于“降維”.通過析取主成分顯出的最大的個(gè)別差異,也可以用來削減回歸分析和聚類分析中變量的數(shù)目.
舉個(gè)例子,你要做一項(xiàng)分析,選中了20個(gè)指標(biāo),你覺得都很重要,但是20個(gè)指標(biāo)對(duì)于你的分析確實(shí)太過繁瑣,這時(shí)候,你就可以采用主成分分析的方法進(jìn)行降維.
20個(gè)指標(biāo)之間會(huì)有這樣那樣的相互關(guān)系,相互之間會(huì)有影響,通過主成分分析后,得到4個(gè)或者5個(gè)主成分指標(biāo).此時(shí),這幾個(gè)主成分指標(biāo)既涵蓋了你20個(gè)指標(biāo)中的絕大部分信息,又讓你的分析得到了簡化(從20維降到4、5維),簡化了分析過程,增加了結(jié)果精度.如果在實(shí)際情況中,我們?nèi)绻苡貌怀^3-5個(gè)的成分就可以解釋數(shù)據(jù)變異的80%,這就可以算作為成功.
現(xiàn)在我們用R語言來做一個(gè)相關(guān)的PCA實(shí)例:
首先我們先來介紹下我們下邊將要使用的主成分分析的相關(guān)函數(shù):
1:princomp函數(shù):
做主成分分析最主要的函數(shù)是princomp()函數(shù),使用的格式為:
princomp(formula,data = NULL,subset,na.action,...)
其中formula是沒有響應(yīng)變量的公式,類似于回歸分析和方差分析中但是沒有響應(yīng)的變量.data是數(shù)據(jù)框,類似于回歸分析和方差分析.
2:summary函數(shù):
summary函數(shù)與在回歸分析中的用法相同,其主要的目的就是提取主成分的信息,主要的格式為:
summary(object,loadings = FALSE,cutoff = 0.1,...)
其中object是由princomp()得到的對(duì)象,loadings是邏輯變量,當(dāng)loadings = TRUE時(shí)表示顯示loading中的內(nèi)容,當(dāng)為FALSE時(shí)則不顯示.
3:loadings函數(shù):
loadings()函數(shù)主要顯示主成分分析或者因子分析當(dāng)中的loadings的內(nèi)容,在主成分分析中,實(shí)際上是對(duì)主成分對(duì)應(yīng)的各列,即正交矩陣.在因子分析中,其內(nèi)容就是載荷因子矩陣,loadings()函數(shù)的使用格式為:
loadings(x)
其中x是由函數(shù)princomp()得到的對(duì)象
4:predict函數(shù):
predict()函數(shù)是預(yù)測主成分的值,使用的格式為:
predict(object,newdata,...)
當(dāng)object是由princomp()得到的對(duì)象,newdata是由預(yù)測值構(gòu)成的數(shù)據(jù)框,當(dāng)newdata缺省時(shí),預(yù)測已有數(shù)據(jù)的主成分值
5:screeplot函數(shù)
screeplot()函數(shù)是畫出主成分的碎石圖,主要的格式有:
screeplot(x,npcs = min(10,length(x$sdev)),
type = c("barplot","lines"),
main = deparse(substitute(x)),...)
x princomp()npcs type
其中X是由princomp()得到的對(duì)象,npcs是畫出主成分的個(gè)數(shù),type是描述畫出的碎石圖的的類型,”barplot”是直方圖類型,”lines”是直線圖類型.
6:biplot函數(shù)
biplot()是畫出關(guān)于主成分的散點(diǎn)圖和原坐標(biāo)在主成分下的方向,其中的格式為:
biplot(x,choices = 1:2,scale = 1,pc.biplot = FALSE,...)
其中X是由princomp()得到的對(duì)象,choices是選擇的主成分,缺省值是第一個(gè)第二個(gè)主要成分,pc.biplot是邏輯變量.
現(xiàn)在我們把函數(shù)介紹完了,現(xiàn)在我們開始引用實(shí)例來去解決PCA問題:
在跳樓機(jī)大學(xué)中隨機(jī)抽取某年級(jí)30名學(xué)生,測量其身高X1,體重X2,胸圍X3和坐高X4,其中數(shù)據(jù)如下圖所示,現(xiàn)在對(duì)著30名學(xué)生的身體的四項(xiàng)指標(biāo)做主成分分析

首先,我們先用數(shù)據(jù)框的形式輸入數(shù)據(jù),用princomp()作為主成分分析,我在書上看到推薦使用相關(guān)的矩陣作為主成分分析更加的合理,因此這里選擇的參數(shù)是cor=TRUE,最后用summary()列出主成分分析的值,這里選擇loadings=TRUE,以下是相應(yīng)的程序:

在上述程序中,summary函數(shù)列出了主成分分析的重要信息,Standard deviation行表示的是主成分的標(biāo)準(zhǔn)差,即主成分的方差的開方,也就是想應(yīng)的特征值的開方,proporcrion of Variance行表示的是方差的貢獻(xiàn)率,Cumulative Proportion行表示的是方差的累計(jì)貢獻(xiàn)率
由于summary函數(shù)中的參數(shù)中選取了loadings = true,因此列出的的loading內(nèi)容實(shí)際上就是主成分對(duì)應(yīng)原始變量X1,X2,X3,X4的系數(shù),因此我們可以得到:

因?yàn)榍懊鎯蓚€(gè)的主成分的貢獻(xiàn)率可以達(dá)到了96%,另外的兩個(gè)主成分可以舍去,依次來達(dá)到降維的目的.
第一主成分對(duì)應(yīng)的系數(shù)符號(hào)都相似,其中的數(shù)值都在0.5左右他反應(yīng)了跳樓機(jī)學(xué)生的魁梧程度,身材高大的學(xué)生他的對(duì)應(yīng)的其他的部分尺寸也比較大,因此第一主成分的值就比較小,均為負(fù)值;而身材矮小的學(xué)生,他的其他4部分都比較小.因此第一主成分的絕對(duì)值比較大,我們稱第一主成分為大小因子,第二成分為高度和寬度的差,第二主成分大的可以表明這個(gè)學(xué)生比較瘦高,較小的可以看為”矮胖”.因此把第二主成分看為體型因子.
我們看一下各樣本主成分的值,這個(gè)時(shí)候要使用predict()函數(shù):

從第一主成分看,較小的幾個(gè)值是25號(hào)樣本,3號(hào)樣本和5號(hào)樣本,這說明這結(jié)果學(xué)生身材魁梧,而11,15,29的值比較大,說明這幾個(gè)學(xué)生身材瘦小.
從第二主成分來看,較大的幾個(gè)值是23,19,4號(hào)樣本,說明這幾個(gè)學(xué)生比較瘦比較高,17,8,2號(hào)樣本這樣的就屬于矮胖了.
現(xiàn)在畫出主成分的碎石圖:
screeplot(student.pr,type="lines")

還可以畫出第一主成分和第二主成分的樣本直方圖

好了,這就是這篇文章我想要闡述的一些東西,雖然看起來很簡單,但是實(shí)際上后邊的原理難以搞得一清二楚,接下來一段時(shí)間我將要研究主成分分析的一些應(yīng)用,比如變量分類問題和主成分的回歸問題,雖然這是個(gè)艱難的過程,但我相信其中的樂趣大于這些困難,加油吧!