关于先行判断和Fisher变换的理论知识,这里推荐一个非常好的博客:https://blog.csdn.net/eternity1118_/article/details/51248471

在了解了理论后,知道只要求出w与w0就可以,而且已经可以根据公式求出,所以实现起来也比较简单。但这种方式只适用于线性可分,对于线性不可分,可以考虑用最小均方误差法。话不多说,下面看实现代码:

%% fisher线性判断

clc;clear all;

x1 = [ 0.2331 1.5207 0.6499 0.7757 1.0524 1.1974

0.2908 0.2518 0.6682 0.5622 0.9023 0.1333

-0.5431 0.9407 -0.2126 0.0507 -0.0810 0.7315

0.3345 1.0650 -0.0247 0.1043 0.3122 0.6655

0.5838 1.1653 1.2653 0.8137 -0.3399 0.5152

0.7226 -0.2015 0.4070 -0.1717 -1.0573 -0.2099

];

y1 = [ 2.3385 2.1946 1.6730 1.6365 1.7844 2.0155

2.0681 2.1213 2.4797 1.5118 1.9692 1.8340

1.8704 2.2948 1.7714 2.3939 1.5648 1.9329

2.2027 2.4568 1.7523 1.6991 2.4883 1.7259

2.0466 2.0226 2.3757 1.7987 2.0828 2.0798

1.9449 2.3801 2.2373 2.1614 1.9235 2.2604

];

z1 = [ 0.5338 0.8514 1.0831 0.4164 1.1176 0.5536

0.6071 0.4439 0.4928 0.5901 1.0927 1.0756

1.0072 0.4272 0.4353 0.9869 0.4841 1.0992

1.0299 0.7127 1.0124 0.4576 0.8544 1.1275

0.7705 0.4129 1.0085 0.7676 0.8418 0.8784

0.9751 0.7840 0.4158 1.0315 0.7533 0.9548

];

x2 =[ 1.4010 1.2301 2.0814 1.1655 1.3740 1.1829

1.7632 1.9739 2.4152 2.5890 2.8472 1.9539

1.2500 1.2864 1.2614 2.0071 2.1831 1.7909

1.3322 1.1466 1.7087 1.5920 2.9353 1.4664

2.9313 1.8349 1.8340 2.5096 2.7198 2.3148

2.0353 2.6030 1.2327 2.1465 1.5673 2.9414

];

y2 = [ 1.0298 0.9611 0.9154 1.4901 0.8200 0.9399

1.1405 1.0678 0.8050 1.2889 1.4601 1.4334

0.7091 1.2942 1.3744 0.9387 1.2266 1.1833

0.8798 0.5592 0.5150 0.9983 0.9120 0.7126

1.2833 1.1029 1.2680 0.7140 1.2446 1.3392

1.1808 0.5503 1.4708 1.1435 0.7679 1.1288

];

z2 = [ 0.6210 1.3656 0.5498 0.6708 0.8932 1.4342

0.9508 0.7324 0.5784 1.4943 1.0915 0.7644

1.2159 1.3049 1.1408 0.9398 0.6197 0.6603

1.3928 1.4084 0.6909 0.8400 0.5381 1.3729

0.7731 0.7319 1.3439 0.8142 0.9586 0.7379

0.7548 0.7393 0.6739 0.8651 1.3699 1.1458

];

x1_w1 = zeros(3,36);x2_w2 = zeros(3,36);

for i =1:36

x1_w1(:,i) = [x1(i),y1(i),z1(i)];

x2_w2(:,i) = [x2(i),y2(i),z2(i)];

end

%求均值

