方法一:
1:用zscore函數對原始數據S進(jìn)行標準化。
2:用cov函數求出標準化后的數據的協(xié)方差。
3:求出此協(xié)方差的特征向量與特征根(eig函數)。
4:將產(chǎn)生的特征向量依據特征根大小從大到小進(jìn)行排列(即將特征向量按列倒序)。
5:依據需求取出倒序后的向量的前幾列(一般根據特征根來(lái)算貢獻率,使得累計貢獻率大于85%),組成新的矩陣T
6:做S*T得到分析后的新的數據。
7:依據特征根算貢獻率,并繪圖。
代碼如下:
X=load('shuju.txt')
z=zscore(X) %數據標準化
M=cov(z) %協(xié)方差
[V,D]=eig(M); %求出協(xié)方差矩陣的特征向量、特征根
d=diag(D); %取出特征根矩陣列向量(提取出每一主成分的貢獻率)
eig1=sort(d,'descend') %將貢獻率按從大到小元素排列
v=fliplr(V) %依照D重新排列特征向量
S=0;
i=0;
while S/sum(eig1)<0.85
i=i 1;
S=S eig1(i);
end %求出累積貢獻率大于85%的主成分
NEW=z*v(:,1:i) %輸出產(chǎn)生的新坐標下的數據
W=100*eig1/sum(eig1)
figure(1)
pareto(W); %畫(huà)出貢獻率的直方圖
方法二:
1:用zscore函數對原始數據S進(jìn)行標準化,(同上)。
2:利用matlab自帶的princomp函數直接求得其特征向量,新坐標下的數據,特征根(并且已經(jīng)排列好了)。
3:選擇恰當的前幾項主成分與標準化后的數據相乘。得到在新坐標下的數據。
4:如方法一,利用特征根算貢獻率。
代碼如下:
X=load('shuju.txt')
x=zscore(X) %標準化
[coef,score,eig,t]=princomp(x); %利用princomp處理矩陣
t %每一組數據在新坐標下到原點(diǎn)的距離
s=0;
i=1;
while s/sum(eig)<0.85
s=s eig(i);
i=i 1;
end %獲得累計貢獻率大于85%幾組數據
NEW=x*coef(:,1:i-1) %輸出新的數據
figure
pareto(eig/sum(eig)); %輸出貢獻率直方圖
figure(2)
plot(eig,'r ');
hold on
plot(eig,'b-');
1:歸一化、均值化、標準化、白化
歸一化:將數據歸結到某兩個(gè)數之間。
計算公式:y = (ymax - ymin)*(x - xmin)/(xmax - xmin) ymin
Matlab實(shí)現方法:利用mapminmax函數,具體格式為[y,ps] = mapminmax(x,ymin,ymax)(矩陣中以行來(lái)歸一化)。
均值化:將數據中的每一個(gè)數除以其相應指標的平均值(數據矩陣中由于一般每一列描述一個(gè)特征,matlab處理時(shí)要按列處理)(這種方法可以說(shuō)修正了常用的標準化會(huì )浪費部分數據的情況,可以替代標準化對數據進(jìn)行預處理)。
標準化:使數據均值為0方差為1,即將每一個(gè)數據減去所在列的均值后對數據矩陣每一列除以其對應的方差。
Matlab實(shí)現方法:使用zscore函數。
主成分分析中,原始數據的單位不同,需要使用一種數據處理方法使其轉換為無(wú)量綱數,歸一化與標準化都有消除量剛的作用,但是,主成分分析根據方差來(lái)建立新坐標系的,所以歸一化矩陣可能不適用于PCA中,所以,基本上主成分分析在數據預處理上都用的是標準化,但是,標準化矩陣本身會(huì )損失一部分信息,而均值化不會(huì )損失信息,均值化可以更好的改進(jìn)PCA算法(網(wǎng)上找到的一篇論文中說(shuō)到的)。
白化:白化通常為獨立成分分析中的數據處理方式,其與PCA處理方式基本一致,個(gè)人理解ICA就是對PCA數據作的進(jìn)一步處理,找到其中相互獨立的部分。
2:princomp函數與eig函數的不同
在開(kāi)始我一直以為利用princomp函數與eig函數產(chǎn)生的特征向量只有順序有所不同,但是我發(fā)現,即使是同一組數據,其產(chǎn)生的特征向量也有所不同,表現為某幾個(gè)數據正負號不同,具體如下:
原始數據:
使用eig函數的得到的特征向量:
可以看出,不僅是列的位置有所不同,某些數據的正負情況也有所不同,這也是我的一個(gè)疑惑:相同數據的特征向量為什么會(huì )有正負號的偏差?為保險起見(jiàn),我覺(jué)得matlab自帶的princomp函數可能更準確。
3:PCA與ICA的異同
幾何意義上:PCA是在找尋保留最大信息的方向,而ICA是在找尋各個(gè)獨立的分量,也就是說(shuō)PCA的第一主成分貢獻率永遠最大并且貢獻率主成分次數增高逐漸降低,而ICA并沒(méi)有,他只是將原有的信號解混,并不考慮信息量的大小。
處理方式上:處理ICA時(shí)要先用PCA做白化處理,因為PCA協(xié)方差矩陣為對角陣,其必不相關(guān),獨立必不相關(guān),所以通過(guò)PCA使數據之間沒(méi)有相關(guān)性,之后再進(jìn)行迭代操作,求出相互獨立的分量。
聯(lián)系客服