• 大小: 2KB
    文件类型: .rar
    金币: 2
    下载: 1 次
    发布日期: 2021-07-07
  • 语言: Matlab
  • 标签: KL变换  

资源简介

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


评论

共有 条评论