机器学习:线性模型-线性判别分析LDA(附代码实现)

LDA思想:给定训练集,将训练集投影到一条直线上,相同类别的投影点尽可能近,不同类别的投影点尽可能远。在对新样本进行分类时,将新样本投影到学习到的该直线上,跟据投影点的位置确定新样的类别。如下图:

 

二分类任务算法分析:

 

推广到多分类任务:

 

 

 

多分类任务中类间散度矩阵推导:(x平均为所有样本的平均,xi平均为第i类样本的平均,c为类别数,Ni为第i类样本数)

其中:

 

 

代入原式:

 

 

二分类任务matlab代码:

function [w,x1_a,x2_a] = ldaFunc(x1,x2,y1,y2)

x1_rows = size(x1,1);
x2_rows = size(x2,1);

x1_cols = size(x1,2);
x2_cols = size(x2,2);

%x1和x2的平均向量
x1_a = (sum(x1)/x1_rows)';
x2_a = (sum(x2)/x2_rows)';

%类间散度矩阵
%sb = (x1_a-x2_a)(x1_a-x2_a)'

%协方差矩阵
x1_covariance = zeros(x1_cols,x1_cols);
x2_covariance = zeros(x2_cols,x2_cols);

%x1协方差矩阵
for i=1:x1_rows,
  x1_covariance += (x1(i,:)'-x1_a)*(x1(i,:)'-x1_a)';
end;
%x2协方差矩阵
for i=1:x2_rows,
  x2_covariance += (x2(i,:)'-x2_a)*(x2(i,:)'-x2_a)';
end;

%类内散度矩阵
sw = x1_covariance + x2_covariance;

w = inv(sw)*(x1_a-x2_a);
微信交流
多谢打赏

参考资料:周志华《机器学习》

参考博文:https://www.cnblogs.com/liuwu265/p/4724758.html

发布了69 篇原创文章 · 获赞 77 · 访问量 8万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 点我我会动 设计师: 上身试试

分享到微信朋友圈

×

扫一扫,手机浏览