资源简介
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对高斯白噪声进行分析
评论
共有 条评论