最近在研究資料處理相關的演算法,打算整理相關的知識點,以便日後複習之用。
最近在學習有關資料降維相關的知識,而主成分分析是資料降維的一種常用手段,所以學習了一下,順便記錄在部落格裡頭,督促自己學習。
對於一組樣本資料,資料的維度有時會很大,比如,這會對我們進行資料分析造成麻煩,為了便於我們處理資料,我們需要對資料降維。在資料的諸多特徵(維度)中,有一些是不必要的,或者說是冗餘的,通過資料降維,可能會犧牲一定的準確度,但是卻能加快資料分析的速度。主成分分析的思路是通過計算協方差矩陣的特徵值與特徵向量,找到前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
cxv=λ
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 隨機變數的指代 在資料集中,每乙個樣本,即將資料集理解成乙個 的話,乙個樣本就是一行,則每一列就是乙個特徵,也就是乙個隨機變數,一列的所有取值就是隨機變數的所有可能取值 說的所有可能取值只針對訓練...