對於PCA或者SVD在降維來說,是去去除了相似性高的列?還是去掉信息量少的列?

對於模型的訓練,我們為了避免過擬合,或者為了減少訓練的時間,會採用降維來解決這些問題。

對於降維的原理,可以理解為,在保證不丟失更多信息的同時,降低數據的維度,那麼這個「不丟失信息」可以從特徵值和特徵向量的角度進行解釋,選擇特徵值大的特徵將向量集合來作為新的坐標系。

當我們去掉一些「信息的時候」就是去掉原數據的幾個變化不明顯的維度,或者說方差小的特徵向量。對於PCA來說,我們分解協方差矩陣,選擇與原數據正相關性高的K個維度作為新的坐標系,SVD的原理也類似,區別只在於求X*Xt (矩陣X的轉置)的特徵向量矩陣。

但是,我查看了一些對於PCA或者SVD的文章,很多人從相似性的角度去解釋,我十分不能理解,比如說,用SVD來降維,就是去掉(合併)了一些相似的列?


一點拙見。。。

首先需要明確的是,「去掉」和「合併」是兩個有區別的概念。對於Collinerity(有關collinerity的解釋,Quora上有著一些角度不錯的觀點In multiple regression, why do correlated covariates (independent variables) lead to larger errors in the estimated regression parameters?)來說,這兩個操作會造成的結果有可能有著天壤之別。。。 舉個例子,向量X_{1} 有著一系列的取值,取向量e為一系列的微小值(與X_{1}中的取值完全無關)並定義向量 X_{2}=X_{1}+eX_{2}X_{1}有著高度的相關性. 令Y=e,那在以Y作為回歸目標的回歸問題中會發現將X_1X_2中的任意一個單獨作為回歸問題的自變數都與Y沒有顯著的關係,而在X_1X_2共同參與的回歸下卻有著高度的關聯性(Y=X_2-X_1)因此,倘若在feature中去掉「去掉」 X_1或者X_2
中的任何一個,你都會丟失近乎所有和Y有關的信息,進而使模型失去推斷能力。 而合併則不會。

對於PCA和SVD本身(這兩者原理上相似)來說,它們都負責給出一系列的特徵向量排序,在原特徵空間上以varience最大化不相關性為原則尋找並排序新的特徵向量作為特徵軸,而去掉的是Varience比較少的特徵向量(這些向量對應的特徵值可能非常小甚至近乎等於零,這代表了它們有著很大的Variance inflation factor,是冗餘的)。所以從我的角度上理解來說,PCA/SVD是「合併相似性高並且有助於區分樣本的列」和去掉「信息量少的特徵向量(這些特徵向量有可能包括那種純粹冗餘的feature,以及完全無關的feature)」藉以達成降維的目的(因為每個特徵向量都是「linear combination of original features"),並不是單純的「去除了相似性高的列」或是「去掉信息量少的列」這樣的解釋。(粗體部分是根本性的特徵,同時對劃橫線的部分持保留態度,PCA對於特徵向量的捨棄如果不當,同樣存在丟失掉同因變數高度相關的特徵向量的可能性)

同時,之前也解釋過了,看似完全無關的feature(如X_1)有可能僅僅是因為沒有找到對應的X_2,這就是數據收集,處理和特徵提取部分的問題了,遇見這種失誤PCA/SVD也幫不了忙,因為現有特徵集中根本就是缺失了這部分信息。

想到什麼再補充吧~

一時興起回答,可能會有一些說的不對或者有待討論的地方也請指正。


個人理解他並沒有去掉,而是去找一些重要的成分。我們把現有的數據當做一些基的組合,我們的目標就是去找這些基,具體可以參考下:

理解PCA和SVD


即去掉了一些相似性的列,又去掉了一些信息量少的列。

比如把3個特徵向量變成了一個特徵向量,3個特徵向量的共線,相關性高,相似性高,而獲得的新的特徵向量跟其他的新的特徵向量是正交的,相關性弱一些,老的向量用新的向量來表示了。

降維是你指定的維度,如果只取前面幾個主分面,主特徵,那當然去掉了一些信息量少的特徵及雜訊特徵,並不矛盾。


將多成分轉換成少數幾個綜合成分,原始的成分是通過載荷因子映射到綜合成分上。並不是去掉哪些成分,留下哪些成分。我剛開始學的時候,也是自己想像說去掉多餘,留下重要的。但是,你看看PCA的計算方法就可以知道。以下是手工計算的代碼,具體的數學推導過程,你網上可以查查。

這裡是R的計算過程:

# 學生體型主成分分析
# X1 : 身高 X2 : 體重 X3 : 胸圍 X4 : 坐高
student &<- data.frame( X1 = c(148, 139, 160, 149, 159, 142, 153, 150, 151, 139, 140, 161, 158, 140, 137, 152, 149, 145, 160, 156, 151, 147, 157, 147, 157, 151, 144, 141, 139, 148), X2 = c(41, 34, 49, 36, 45, 31, 43, 43, 42, 31, 29, 47, 49, 33, 31, 35, 47, 35, 47, 44, 42, 38, 39, 30, 48, 36, 36, 30, 32, 38), X3 = c(72, 71, 77, 67, 80, 66, 76, 77, 77, 68, 64, 78, 78, 67, 66, 73, 82, 70, 74, 78, 73, 73, 68, 65, 80, 74, 68, 67, 68, 70), X4 = c(78, 76, 86, 79, 86, 76, 83, 79, 80, 74, 74, 84, 83, 77, 73, 79, 79, 77, 87, 85, 82, 78, 80, 75, 88, 80, 76, 76, 73, 78) ) # 手工計算 # 1. 計算協方差 (student.cov &<- cov(student)) # 2. 計算協方差的特徵向量和特徵值 student.eigen &<- eigen(student.cov) # 特徵值 student.eigen$values # 特徵向量 student.eigen$vectors # 3. 計算方差貢獻率和累積貢獻率 (student.pov &<- (student.eigen$values/sum(student.eigen$values))) (student.cp &<- cumsum(student.pov)) # 4. 主成分的標準方差 (student.z &<- sqrt(student.eigen$values))

希望能幫助理解!你也可以使用R內置的函數,princomp,直接可以得出結果。


推薦閱讀:

Logistic回歸的檢驗方法有哪些?R中有比較完備的處理logit回歸的包嗎?
關於GBDT的幾個不理解的地方?
GBDT預測時每一棵樹是否能並行?
如何評價中山大學鄭子彬教授?
如何求出libsvm中每個樣本點到超平面的歐式距離?

TAG:機器學習 | PrincipalComponentAnalysis | 奇異值分解 |