當前位置:成語大全網 - 書法字典 - 主成分分析的Python實現

主成分分析的Python實現

在python中回顧並實現了PCA的步驟。我深深發現當年學的特征值和特征向量是如此強大。

PCA是壹種無監督學習方法,也是壹種非常常見的降維方法。在數據信息損失最小的情況下,數據的特征數從n變為k(k

這裏,使用二維數據來說明PCA,選擇二維數據是因為它更容易繪圖。

這是數據:

畫壹張圖看看分布情況:

協方差定義為:

假設n是數據的特征數,那麽協方差矩陣m是n的矩陣,其中Mij是第I個和第J個特征的協方差,對角線是每個特征的方差。

在我們的數據中,n=2,所以協方差矩陣是2 ^ 2。

通過numpy,我們可以輕松獲得:

cov的結果是:

數組(【【0.6165556,0.6154444】),

[ 0.61544444, 0.71655556]])

因為我們以前做過標準化,對我們來說,

這個矩陣是data*data的轉置矩陣。

得到結果:

矩陣(【【5.549,5.539】,

[ 5.539, 6.449]])

我們發現協方差矩陣與散度矩陣密切相關,散度矩陣是協方差矩陣乘以(總數據-1)。所以它們的特征值和特征向量是相同的。值得註意的是,散度矩陣是SVD奇異值分解的壹個步驟,因此PCA和SVD密切相關,這裏不詳細討論它們的關系,但後面會寫下來。

用numpy計算特征根和特征向量非常簡單。

但它們所代表的意義非常有趣。讓我們將特征向量添加到原始圖表中:

其中紅線是特征向量。有幾點值得註意:

藍色三角形是坐標變換後得到的新點。事實上,它是通過將紅色原點投影到紅線和藍線上形成的。

在得到特征值和特征向量後,我們可以根據特征值的大小從大到小選擇k個特征值對應的特征向量。

python中的這種實現也非常簡單:

只需從eig_pairs中選擇前k個特征向量。這裏,我們只有兩個特征向量,選擇最大的壹個。

將原始數據乘以由濾波後的特征向量組成的特征矩陣後,可以獲得新的數據。

輸出:

數據變成了壹維數據。

最後,我們畫壹張圖來了解當數據通過PCA時會發生什麽。

綠色五角星是PCA處理後得到的壹維數據。為了與前面的圖像進行比較,它們的高度定位為1.2,這實際上是紅點投影到藍線上後形成的點。這就是PCA,通過選擇特征根向量形成壹個新的坐標系,然後將數據投影到這個新的坐標系中,在盡可能少丟失信息的基礎上降維。

通過上述步驟,我們簡單地實現了對PCA的第壹個2維數據的處理,但這是原理,我們可以根據它輕松地實現多維數據。

將sklearn的pca與我們的PCA進行比較:

得到結果:

試試我們的pca。

得到結果:

壹模壹樣,完美~

值得壹提的是,sklearn中PCA的實現使用了壹些SVD結果,果然,它們有很多因果報應。