資源簡介
Matlab實現的KL變換實現主成分分析,包含使用的數據集

代碼片段和文件信息
%%%KL變換
%%%主成分分析法
%%%date:2011-7-4
clear??all
%訓練數據
[w1(:1)w1(:2)]=textread(‘MALE.txt‘‘%f%f‘‘headerlines‘0);?%w1:MALE
[w2(:1)w2(:2)]=textread(‘FEMALE.txt‘‘%f%f‘‘headerlines‘0);?%w2:FEMALE
[w1_row?w1_col]=size(w1);
w1=[w1?ones(w1_row1)];??%給訓練樣本增加類別屬性標簽男生
[w2_row?w2_col]=size(w2);
w2=[w2?-ones(w2_row1)];?%給訓練樣本增加類別屬性標簽,女生
%畫出students數據集的訓練樣本
figure(1)
for?i=1:w1_row
????plot(w1(i1)w1(i2)‘r*‘);??%?畫w1類樣本數據的二維直角坐標曲線圖,其中數據以紅*表示
????hold?on;
end
for?i=1:w2_row
????plot(w2(i1)w2(i2)‘bo‘)??%?畫w2類樣本數據的二維直角坐標曲線圖,其中數據以藍o表示
????hold?on
end
hold?off
%合并兩個樣本集中的特征
w=[w1;w2];
[w_row?w_col]=size(w);
%求標準化后的協方差矩陣,再求特征根和特征向量
%for?j=1:w_col
%????mju(j)=mean(w(:j));
%????sigma(j)=sqrt(cov(w(:j)));
%end
%for?i=1:w_row
%????for?j=1:w_col
%????V(ij)=(w(ij)-mju(j))/sigma(j);
%????end
%end
%sigmaV=cov(V);
%求w標準化的協方差矩陣的特征根和特征向量
%[Tlambda]=eig(sigmaV);
%disp(‘特征根由(小到大):‘);
%disp(lambda);
%disp(‘特征向量‘);
%disp(T);
%y=T(:1)*V(:1)+T(:2)*V(:2)
sigmaV=cov(w(:1:2));
[Tlambda]=eig(sigmaV);
disp(‘特征根由(小到大):‘);
disp(lambda);
disp(‘特征向量‘);
disp(T);
m1=mean(w(:1));
m2=mean(w(:2));
%for?i=1:w_row
%????x1(i1)=T(11)*(w(i1))+T(21)*(w(i2));%第一主成分
%????x2(i1)=T(12)*(w(i1))+T(22)*(w(i2));%第二主成分
%end
%x=140:5:190;
%y=T‘*w‘;
z1=T(:1)‘*w(:1:2)‘;
z2=T(:2)‘*w(:1:2)‘;
figure(2)
for?i=1:w_row
????plot(z1(i)*T(11)z1(i)*T(21)‘r.‘);??
????plot(z2(i)*T(12)z2(i)*T(22)‘b.‘);
????hold?on;
end
hold?off;
figure(3)
z3=T(:2)‘*w1(:1:2)‘;
z4=T(:2)‘*w2(:1:2)‘;
for?i=1:w1_row
????plot(z3(i)*T(12)z3(i)*T(22)‘r.‘);
????hold?on;
end
for?i=1:w2_row
????plot(z4(i)*T(12)z4(i)*T(22)‘b.‘);
????hold?on;
end
hold?off;
figure(4)
z5=T(:1)‘*w1(:1:2)‘;
z6=T(:1)‘*w2(:1:2)‘;
for?i=1:w1_row
????plot(z5(i)*T(11)z5(i)*T(12)‘r.‘);
????hold?on;
end
for?i=1:w2_row
????plot(z6(i)*T(11)z6(i)*T(12)‘b.‘);
????hold?on;
end
hold?off;
%方差貢獻率和累計方差貢獻率
wsum=sum(sum(lambda2)1);
for?i=1:(w_col-1)
????fai(i)=lambda(ii)/wsum;
end
for?i=1:(w_col-1)
????psai(i)=sum(sum(lambda(1:i1:i)2)1)/wsum;
end
disp(‘方差貢獻率‘);
disp(fai);
disp(‘累計方差貢獻率‘);
disp(psai);
%方法2:求w的相關系數矩陣,再求特征根和特征向量
%w的標準化的協方差矩陣就是w的相關系數矩陣
%R=corrcoef(w);
%求w相關系數矩陣的特征根和特征向量
%[TR?lambdaR]=eig(R);
%disp(‘特征根由(小到大):‘);
%disp(lambdaR);
%disp(‘特征向量‘);
%disp(TR);
%?第一主成分分析
right=0;%分類正確次數
wrong=0;%分類錯誤次數
fprintf(‘******************************************\n‘);
fprintf(‘第一主成分分析\n‘);
fprintf(‘******************************************\n‘);
y10=(T(21)*m1+T(22)*m2);?%閾值y0
for?i=1:w_row
????y1=T(21)*w(i1)+T(22)*w(i2);
????if?y1>y10
????????fprintf(‘測試數據(%f%f)屬于w1類(男)‘w(i1)w(i2));
????????if(w(i3)==1)
????????????right=right+1;
????????????fprintf(‘??正確\n‘);
????????else
????????????wrong=wrong+1;
????????????fprintf(‘??錯誤\n‘);
????????end
????else
????????fprintf(‘測試數據(%f%f)屬于w2類(女)‘w(i1)w(i2));
????????if(w(i3)==-1)
????????????right=rig
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????426??2004-10-08?09:03??KL\FEMALE.TXT
?????文件???????4407??2011-10-14?00:20??KL\kl.m
?????文件????????424??2004-10-08?09:04??KL\MALE.TXT
?????目錄??????????0??2011-10-14?00:21??KL
-----------?---------??----------?-----??----
?????????????????5257????????????????????4
- 上一篇:電力系統暫態分析
- 下一篇:用MATLAB對高斯白噪聲進行分析
評論
共有 條評論