對於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?)來說,這兩個操作會造成的結果有可能有著天壤之別。。。 舉個例子,向量 有著一系列的取值,取向量為一系列的微小值(與中的取值完全無關)並定義向量 則與有著高度的相關性. 令,那在以作為回歸目標的回歸問題中會發現將或中的任意一個單獨作為回歸問題的自變數都與沒有顯著的關係,而在與共同參與的回歸下卻有著高度的關聯性()因此,倘若在feature中去掉「去掉」 或者中的任何一個,你都會丟失近乎所有和有關的信息,進而使模型失去推斷能力。 而合併則不會。
對於PCA和SVD本身(這兩者原理上相似)來說,它們都負責給出一系列的特徵向量排序,在原特徵空間上以varience最大化和不相關性為原則尋找並排序新的特徵向量作為特徵軸,而去掉的是Varience比較少的特徵向量(這些向量對應的特徵值可能非常小甚至近乎等於零,這代表了它們有著很大的Variance inflation factor,是冗餘的)。所以從我的角度上理解來說,PCA/SVD是「合併相似性高並且有助於區分樣本的列」和去掉「信息量少的特徵向量(這些特徵向量有可能包括那種純粹冗餘的feature,以及完全無關的feature)」藉以達成降維的目的(因為每個特徵向量都是「linear combination of original features"),並不是單純的「去除了相似性高的列」或是「去掉信息量少的列」這樣的解釋。(粗體部分是根本性的特徵,同時對劃橫線的部分持保留態度,PCA對於特徵向量的捨棄如果不當,同樣存在丟失掉同因變數高度相關的特徵向量的可能性)
同時,之前也解釋過了,看似完全無關的feature(如)有可能僅僅是因為沒有找到對應的,這就是數據收集,處理和特徵提取部分的問題了,遇見這種失誤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 | 奇異值分解 |