資料分析與處理(一)主成分分析 PCA

2021-09-25 07:14:40 字數 2979 閱讀 8134

最近在研究資料處理相關的演算法,打算整理相關的知識點,以便日後複習之用。

最近在學習有關資料降維相關的知識,而主成分分析是資料降維的一種常用手段,所以學習了一下,順便記錄在部落格裡頭,督促自己學習。

對於一組樣本資料,資料的維度有時會很大,比如,這會對我們進行資料分析造成麻煩,為了便於我們處理資料,我們需要對資料降維。在資料的諸多特徵(維度)中,有一些是不必要的,或者說是冗餘的,通過資料降維,可能會犧牲一定的準確度,但是卻能加快資料分析的速度。主成分分析的思路是通過計算協方差矩陣的特徵值與特徵向量,找到前k個特徵向量(對應k個新的特徵),使得資料盡可能地分散開,這基於乙個假設,即資料的方差越大,對應的資訊越多,這和資訊熵是對應的。

規範化也稱為標準化,由於每個資料的每個維度的取值範圍不一樣,它們對資料的影響也不同。取值範圍大的維度會削弱取值範圍小的維度的影響,這對於資料分析來說是不利的,我們需要將資料進行規範化處理,規範化的方法很多,這裡用z-score 標準化。

x ′=

x−μσ

x'=\frac

x′=σx−

μ​μ

\muμ是x的均值,σ

\sigma

σ為其標準差,這樣,標準化後的資料的均值為0,方差為1。

接下來就要計算協方差矩陣了,這個我在之前的部落格裡頭提到過,可以參考

協方差矩陣

計算協方差矩陣的特徵值和特徵向量,選取前k大的特徵值對應的特徵向量,假設原資料是m維的,則這k個特徵向量可以組成乙個m*k的矩陣,與原來的資料矩陣相乘後可以將原資料維度降為k維。

原協方差矩陣是半正定矩陣,證明如下:

n*m的資料矩陣x的協方差矩陣為cx=

xtxc_x=x^tx

cx​=xt

x對於特徵值λ

\lambda

λ,根據特徵值的定義,存在向量v,使得cxv

=λvc_xv=\lambda v

cx​v=λ

v而且v tλ

v=vt

cxv=

vtxt

xv=(

xv)t

xv=∣

∣xv∣

∣2≥0

v^\lambda v=v^tc_xv\\=v^tx^txv\\=(xv)^txv\\=||xv||^2\\\geq0

vtλv=v

tcx​

v=vt

xtxv

=(xv

)txv

=∣∣x

v∣∣2

≥0又有vtλ

v=λv

tv=λ

∣∣v∣

∣2≥0

v^\lambda v=\lambda v^tv=\lambda||v||^2\geq0

vtλv=λ

vtv=

λ∣∣v

∣∣2≥

0於是λ ≥0

\lambda\geq0

λ≥0因此我們可以得出,資料的協方差矩陣為半正定矩陣,對於選取的k個特徵值,我們要求

λ 1≥

λ2≥.

..≥λ

k≥0\lambda_1\geq\lambda_2\geq...\geq\lambda_k\geq0

λ1​≥λ2

​≥..

.≥λk

​≥0先利用鳶尾花資料集進行測試,採用python的scikit-learn進行pca降維。

**如下:

import numpy as np

import matplotlib.pyplot as plt

from mpl_toolkits.mplot3d import axes3d

%matplotlib inline

from sklearn.datasets import load_iris

iris=load_iris()

iris_data=iris['data']

iris_label=iris['target']

from sklearn.decomposition import pca

pca=pca(n_components=3)

pca.fit(iris_data)

print(pca.explained_variance_ratio_)

鳶尾花的資料集有4個特徵,我們先嘗試將其降維為3,3個特徵對應的方差比例如下:

[0.92461872 0.05306648 0.01710261]
然後將其視覺化

然後我們再將其降至兩個維度,**如下:

pca=pca(n_components=2)

pca.fit(iris_data)

print(pca.explained_variance_ratio_)

# [0.92461872 0.05306648]

**中的輸出值為其方差對應的比例,前兩個特徵基本佔到了方差比例的97%。

視覺化如下:

x_new=pca.transform(iris_data)

fig=plt.figure()

ax=fig.add_subplot(111)

for i in range(x_new.shape[0]):

ax.scatter(x_new[i,0],x_new[i,1],marker='o',c=colors[iris_label[i]])

plt.show()

視覺化的效果如下:

可以看到,在二維的條件下基本是線性可分的了。

參考資料

主成分分析

主成分分析 pca 分析乙個隨機向量的中的主成分 主成分一般不是隨機向量中的某乙個分量,而是不同分量的線性組合,根據資訊理論的觀點,資訊的多少與方差有關,所以 主成分是方差最大的幾個成分 主成分分析的方法是求隨機向量的協方差矩陣 用樣本協方差矩陣代替 對於差異較大的資料,可採用相關矩陣代替協方差矩陣...

主成分分析

理論要點 1 主成分分析是一種無監督學習,因此不能用交叉驗證來檢驗誤差 2 在處理資料之前,要對資料做中心化處理 3 p太大的話,做特徵分解用svd 4 一共有min n 1,p 個主成分,因為中心化以後,rank要降一維 5 主成分的載荷向量就是協方差矩陣的特徵向量,對應特徵值最大的是第一主成分,...

主成分分析

1.概念 將一組可能存在相關性的隨機變數轉變成互不相關的隨機變數。這個概念裡有三個地方需要理解清楚。1 隨機變數的指代 在資料集中,每乙個樣本,即將資料集理解成乙個 的話,乙個樣本就是一行,則每一列就是乙個特徵,也就是乙個隨機變數,一列的所有取值就是隨機變數的所有可能取值 說的所有可能取值只針對訓練...