当前位置: 首页 > news >正文

MATLAB分类与判别模型算法:基于Fisher算法的分类程序【含Matlab源码 MX_002期】

算法思路介绍:

费舍尔线性判别分析(Fisher's Linear Discriminant Analysis,简称 LDA),用于将两个类别的数据点进行二分类。以下是代码的整体思路:

  1. 生成数据

    • 使用 randn 函数生成随机数,构建两个类别的合成数据点。
    • 第一个类别的数据点分布在以 (2,2) 为中心的正态分布中。
    • 第二个类别的数据点分布在以 (-2,-2) 为中心的正态分布中。
  2. 计算类别均值和散布矩阵

    • 计算每个类别的数据点的均值(类别中心)。
    • 计算每个类别的散布矩阵(类别内离散度矩阵)。
  3. 计算费舍尔线性判别

    • 计算费舍尔判别向量 W,它是使类间散布与类内散布的比值最大化的向量。
    • 计算类内散布矩阵的总和 Sw
    • 利用线性代数中的求逆和乘法,计算出判别向量 W。
  4. 生成测试样本 (x)

         使用 randn 函数生成一个随机测试样本。
  5. 对测试样本进行分类

          将测试样本投影到判别向量 W 上,并与预先设定的阈值比较以进行分类。
  6. 绘图

    • 绘制两个类别的数据点,以红色和蓝色表示。
    • 标记测试样本点,并根据分类结果用不同的颜色表示。
    • 绘制费舍尔判别线,表示分类的决策边界。
    • 绘制判别线上的阈值点。
    • 绘制测试样本在判别线上的投影点,并画出测试样本与其投影点之间的连线。

通过这些步骤,代码能够实现费舍尔线性判别分析,并对新的测试样本进行分类和可视化。

部分代码:

m1=mean(X(1:N,:));
m2=mean(X(N+1:2*N,:));
S1=0;S2=0;
for i=1:NS1=S1+(X(i,:)-m1)*(X(i,:)-m1)';
end
for i=N+1:2*NS1=S1+(X(i,:)-m1)*(X(i,:)-m1)';
end
Sw=S1+S2;
W=inv(Sw)*(m1-m2);
W=W./norm(W)
% ====================================================================
x=randn(1,2);%待判样本
y0=W*(m1+m2)'/2;
if W*x'>y0disp('待判样本属于第一类')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);
% ================求投影直线上的阈值点============
x0=W(1)*(y0)/W(2);
y0=W(2)^2*y0-6*W(1)^2+W(1)*W(2)*x0;
x0=(y0+6)*W(1)/W(2);
hold on,plot(x0,y0,'ro','MarkerSize',10);
% =============求待判样本在投影直线上的投影点==============
y1=W(1)^2*x(1)+6*W(1)*W(2)+W(1)*W(2)*x(2);
y2=W(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算法的分类程序

http://www.lryc.cn/news/357138.html

相关文章:

  • 长文总结 | Python基础知识点,建议收藏
  • centos中使用Docker安装rabbitmq记录
  • STM32系列-STM32介绍
  • 网络原理 一
  • xcode配置快速打开终端命令行工具教程
  • AIGC降重:如何2分钟降低论文AI率和查重率?推荐使用SpeedAI科研小助手
  • Blazor入门-连接MySQL的简单例子:列出数据+简单查询
  • CEEMDAN +组合预测模型(CNN-Transfromer + XGBoost)
  • 箭头函数的意义和函数的二义性
  • 618必买的数码好物有哪些?盘点兼具设计与实用的数码好物分享
  • 【好书分享第十三期】AI数据处理实战108招:ChatGPT+Excel+VBA
  • 001 CentOS 7.9 安装及配置jdk-8u411-linux-x64.tar.gz
  • Revit二次开发-WPF ProgressBar 执行程序中显示进度条
  • React:构建Web应用的未来
  • 【Elasticsearch】Centos7安装Elasticsearch、kibana、IK分词
  • IDEA中各种Maven相关问题(文件飘红、下载依赖和启动报错)
  • Android 13 VSYNC重学习
  • std::move和左值右值
  • QT学习备份
  • 【wiki知识库】03.前后端的初步交互(展现所有的电子书)
  • AOP——学习
  • Linux静态库、共享动态库介绍、制作及使用
  • 【Paddle】稀疏计算的使用指南 稀疏ResNet的学习心得 (2) + Paddle3D应用实例稀疏 ResNet代码解读 (1.6w字超详细)
  • Linux系统维护
  • 经典文献阅读之--RenderOcc(使用2D标签训练多视图3D Occupancy模型)
  • 蓝牙设备中的UUID
  • 网络之再谈体系结构
  • 在flutter initState 方法,触发 setState导致循环执行
  • JavaScript字符串方法
  • YD/T 2698-2014 《电信网和互联网安全防护基线配置要求及检测要求 网络设备》标准介绍