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

我的小程序:

机器学习:线性模型-线性判别分析LDA(附代码实现)_第1张图片 待办计划:给自己立个小目标吧!

LDA思想:给定训练集,将训练集投影到一条直线上,相同类别的投影点尽可能近,不同类别的投影点尽可能远。在对新样本进行分类时,将新样本投影到学习到的该直线上,跟据投影点的位置确定新样的类别。如下图:机器学习:线性模型-线性判别分析LDA(附代码实现)_第2张图片

二分类任务算法分析:机器学习:线性模型-线性判别分析LDA(附代码实现)_第3张图片

机器学习:线性模型-线性判别分析LDA(附代码实现)_第4张图片

推广到多分类任务:机器学习:线性模型-线性判别分析LDA(附代码实现)_第5张图片

多分类任务中类间散度矩阵推导:(x平均为所有样本的平均,xi平均为第i类样本的平均,c为类别数,Ni为第i类样本数)机器学习:线性模型-线性判别分析LDA(附代码实现)_第6张图片

其中:

机器学习:线性模型-线性判别分析LDA(附代码实现)_第7张图片

代入原式:

机器学习:线性模型-线性判别分析LDA(附代码实现)_第8张图片

二分类任务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);
机器学习:线性模型-线性判别分析LDA(附代码实现)_第9张图片 待办计划:给自己立个小目标吧!

 

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

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

你可能感兴趣的:(机器学习,线性判别分析,LDA算法分析,二分类算法,多分类)