資源簡介
為了說明什么是數(shù)據(jù)的主成分,先從數(shù)據(jù)降維說起。數(shù)據(jù)降維是怎么回事兒?假設(shè)三維空間中有一系列點(diǎn),這些點(diǎn)分布在一個(gè)過原點(diǎn)的斜面上,如果你用自然坐標(biāo)系x,y,z這三個(gè)軸來表示這組數(shù)據(jù)的話,需要使用三個(gè)維度,而事實(shí)上,這些點(diǎn)的分布僅僅是在一個(gè)二維的平面上,那么,問題出在哪里?如果你再仔細(xì)想想,能不能把x,y,z坐標(biāo)系旋轉(zhuǎn)一下,使數(shù)據(jù)所在平面與x,y平面重合?這就對了!如果把旋轉(zhuǎn)后的坐標(biāo)系記為x',y',z',那么這組數(shù)據(jù)的表示只用x'和y'兩個(gè)維度表示即可!當(dāng)然了,如果想恢復(fù)原來的表示方式,那就得把這兩個(gè)坐標(biāo)之間的變換矩陣存下來。
代碼片段和文件信息
clc;?clear?all;?close?all;
I1=importdata(?‘d00_te.dat‘);%從外部將文本或者數(shù)據(jù)文件如txt.dat導(dǎo)入到Matlab的workspace中
I2=importdata(?‘d01_te.dat‘);
%I3=importdata(?‘d00_te.dat‘);
X1(::)=I1(::);
X2(::)=I2(::);
?????????????????????????%離線過程
%數(shù)據(jù)標(biāo)準(zhǔn)化,使用的是每一列的平均值和標(biāo)準(zhǔn)差
X_mean?=?mean(X1);??%按列求X1平均值???????????????????????????
X_std?=?std(X1);????%求標(biāo)準(zhǔn)差??????????????????????
[X_rowX_col]?=?size(X1);?%求X1行、列數(shù)???????????????
X1=(X1-repmat(X_meanX_row1))./repmat(X_stdX_row1);
%求協(xié)方差矩陣
sigmaX1?=?cov(X1);
%對協(xié)方差矩陣進(jìn)行特征分解,lamda為特征值構(gòu)成的對角陣,T的列為單位特征向量,且與lamda中的特征值一一對應(yīng):
[Tlamda]?=?eig(sigmaX1);?
%取對角元素(結(jié)果為一列向量),即lamda值,并上下反轉(zhuǎn)使其從大到小排列,主元個(gè)數(shù)初值為1,若累計(jì)貢獻(xiàn)率小于90%則增加主元個(gè)數(shù)
D?=?flipud(diag(lamda));?%diag取對角線元素,flipud矩陣翻轉(zhuǎn)???????????????????????????
num_pc?=?1;?????????????????????????????????????????
while?sum(D(1:num_pc))/sum(D)?0.9??
num_pc?=?num_pc?+1;
end?????????????????????????????????????????????????
%取與lamda相對應(yīng)的特征向量
P?=?T(:X_col-num_pc+1:X_col);%P是取得主元矩陣
%TT=X1*T;
%TT1=X1*P;
%求置信度為95%時(shí)的T^2統(tǒng)計(jì)控制限,利用F-分布確定???????????????????????
T2UCL1=num_pc*(X_row-1)*(X_row+1)*finv(0.95num_pcX_row?-?num_pc)/(X_row*(X_row?-?num_pc));
%置信度為95%的Q統(tǒng)計(jì)控制限
for?i?=?1:3
評論
共有 條評論