m1 = mean(x1_w1');m1 =m1';

m2 = mean(x2_w2');m2 =m2';

%S1_x1 =zeros(3,3); S2_x2 = zeros(3,3);

%求类内离散度矩阵

%S1_x1 = cov(x1_w1')*35;S2_x2 = cov(x2_w2')*35;

%S = S1_x1 + S2_x2;% 总的离散度矩阵 越小越好

S =zeros(3,3);

for i = 1:2

for j = 1:36

S = S+(x1_w1(:,j)-m1)*(x1_w1(:,j)-m1)';

end

end

%计算类间离散度,越大越好

Sb = (m1-m2)*(m1-m2)';

w = S^(-1)*(m1-m2);

m1_w = w'*m1;

m2_w = w'*m2;

w0 = -(m1_w+m2_w)/2;

test = [1,1.5,0.6;1.2,1.0,0.55;2.0,0.9,0.68;1.2,1.5,0.89;0.23,2.33,1.43];

test = test';

for i =1:5

if(w'*test(:,i)>-w0 )

fprintf('第%d个样本属于第1类\n',i);

else

fprintf('第%d个样本属于第2类\n',i);

end

end

plot3(x1,y1,z1,'b.');hold on;plot3(x2,y2,z2,'r.');

for i =1:5

j =3*(i-1);

plot3(test(j+1),test(j+2),test(j+3),'k*');

hold on;

end

[x,y] = meshgrid( -2:0.1:3 ,0.5:0.1:2.5 );

z = -(w(1)*x+w(2)*y+w0)/w(3);

mesh(x,y,z);

对于类内离散度矩阵也可以用cov函数,然后乘n-1,其中n为样本的个数。其公式为:

散度矩阵=类内离散度矩阵=类内离差阵=协方差矩阵×(n-1),其中代码中是用定义求的。

其运行结果显示:

下图是没有插入分类面的结果,其中,黑色的星代表待分类的样本。

插入分类面:

matlab如何判断线性相关,Fisher线性判断之matlab实现相关推荐

  1. matlab中的mkdir函数_科学网—Matlab中计算函数运行时间的三种方法及判断新建文件夹 - 张伟的博文...

    (一)运行时间 1.tic和toc组合 计算daotic和toc之间那专段程序之间的属运行时间,它的经典格式为 : tic 函数 toc 复制函数代码,当代码遇到tic时Matlab自动开始计时,运行 ...

  2. 吴裕雄--天生自然 人工智能机器学习实战代码:线性判断分析LINEARDISCRIMINANTANALYSIS...

    import numpy as np import matplotlib.pyplot as pltfrom matplotlib import cm from mpl_toolkits.mplot3 ...

  3. Fisher线性判别算法原理及实现 MATLAB

    Fisher线性判别算法原理及实现 MATLAB 一.Fisher判别器原理 二.代码实现 clc; close all; clear; %% 生成数据 rng(2020); %指定一个种子 mu1 ...

  4. matlab fisher检验,FISHER线性判别MATLAB实现.doc

    FISHER线性判别MATLAB实现 Fisher线性判别上机实验报告 班级: 学号: 姓名: 算法描述 Fisher线性判别分析的基本思想:选择一个投影方向(线性变换,线性组合),将高维问题降低到一 ...

  5. 【人工智能】Fisher 线性分类器的设计与实现(QDU)

    [人工智能]Astar算法求解8数码问题(QDU) [人工智能]利用α-β搜索的博弈树算法编写一字棋游戏(QDU) [人工智能]Fisher 线性分类器的设计与实现(QDU) [人工智能]感知器算法的 ...

  6. 基于fisher线性判别法的分类器设计

    0.引言说明 这篇文章实际上是楼主上的模式识别课程的课堂报告,楼主偷懒把东西直接贴出来了.选择fisher判别法的原因主要是想学习一下这个方法,这个方法属于线性判别法,操作起来和lda判别法近乎没啥区 ...

  7. 机器学习--Iris数据集的Fisher线性分类以及数据可视化技术的学习

    Iris数据集的Fisher线性分类以及数据可视化技术的学习 1.Iris数据集的Fisher线性分类 2.数据可视化技术的学习 1.数据集介绍 2.观看数据前5行 3.特征工程 1.数据清洗 2.数 ...

  8. Fisher线性判别

    Fisher线性判别 一.算法介绍 1.背景: 在应用统计方法解决模式识别问题时,一再碰到的问题之一就是维度问题,在低维空间里解析上或计算上行得通的方法,在高维空间里往往行不通.降低维度有时会成为处理 ...

  9. 【基础机器学习算法原理与实现】使用感知器算法LDA、最小二乘法LSM、Fisher线性判别分析与KNN算法实现鸢尾花数据集的二分类问题

    本文设计并实现了PerceptronLA.PseudoIA.LeastSM.LinearDA.KNN等五个算法类,以及DataProcessor的数据处理类.对感知器算法LDA.最小二乘法LSM的伪逆 ...

最新文章

  1. HarmonyOS 设置图标在Text 旁边
  2. 总结:实例化SqlParameter时,如果是字符型,一定要指定size属性,还有制定具体的类型...
  3. 网络营销推广软件浅析外链怎么做才更“香”,才能促进网站自然有首页排名?...
  4. android 引用jar的r文件,正确的方法来处理Android库的ant构建. Build从jar文件中排除R.class...
  5. 基于matlab 求多边费马点,POJ2420(求多边形费马点) | 学步园
  6. Java客户端操作elasticsearch--查询索引库
  7. mysql 织梦 优化,优化分析:分享织梦搭建和后台优化设置
  8. “TypeError: 'dict_keys' object is not subscriptable”
  9. 【转】VScode tasks.json和launch.json的设置
  10. express ajax分页实例,DevExpress Navigator 数据分页 示例
  11. 地推不同HTTP协议解决的问题
  12. mini2440 貌似复杂的mmu
  13. SSH命令批量操作服务器
  14. 《冒号课堂:编程范式与OOP思想》笔记一
  15. 用计算机算标准曲线,标准曲线计算软件
  16. 减脂增肌运动和饮食结合
  17. 每日新闻丨软件业务收入64616亿元;工信部发话广电5G正式启动
  18. JS_SDK实现网站应用QQ登录功能-QQ互联(小白易懂)
  19. 博士申请 | 澳大利亚麦考瑞大学王岩教授招收机器学习方向全奖博士生
  20. 5.随机输入一个整数,判断输入的数是正数、负数还是0,如果是正数那么我们输出,”刚刚输入的一个正数”,如果是负数,那么我们输出,”刚刚输入的那个数是负数”,如果我们输入的0的话,那么我们出输,”刚刚输

热门文章

  1. windows下expdp自动备份脚本
  2. Sqlite3支持的数据类型 日期函数以及相关 函数
  3. SQL2005中利用PIVOT实现分组统计
  4. 走进SQL Server 2005:备份与恢复功能
  5. 查看python安装的包
  6. kafka 基础知识梳理及集群环境部署记录
  7. [数据结构] 迷宫问题(栈和队列,深搜和广搜)
  8. 大企业内部创业到底多难?从华为员工内网热议阿里钉钉谈起
  9. [转载]TFS与Project、Excel同步
  10. Elasticsearch总体介绍