学做美食的视频网站,博物馆网站制作,企业网站设计开发服务,商城网站建设算法思路介绍#xff1a;
费舍尔线性判别分析#xff08;Fishers Linear Discriminant Analysis#xff0c;简称 LDA#xff09;#xff0c;用于将两个类别的数据点进行二分类。以下是代码的整体思路#xff1a; 生成数据#xff1a; 使用 randn 函数生成随机数#x…算法思路介绍
费舍尔线性判别分析Fishers Linear Discriminant Analysis简称 LDA用于将两个类别的数据点进行二分类。以下是代码的整体思路 生成数据 使用 randn 函数生成随机数构建两个类别的合成数据点。第一个类别的数据点分布在以 (2,2) 为中心的正态分布中。第二个类别的数据点分布在以 (-2,-2) 为中心的正态分布中。 计算类别均值和散布矩阵 计算每个类别的数据点的均值类别中心。计算每个类别的散布矩阵类别内离散度矩阵。 计算费舍尔线性判别 计算费舍尔判别向量 W它是使类间散布与类内散布的比值最大化的向量。计算类内散布矩阵的总和 Sw。利用线性代数中的求逆和乘法计算出判别向量 W。 生成测试样本 (x) 使用 randn 函数生成一个随机测试样本。 对测试样本进行分类 将测试样本投影到判别向量 W 上并与预先设定的阈值比较以进行分类。 绘图 绘制两个类别的数据点以红色和蓝色表示。标记测试样本点并根据分类结果用不同的颜色表示。绘制费舍尔判别线表示分类的决策边界。绘制判别线上的阈值点。绘制测试样本在判别线上的投影点并画出测试样本与其投影点之间的连线。
通过这些步骤代码能够实现费舍尔线性判别分析并对新的测试样本进行分类和可视化。
部分代码
m1mean(X(1:N,:));
m2mean(X(N1:2*N,:));
S10;S20;
for i1:NS1S1(X(i,:)-m1)*(X(i,:)-m1);
end
for iN1:2*NS1S1(X(i,:)-m1)*(X(i,:)-m1);
end
SwS1S2;
Winv(Sw)*(m1-m2);
WW./norm(W)
%
xrandn(1,2);%待判样本
y0W*(m1m2)/2;
if W*xy0disp(待判样本属于第一类)hold on,plot(x(1),x(2),r,MarkerSize,10,LineWidth,2)
elsedisp(待判样本属于第二类)hold on,plot(x(1),x(2),b,MarkerSize,10,LineWidth,2)
end
legend(Cluster 1,Cluster 2,x,Location,NW)
% 画投影直线
X1-8:0.05:8;
X2(W(2)/W(1))*X1-6;
hold on,plot(X1,X2,k,LineWidth,2);
% 求投影直线上的阈值点
x0W(1)*(y0)/W(2);
y0W(2)^2*y0-6*W(1)^2W(1)*W(2)*x0;
x0(y06)*W(1)/W(2);
hold on,plot(x0,y0,ro,MarkerSize,10);
% 求待判样本在投影直线上的投影点
y1W(1)^2*x(1)6*W(1)*W(2)W(1)*W(2)*x(2);
y2W(2)/W(1)*y1-6;
hold on,plot(y1,y2,r.,MarkerSize,30);
hold on,plot([x(1) y1],[x(2) y2],g,LineWidth,2);
结果展示 获取代码MATLAB分类与判别模型算法基于Fisher算法的分类程序