再讀PCA

初識PCA

第一次在代碼裏面使用PCA算法還是在讀大學時候,當時申請了一個人臉識別算法的實踐項目,其實就是將別人論文中的算法進行實現,並且除算法外提供一個友好的界面顯示算法結果,其中主要的算法就是對預處理的人臉圖像數據提取主成分(主要的特徵向量),然後比較兩幅圖像這些特徵向量的距離,距離小於某個閾值就認爲是同一張圖像。

就這麼簡單個算法,在當時的人臉圖像庫上也有80%+的正確率,難怪之前吳恩達機器學習課程裏說到PCA已經被工業界過度使用了,凡是降維就丟到PCA裏跑一遍,最近在讀CV相關的書裏面也提到了PCA,並且對PCA算法的適用條件給出了一些指導,本文這裏做一些摘記以供隨時翻閱。

PCA流程

Created with Raphaël 2.2.0原始n維數據數據預處理求協方差矩陣求特徵值和特徵向量並按照特徵值大小排序使用前m個主成分進行降維結束

PCA流程裏面的數據預處理通常是減去均值再除以標準差的操作,如下:
Xinew=XiuXiδXi X_i ^{new}= \dfrac{X_i - u_{X_i}}{\delta_{X_i}}
這個預處理通常是爲了避免各個不同維度間變量量級差距太大帶來的影響。有時候除了對於輸入數據做預處,對於PCA降維後的數據根據後續需求的不同,也需要做類似的操作,例如在實際應用中的PCA白化就是對PCA的輸出再進行一些變換。

PCA特點

  • 降維: 一個輸入經過某個變換後,得到的是低維的輸出,並且這個輸出能夠通過逆變換近似重建輸入,這種變換就認爲是執行了降維
  • PCA是一種線性降維算法,是基於數據本身分佈進行降維的手段,屬於無監督類型,如果已經知道了數據的類別,一個思路是讓原始數據經過投影,在低維空間上不同類別的分佈中心儘可能遠離,相同類別的分佈方差儘可能小,這種方式就是線性判別分析(LDA)
  • PCA是經典的線性降維算法,爲了引入非線性,可以在求協方差之前先做一次非線性變換,即Kernel PCA
  • 適用於PCA的數據是統計意義上有強相關性的數據
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章