不知道大家還記不記得前面我們分享 支援向量機(svm)的分析及python實現時說過,當資料遇到線性不可分時,我們可以利用kernel技巧將低維資料對映到高維資料上,從而使得資料線性可分,這是個「公升維」操作。那麼本章我們就來分享個「降維」操作。
眾所周知,降維的目標就是對輸入的資料進行削減,由此剔除資料中的雜訊並提高機器學習方法的效能。那麼為什麼會有降維的操作呢?那是因為高維空間會出現樣本稀疏、距離計算困難等問題,這些被我們稱作「維數災難」。緩解維數災難的乙個重要途徑就是降維了。首先我們來分享第乙個降維演算法pca。
主成分分析(principal component analysis,簡稱pca)是最常用的一種降維方法。我們有乙個假設,即樣本點處於乙個正交屬性空間。存在乙個超平面能夠將這些樣本恰當的表達,同時該超平面還滿足如下性質:
基於這兩個性質我們就能得到兩種等價推導。這裡我們不做推導的詳細說明(詳細過程,請戳:wiki),直接給條件,寫出最後的結論。假定資料樣本進行了中心化,即∑i
xi=0
;再假定投影變換後得到的新座標係為
,其中wi
是標準正交基向量,即||
wi||
2=1,
wtiw
j=0,
i≠j ;最終通過一系列推導會得到: xx
tw=λ
w 於是我們只需對協方差矩陣xx
t 進行特徵值分解,將求得的特徵值排序:λ1
⩾λ2⩾
...⩾
λd,再取前d′
個特徵值對應的特徵向量構成w=
(w1,
w2,.
..,w
d′) 。這就是主成分分析的解。
那麼pca的偽**如下:
def
pca(datamat, topnfeat=9999999):
meanvals = mean(datamat, axis=0)
meanremoved = datamat - meanvals #remove mean
covmat = cov(meanremoved, rowvar=0)
eigvals,eigvects = linalg.eig(mat(covmat))
eigvalind = argsort(eigvals) #sort, sort goes smallest to largest
eigvalind = eigvalind[:-(topnfeat+1):-1] #cut off unwanted dimensions
redeigvects = eigvects[:,eigvalind] #reorganize eig vects largest to smallest
lowddatamat = meanremoved * redeigvects#transform data into new dimensions
reconmat = (lowddatamat * redeigvects.t) + meanvals
return lowddatamat, reconmat
我們採用乙個有1000個資料點組成的資料集對其進行pca降維,執行效果:
降維技術使得資料變得更易使用,並且它們往往能去除資料中的雜訊,使得其他機器學習任務更加精確。
PCA主成分分析(降維)
opencv中使用 實現降維分類預處理 參考 降維 我的理解是,通過降維得到基本特徵可以加快學習演算法。並且由於降維後的資料本身就是正交的,和聚類一樣可以實現分類 識別問題。在自我學習中也可以採用大量無標註的影象,對這些影象降維分類,並結合部分編碼資料得到特徵。例如 將很2500張人臉資訊,通過25...
降維 PCA 主成分分析
其實早該整理一下pca了,怎奈一直沒有時間,可能是自己對時間沒有把握好吧,下面進入正題。所謂降維,就是降低資料的維數。在機器學習中尤其常見,之前做過對一幅提取小波特徵,對於一幅大小為800 600的,如果每個點提取五個尺度 八個方向的特徵,那麼每乙個畫素點提取40個特徵,那麼一副的話就是40 800...
降維之PCA主成分分析法
如圖所示,尋找藍色的點到直線的垂直距離的和最小的直線 向量 pca 與 linear regression 的區別 pca衡量的是點到直線的垂直距離,而linear regression是所有x點對應的真實值y g x 與估計值f x 之間的vertical distance距離,如下圖所示 二 p...