主成成分分析
前言
??主成分分析(Principal Component Analysis,PCA), 簡稱PCA,是一種統(tǒng)計方法。過正交變換將一組可能存在相關(guān)性的變量轉(zhuǎn)換為一組線性不相關(guān)的變量,轉(zhuǎn)換后的這組變量叫主成分。主成分分析是我們在數(shù)學(xué)建模的過程中最為常見的線性降維方式,在比賽中常常會用在數(shù)據(jù)指標(biāo)過多的處理,把高維度數(shù)據(jù)處理成低維度數(shù)據(jù),方便后續(xù)建模。說人話就是將多個數(shù)據(jù)指標(biāo)降維到較少的數(shù)據(jù)指標(biāo)。
一、主成分分析的步驟
對n個樣本,p個指標(biāo)組成的Xnp的樣本矩陣
1、對指標(biāo)中心化
中心化也就是把數(shù)據(jù)的均值變?yōu)榱?br>
x
i
j
=
x
i
j
?
1
n
∑
j
=
1
n
x
i
j
(1)
x_{ij}=x_{ij}-\frac{1}{n}\sum_{j=1}^n x_{ij} \tag{1}
xij?=xij??n1?j=1∑n?xij?(1)
數(shù)據(jù)是正態(tài)分布也可以是標(biāo)準(zhǔn)化過程。
x
i
j
=
X
?
X
 ̄
