线性判别分析(Linear Discriminant Analysis ,简称LDA)

来源:互联网 发布:企业vpn网络解决方案 编辑:程序博客网 时间:2024/06/02 05:31

线性判别分析(Linear Discriminant Analysis ,简称LDA)是一种经典的线性学习方法,在二分类问题上最早由【Fisher,1936】提出,也称为“Fisher 判别分析”
LDA的思想:给定训练样本例集,设法将例投影在一条直线上,使得同类例的投影点近可能近,异类样例尽可能地远离;在对新样本进行分类时,将其投影到同样的这条直线上,再根据投影点的位置来确定新样本的类别。如下图所示:
这里写图片描述
欲使同类例的投影点尽可能近,可以让同类例投影点的协方差尽可能小,而欲使异类样例投影点尽可能远可以让类中心之间的距离尽可能的大,同时考虑可得欲最大化的目标:
这里写图片描述
定义“类内散度矩阵”
这里写图片描述
“类间散度矩阵”
这里写图片描述
则最大化目标可写为:
这里写图片描述
其中u为数据的均值,这就是LDA欲最大化得目标。

matlab代码如下:

%%%%%%%%%%%%%%%%%%%%%%%%%LDA线性判别式分析算法%%%%%%%%%%%%%%%%%%%%%%%clc;clear; x1=[4,2;2,4;2,3;3,6;4,4]; x2=[9,10;6,8;9,5;8,7;10,8];figure(1)plot(x1(:,1),x1(:,2),'b*');hold on;plot(x2(:,1),x2(:,2),'ro');title('数据分布');u1=mean(x1)';%均值u2=mean(x2)';%均值s1=cov(x1);%协方差矩阵s2=cov(x2);%协方差矩阵%类内散度矩阵sw=s1+s2;%类间散度矩阵sb=(u1-u2)*(u1-u2)';invSw=inv(sw);invSw_by_SB=invSw*sb;%求最大特征值和特征向量[V,D]=eig(invSw_by_SB);[a,b]=max(max(D));W=V(:,b);k=W(2)/W(1);%%%%%%%%训练后的数据new_x1=x1*W;new_x2=x2*W;figure(2)X1=0:0.1:10;Y1=k.*X1;plot(x1(:,1),x1(:,2),'b*');hold on;plot(x2(:,1),x2(:,2),'ro');plot(X1,Y1);%%%画投影Xt1=(x1(:,1)+k.*x1(:,2))/(k*k+1);Yt1=k.*Xt1;Xt2=(x2(:,1)+k.*x2(:,2))/(k*k+1);Yt2=k.*Xt2;plot(Xt1,Yt1,'vc');plot(Xt2,Yt2,'vc');hold off;grid on;prediction=[7 3.46];result=prediction*W;T=new_x1-result;T1=new_x2-result;if(min(abs(T1))>min(abs(T)))    disp('1');else    disp('2');end
阅读全文
0 0