(文末有贈書福利)
在數據挖掘項目中,經常會遇到的情況是有很多特征可以用,這是一件好事,但是有的時候數據中存在很多冗余情況,也就是說數據存在相關性或者共線性。在這種情況下對于分析帶來了很多麻煩。不必要的特征太多會造成模型的過于復雜,共線性相關性會造成模型的不穩定,即數據微小的變化會造成模型結果很大的變化。主成分分析是解決這種問題的一個工具。
一、概述
主成分分析簡稱PCA,PCA是一個很好的預處理工具,用于挑選最相關的變量線性組合,并在我們的預測模型中使用它們。PCA幫助我們找出解釋數據中變化最大的變量。PCA也是解決數據間存在共線性問題的一種方式。
PCA的唯一缺點是它以無監督的方式生成主成分,也就是與數據的標簽沒有任何關系。如果最終的目的是構建模型的話,選出來的主成分不一定對于標簽或者說因變量有很好的預測能力。在本章節會介紹PCA的一些基本概念,并且使用R語言進行實現。
1. 維度相關的問題
有兩個因素會使得數據的維度變得非常高。首先,具有不同級別的分類變量,其次是數據集中的冗余變量。當我們在建模中包含分類變量時,我們使用虛擬變量,并且分類變量中的級別數越多,我們創建的虛擬變量就越多,這會增加維度。冗余變量代表數據集中的信息不夠精簡,多個特征描述了同一信息,例如,數據集中有三個特征,收益,成本,利潤率,這三個特征就存在冗余,因為第三個特征是通過前兩個特征生成的,因此可以刪除掉冗余特征。
多重共線性(共線性)可以定義為回歸模型中的兩個或更多個變量高度相關的現象,這意味著,模型數據中存在一定的冗余。
變量之間存在冗余變量和多重共線性可以以多種方式影響變量的分析,其中一些在下面例子:
? 破壞參數估計的穩定性。
? 混淆模型解釋。
? 增加過度擬合的風險。
? 增加計算時間。
輸入數據的微小變化(如刪除或添加單個變量)會導致模型發生較大變化,甚至導致參數符號更改。此外,多重共線性的存在增加了系數估計的方差或標準誤差,使其對微小變化敏感,從而導致解釋困難。
當我們討論數據集的最佳回歸模型時,這意味著模型會考慮預測變量,其中每個預測變量與目標/因變量相關,但相互之間幾乎沒有關聯。這種模型被稱為低噪聲模型,具有很強的魯棒性。如果變量本身之間的相關性很高,并且我們在訓練數據集上獲得了很高的預測能力,那么我們可能無法實現在測試數據集上相同。
2.檢測多重共線性
在了解了多重共線性如何影響我們的分析和模型的預測能力之后,學習如何檢測數據中多重共線性的存在非常重要。
以下方法可用于檢測多重共線性:
? R平方值很大,但沒有β重量統計上顯著的,即整體模型的F檢驗是顯著的,但個體系數估計的t檢驗不是。
? 變量對之間的相關性很大。
? 差異通貨膨脹因素。
3. 方差膨脹因子
在檢測多重共線性時提到的一點是,變量對之間的相關性很大,但有時只關注預測變量對之間的相關性可能是一個限制因素。
成對相關可能很小,但三個或更多變量之間存在線性相關。例如,X1,X2和X3之間的關系由線性方程定義,例如:X3 = 3X1 + 4X2 +Error。對于這種情況,我們使用方差膨脹因子。
VIF衡量估計回歸系數的方差,可以通過模型中預測變量之間相關性的存在來夸大。如果VIF的值> 10,則表明變量之間存在一些嚴重的相關性。
我們不會討論VIF的數學推導。VIF的公式為:
預測變量“k”的VIF是通過對剩余預測變量上的第k個變量進行回歸來計算R平方值而獲得的。
多重共線性與高緯度的補救措施包括如下:
? 檢查其中一個變量是否重復。
? 刪除冗余變量。
? 通過收集更多數據來增加樣本量。
? 平均中心預測變量。
? 預測變量的標準化 - 如果均值中心沒有影響。
? 主成分分析,嶺回歸,偏最小二乘回歸。
在本文檔中,我們將借助示例討論主成分分析。
二、主成分分析詳解
PCA也稱為特征縮減或特征提取PCA使用數據集中已存在的許多功能創建新功能。在PCA中,不是直接在解釋變量上回歸因變量,而是將解釋變量的主成分用作回歸量。人們通常只使用所有主成分的子集進行回歸,從而使PCR成為一種正則化程序。通常選擇具有較高方差的主要成分作為回歸量。
PCA的一個主要用途在于克服多重共線性問題。PCA可以通過在回歸步驟中排除一些低方差主成分來恰當地處理這種情況。此外,通過僅對所有主成分的子集進行回歸,PCR可以通過顯著降低表征基礎模型的參數的有效數量來減少尺寸。
1. 主成分分析的定義
假設,最初在您的模型中有p個預測變量,每個都有n條記錄。所以,數據矩陣如下所示:
2. 主成分分析的簡單原理
假設在最后一步中生成的個新變量是它背后有兩個條件,
? 新變量將是不相關的(或正交的)。
? 最大的變化將沿著,第二大變化將沿著,第三大變化將沿著,依此類推。
3. 主成分分析的算法
三、使用R語言進行主成分分析
在R中有很多方法可以實現主成分分析,基礎的函數,psych包中的函數都可以構建主成分分析。在進行主成分分析之前,需要判斷是需要選取多少個主成分。判斷的準則有很多用r軟件做主成分分析,包括:
? 根據經驗或者理論知識進行判斷主成分個數。
? 根據解釋變量方差的積累值的閾值來判斷保留的主成分個數。
? 通過變量間的關系矩陣來判斷需要保留的主成分個數。
? 基于特征值進行判斷,根據-準則建議保存特質大于1的主成分。
? 使用 碎石圖進行判斷,碎石圖繪制了特征值與主成分數量,這類圖可以清晰的展示特征值與主成分數之間的關系,圖形變化最大之前的主成分都可以保留。
? 平行分析法,其原理是模擬一個與原數據集相同大小的矩陣來判斷提取的特征值,若真實的某個特征值大于隨機數據矩陣的平均特征值,則可以保留。
利用psych包中的fa.函數可以對,特征值大于1,碎石檢驗,平行分析三種準則進行評價。所使用到的數據集是psych包中自帶的一個數據集,。使用fa.構建碎石圖的參數是需要進行主成分分析的數據集。碎石圖的結果如圖5.1所示。
(psych)
fa.()
## in fa.(): It seems as if you are using a
## , but have not the of cases. The
## of is set to be 100
## that the of = 3 and the of = 1
圖1碎石圖的結果給出了三種準則的評判結果,從結果中可以發現,特征值大于1的特征包含三個;碎石圖的曲線從第一個特征到第二個特征之間有急劇的變化,因此,選取第一個主成分;根據平行分析法用r軟件做主成分分析,有一個特征大于隨機矩陣的特征,總而言之,選取一個主成分最合適。
1. 主成分分析的實現
使用函數和psych包的函數都可以實現主成分分析。對于而言,傳入需要進行主成分分析的原始數據即可得到主成分分析的結果:
com
com
## (1, .., p=9):
## [1] 4.-01 3.-01 1.-01 1.-01 1.-01
## [6] 1.-01 8.-02 5.-02 5.-17
##
## (n x k) = (9 x 9):
## PC1 PC2 PC3 PC4
## -0. 0. 0. -0.
## -0. 0. 0. -0.
## Sent. -0. 0. 0. -0.
## First. 0. 0. 0. 0.
## Four..Words 0. 0. 0. 0.
## 0. 0. -0. -0.
## . 0. -0. 0. 0.
## -0. -0. -0. 0.
## .Group 0. -0. 0. -0.
## PC5 PC6 PC7 PC8
## 0. -0. 0. -0.
## 0. -0. 0. 0.
## Sent. -0. 0. -0. 0.
## First. 0. 0. 0. -0.
## Four..Words -0. -0. -0. 0.
## 0. -0. 0. 0.
## . 0. 0. -0. 0.
## -0. 0. 0. 0.
## .Group -0. 0. 0. 0.
## PC9
## 0.
## 0.
## Sent. 0.
## First. 0.
## Four..Words 0.
## 0.
## . 0.
## 0.
## .Group 0.
從結果中,得到了所有的主成分,然后根據之前的判斷的主成分個數,選取相應的主成分,即可得到所要的結果。
另外一種方式是使用進行主成分分析,其可以通過原始數據矩陣或者相關系數矩陣進行主成分分析,其主要的參數如下:
? r:原始數據矩陣或者相關系數矩陣。
? :選取的主成分個數,默認為1。
然后,使用第二種方式進行主成分分析:
com
com
##
## Call: (r = , = 1)
## ( ) based upon
## PC1 h2 u2 com
## 0.82 0.67 0.33 1
## 0.84 0.70 0.30 1
## Sent. 0.80 0.65 0.35 1
## First. 0.72 0.52 0.48 1
## Four..Words 0.71 0.51 0.49 1
## 0.67 0.45 0.55 1
## . 0.67 0.45 0.55 1
## 0.70 0.50 0.50 1
## .Group 0.64 0.41 0.59 1
##
## PC1
## SS 4.85
## Var 0.54
##
## Mean item = 1
## Test of the that 1 is .
##
## The root mean of the (RMSR) is 0.12
##
## Fit based upon off = 0.94
接下來分析結果,PC1欄是成分荷載(),表示的是觀測變量與主成分的相關系數,如果不止提取一個主成分,那么會有PC2欄,或者PC3欄目。成分荷載可以用來解釋成分的含義,從結果中可以看出,PC1與所有的變量都非常相關,因此,這個主成分是可以用來進行一般性評價的緯度。h2是公因子方差,表示主成分對于每一個變量的解釋程度。u2表示唯一性,指的是變量無法被主成分解釋的部分。 包含了與主成分相關聯的特征值。 Var表示每個主成分對整個數據集的解釋程度。從結果中可以看出,第一個主成分解釋了所有變量54%的方差。
2. 主成分分析案例
在這里,這個例子將使用數據,該數據包含四個連續變量和50條記錄。首先創建一個散點圖矩陣來檢查變量之間的關系,首先加載數據集,用于查看數據的結構,apply函數的使用方式類似于for循環,只是其效率更高,apply(,2,mean)表示計算每一列的均值,apply的第一個參數需要處理的數據集,第二個參數用于指定是對行進行處理還是對列進行處理,2表示對列進行處理,第三個參數用于指定使用函數進行處理。
data( "")
head(,3)
## Rape
## 13.2 236 58 21.2
## 10.0 263 48 44.5
## 8.1 294 80 31.0
(dplyr)
# the of the data
()
## : 50
## : 4
## $ 13.2, 10.0, 8.1, 8.8, 9.0, 7.9, 3.3, 5.9, 15.4, 17.4, 5…
## $ 236, 263, 294, 190, 276, 204, 110, 238, 335, 211, 46, 1…
## $ 58, 48, 80, 50, 91, 78, 77, 72, 80, 60, 83, 54, 83, 65,…
## $ Rape 21.2, 44.5, 31.0, 19.5, 40.6, 38.7, 11.1, 15.8, 31.9, 2…
apply(,2,mean)
## Rape
## 7.788 170.760 65.540 21.232
apply(,2,var) #
## Rape
## 18.97047 6945.16571 209.51878 87.72916
每個變量的方差都有很大差異。在PCA中,平均值不起作用,但方差在定義PC中起主要
(x)
{
((x - mean(x))/sd(x))
}
#
%
apply(2, ) %>%
as.data.frame
接下來對數據進行探索性分析,分析特征的分布以及特征之間的一個相關性,這里使用的是的函數,其可以繪制出特征的分布圖,特征之間的散點圖,以及特征的相關系數。的第一個參數是數據集,第二個參數是用于指定選擇哪些變量進行繪圖。特征相關性結果如圖2所示。
()
## :
##
## : ''
## The are from ':psych':
##
## %+%, alpha
##
## : ''
## The is from ':dplyr':
##
## nasa
(data = ,
= 1:4, = F)
從圖2看出,與,與Rape,與Rape,與Rape都是高度相關的。因此,數據存在比較嚴重的共線性問題。然后判斷主成分個數,結果的碎石圖如圖3所示。
fa.()
## that the of = 2 and the of = 1
從碎石圖來看,可以選取一個主成分。
然后分別使用進行主成分分析:
pca.out
pca.out
## (1, .., p=4):
## [1] 1. 0. 0. 0.
##
## (n x k) = (4 x 4):
## PC1 PC2 PC3 PC4
## -0. 0. -0. 0.
## -0. 0. -0. -0.
## -0. -0. -0. 0.
## Rape -0. -0. 0. 0.
(pca.out)
## of :
## PC1 PC2 PC3 PC4
## 1.5749 0.9949 0.59713 0.41645
## of 0.6201 0.2474 0.08914 0.04336
## 0.6201 0.8675 0.95664 1.00000
現在我們可以看到最大的方差百分比由PC1解釋,并且所有的PC都是相互不相關的。大約62%的方差由PC1解釋,從這個結果同樣可以判斷,選取一個主成分即可。
讓我們建立一個雙重圖來更好地理解,使用繪制雙重圖,的第一個參數是主成分分析的,其他的參數是對圖形細節的調整。主成分分析的雙重圖結果如圖4所示。
(pca.out,scale = 0, cex=0.65)
圖4中,紅色箭頭表示變量,每個方向表示解釋變化最多的方向。可以看到,第二個主成分與所有的變量都非常相關,第一主成分是可以用來描述所有特征的組成分
第二主成分主要與和相關。
四、總結
主成分分析是數據挖掘中比較常用的一種方法,有著廣泛的應用。主成分的要點之一是判斷主成分的個數,畢竟主成分分析最常使用的一個場景是數據的降低維,這種方法可以用一組不相關變量來替代大量相關的變量,進而簡化分析過程,然后介紹了R中主成分分析的實現。
本文選自于清華大學出版社出版的《深入淺出R語言數據分析》一書的小節,略有改動。經出版社授權刊登于此。
今日福利
留言贈書參與方法
分享一下你在學習使用R語言的經驗和感受,活動截止時我們將選擇5名小錦鯉獲得以上書籍。