LDA分类器讨论

题目1  LDA分类器讨论

1.1 分类器的原理和算法流程

(1)原理:LDA分类器将数据在低维度上进行投影,投影后希望每一种类别数据的投影点尽可能的接近,而不同类别的数据的类别中心之间的距离尽可能的大。

(2)流程: ①计算投影前与投影后的数据中心点

②计算散度矩阵,包括类内散度矩阵Sw和类间散度矩阵Sb

③计算的特征值和特征向量

④选择d个最大特征值对应的矩阵W

⑤对数据集D进行降维,得到Y

1.2 题目研究的工作基础或实验条件

(1)软件环境:office、matlab

1.3 设计思想

给出一组分好类的数据集,通过matlab软件依照LDA算法流程对手动推演的结果进行验证,对比最终结果。

1.4 流程图

1.5 主要程序代码(要求必须有注释)

%给出两类样本

cls1_data=[4 2;2 4;2 3;3 6;4 4];

cls2_data=[9 10;6 8;9 5;8 7;10 8];

%样本投影前的点

plot(cls1_data(:,1),cls1_data(:,2),'.r');

hold on;

plot(cls2_data(:,1),cls2_data(:,2),'*b');

hold on;

%通过调用FisherLDA函数求出最大特征值对应的特征向量

W=FisherLDA(cls1_data,cls2_data);

fprintf('the value of W is [%4.2f;%4.2f] ',W);

%样本投影直线

new1=cls1_data*W;

new2=cls2_data*W;

k=W(2)/W(1);

plot([0,12],[0,12*k],'-k');

axis([0 12 0 12]);

hold on;

%画出样本投影到直线上的点

for i=1:5

    temp=cls1_data(i,:);

    newx=(temp(1)+k*temp(2))/(k*k+1);

    newy=k*newx;

    plot(newx,newy,'*r');

end

for i=1:5

    temp=cls2_data(i,:);

    newx=(temp(1)+k*temp(2))/(k*k+1);

    newy=k*newx;

    plot(newx,newy,'ob');

end

function [W] = FisherLDA(w1,w2)

%W最大特征值对应的特征向量

%w1 第一类样本

%w2 第二类样本

%第一步:计算样本均值向量

m1=mean(w1);%第一类样本均值

m2=mean(w2);%第二类样本均值

m=mean([w1;w2]);%总样本均值

%第二步:计算类内散度矩阵Sw

n1=size(w1,1);%第一类样本数

n2=size(w2,1);%第二类样本数

  %求第一类样本的散度矩阵s1

s1=0;

for i=1:n1

    s1=s1+(w1(i,:)-m1)'*(w1(i,:)-m1);

end

  %求第二类样本的散度矩阵s2

s2=0;

for i=1:n2

    s2=s2+(w2(i,:)-m2)'*(w2(i,:)-m2);

end

Sw=(n1*s1+n2*s2)/(n1+n2);

%第三步:计算类间离散度矩阵Sb

Sb=(n1*(m-m1)'*(m-m1)+n2*(m-m2)'*(m-m2))/(n1+n2);

%第四步:求最大特征值和特征向量

%[V,D]=eig(inv(Sw)*Sb);%特征向量V,特征值D

A = repmat(0.1,[1,size(Sw,1)]);%repmat为创建所有元素值为0.1的1*size(Sw,1)的矩阵

B = diag(A);%生成对角阵

[V,D]=eig(inv(Sw + B)*Sb);%求矩阵的全部特征值构成对角阵D,并求矩阵的特征向量构成V的列向量

[a,b]=max(max(D));%a为列最大值,b为列最大值的行号

W=V(:,b);%最大特征值对应的特征向量W

end

1.6 运行结果及分析

你可能感兴趣的:(1024程序员节,机器学习,分类,算法)