機器學習基礎算法python代碼實現可參考:machine_learning_algorithms。
1、簡介
PCA(Principal Component Analysis)是壹種常用的數據分析方法。PCA通過線性變換將原始數據變換為壹組各維度線性無關的表示,可用於提取數據的主要特征分量,常用於高維數據的降維。
2、算法思路
簡述壹下PCA的算法步驟:
設有nn條 dd維數據。
1、將原始數據按列組成nn行 dd列矩陣XX。
2、將XX的每壹列(代表壹個屬性)進行零均值化,即減去這壹列的均值。
3、求出協方差矩陣C=\frac{1}{m}XX^\mathsf{T}C=\frac{1}{m}XX^\mathsf{T}。
4、求出協方差矩陣的特征值及對應的特征向量。
5、將特征向量按對應特征值大小從上到下按行排列成矩陣,取前kk行組成矩陣PP。
6、Y=PXY=PX即為降維到kk維後的數據。
3、實現代碼
以下是基於python的 numpy庫實現的PCA算法代碼,實現數據降維的功能。
源代碼地址:/leizhang-
4壹些對PCA的認知
PCA本質上是將方差最大的方向作為主要特征,並且在各個正交方向上將數據“離相關”,也就是讓它們在不同正交方向上沒有相關性。
因此,PCA也存在壹些限制,例如它可以很好的解除線性相關,但是對於高階相關性就沒有辦法了,對於存在高階相關性的數據,可以考慮Kernel PCA,通過Kernel函數將非線性相關轉為線性相關。另外,PCA假設數據各主特征是分布在正交方向上,如果在非正交方向上存在幾個方差較大的方向,PCA的效果就大打折扣了。
最後需要說明的是,PCA是壹種無參數技術,也就是說面對同樣的數據,如果不考慮清洗,誰來做結果都壹樣,沒有主觀參數的介入,所以PCA便於通用實現,但是本身無法個性化的優化。