σ
(2)
x_{ij}= \frac{X-\overline{X}}{\sigma} \tag{2}
xij?=σX?X?(2)
2、計算協(xié)方差矩陣C
C
=
1
n
X
′
T
X
′
(3)
C= \frac{1}{n}X'^{T}X' \tag{3}
C=n1?X′TX′(3)
C
i
j
=
c
o
v
(
x
i
,
x
j
)
=
E
(
(
x
i
?
μ
i
)
(
x
j
?
μ
j
)
)
(4)
C_{ij}= cov(x_{i},x_{j})=E((x_{i}-\mu_{i})(x_{j}-\mu_{j})) \tag{4}
Cij?=cov(xi?,xj?)=E((xi??μi?)(xj??μj?))(4)
其中x為指標(biāo)列,μ為指標(biāo)均值
3、計算協(xié)方差矩陣的特征值和特征向量
C
a
=
λ
a
(5)
Ca=\lambda a \tag{5}
Ca=λa(5)
λ為C的特征值,a為C的對應(yīng)于特征值λ的特征向量,具體推導(dǎo)不會的可以參考線性代數(shù)。
4、計算主成分貢獻(xiàn)率和累計貢獻(xiàn)率
將特征值由大到小排列,對應(yīng)的特征向量按行排列成矩陣a
P
i
=
λ
i
∑
λ
i
(6)
P_{i}=\frac {\lambda_{i}}{\sum \lambda_{i}}\tag{6}
Pi?=∑λi?λi??(6)
P
i
′
=
∑
k
=
1
i
P
k
(7)
P'_{i}=\sum_{k=1}^i P_{k}\tag{7}
Pi′?=k=1∑i?Pk?(7)
Pi為貢獻(xiàn)率,P’i為累計貢獻(xiàn)率,我們將Pi視為信息的保留部分百分比
5、寫出主成分
一般取累計貢獻(xiàn)率P’i超過80%的特征值對應(yīng)的m個主成分
Y
=
a
X
(8)
Y=aX\tag{8}
Y=aX(8)
第i個主成分:
F
i
=
a
1
i
X
1
+
a
2
i
X
2
+
…
+
a
p
i
X
p
(9)
F_{i}=a_{1i}X_{1}+a_{2i}X_{2}+…+a_{pi}X_{p}\tag{9}
Fi?=a1i?X1?+a2i?X2?+…+api?Xp?(9)
6、解釋主成分
對于某個主成分而言,指標(biāo)的系數(shù)越大,代表該指標(biāo)對主成分的影響越大,我們對這個主成分的解釋應(yīng)賦予指標(biāo)更大的權(quán)重。
二、代碼程序
matlab代碼如下:
clear;clc
x = xlsread('文件路徑\xxx.xlsx'); %導(dǎo)入excel數(shù)據(jù)
[n,p] = size(x); % n是樣本個數(shù),p是指標(biāo)個數(shù)
X=zscore(x); %matlab內(nèi)置的標(biāo)準(zhǔn)化函數(shù)
C = cov(X); %求協(xié)方差矩陣
[V,lambda] = eig(C); % V 特征向量矩陣,lamda為特征值構(gòu)成的對角矩陣
[lambda, ind] = sort(diag(lambda), 'descend'); %排序
lambda=lambda./sum(lambda); %求貢獻(xiàn)率
lambda=cumsum(lambda); %累計貢獻(xiàn)率
k=find(lambda>0.9); %累計貢獻(xiàn)率超過0.9
y=x*V(:,ind(1:k(1))); %y為主成分降維后的結(jié)果
python代碼如下:
## pca特征降維
# 導(dǎo)入相關(guān)模塊
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
from numpy.linalg import eig
from sklearn.datasets import load_iris
iris = load_iris() # 導(dǎo)入矩陣,行是樣本,列是指標(biāo)
#X = np.array([[5.1, 3.5, 1.4, 0.2],
# [4.9, 3, 1.4, 0.2]])
#自己導(dǎo)入矩陣數(shù)據(jù)可以用上面的注釋代碼,然后把X = iris.data 刪掉即可
X = iris.data
# Standardize by remove average通過去除平均值進行標(biāo)準(zhǔn)化
X = X - X.mean(axis=0)
# Calculate covariance matrix:計算協(xié)方差矩陣:
X_cov = np.cov(X.T, ddof=0)
# Calculate eigenvalues and eigenvectors of covariance matrix
# 計算協(xié)方差矩陣的特征值和特征向量
eigenvalues, eigenvectors = eig(X_cov)
pi = eigenvalues/np.sum(eigenvalues) #計算貢獻(xiàn)率
p = np.cumsum(pi) #計算累計貢獻(xiàn)率
k=np.min(np.argwhere(p > 0.95))+1 #返回達(dá)到累計貢獻(xiàn)率的閾值的下標(biāo)
# top k large eigenvectors選取前k個特征向量
klarge_index = eigenvalues.argsort()[-k:][::-1]
k_eigenvectors = eigenvectors[klarge_index]
# X和k個特征向量進行點乘
X_pca = np.dot(X, k_eigenvectors.T)
print(X_pca) #輸出主成分結(jié)果
兩種編程語言都是一樣的,看自己熟練哪一種就用哪種。
總結(jié)`
主成分分析有沒有不用代碼的操作?
??是有的,spsspro、MPai數(shù)據(jù)科學(xué)平臺等都有內(nèi)置的主成分分析的操作。
如何解釋主成分?
??在實際過程操作中,我們知道了第i個主成分的構(gòu)成,那么可以根據(jù)相對應(yīng)的系數(shù)進行解釋,如:X1代表食品支出,X2代表住房支出,X3代表娛樂支出,X4代表醫(yī)療支出,Y1為第1個主成分,構(gòu)成如下:
F
i
=
0.91
X
1
+
0.83
X
2
+
0.04
X
2
+
0.76
X
4
(10)
F_{i}=0.91X_{1}+0.83X_{2}+0.04X_{2}+0.76X_{4}\tag{10}
Fi?=0.91X1?+0.83X2?+0.04X2?+0.76X4?(10)
??可以明顯觀察到,X1、X2、X4前面的系數(shù)較高,對于主成分的影響較大,而X3前面的系數(shù)較高,對于主成分的影響較小,那么我們可以將第一主成分解釋為:家庭必要支出
注:一旦主成分無法解釋,那么這次主成分分析就是失敗的,可以考慮用因子分析文章來源:http://www.zghlxwxcb.cn/news/detail-400780.html
主成分分析能否用于綜合評價?
??先說結(jié)論,主成分分析雖然有主成分得分,但是我們一般是不會將主成分分析用于綜合得分評價的。因為主成分是會損失部分原始數(shù)據(jù)的信息的,而且如果指標(biāo)是極小型的,在其中我們沒有對數(shù)據(jù)指標(biāo)進行正向化的過程,那么得分結(jié)果是不準(zhǔn)確的。
??主成分得分的原理是從幾十個指標(biāo)中分解出幾個主元,相當(dāng)于是全新的指標(biāo),并且有這幾個主元的貢獻(xiàn)率,貢獻(xiàn)率衡量的是這個主元能夠反映整體多少信息量(其他指標(biāo)映射到主元的距離方差,方差越大,說明能反映的信息量越多),是個相對性的值,歸一化后可以當(dāng)做權(quán)重,權(quán)重與主元相乘可得到不同樣本相對的數(shù)值。文章來源地址http://www.zghlxwxcb.cn/news/detail-400780.html
到了這里,關(guān)于主成分分析(PCA)步驟及代碼的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!