Fisher线性判别算法原理及实现 MATLAB
Fisher线性判别算法原理及实现 MATLAB
一、Fisher判别器原理
二、代码实现
clc;
close all;
clear;
%% 生成数据
rng(2020); %指定一个种子
mu1 = [0 3];
sigma1 = [0.5 0; 0 0.5];
data1 = mvnrnd(mu1,sigma1,300); %生成一个300*2的矩阵,每一列的数据分别以0,3为均值,标准差都为0.5rng(2021); %指定一个种子
mu2 = [6 7];
sigma2 = [0.5 0; 0 0.5];
data2 = mvnrnd(mu2,sigma2,300); %生成一个300*2的矩阵,每一列的数据分别以6,7为均值,标准差都为0.5% rng(2022); %指定一个种子
% mu3 = [5 -5];
% sigma3 = [0.5 0;
% 0 0.5];
% data3 = mvnrnd(mu3,sigma3,300); %生成一个300*2的矩阵,每一列的数据分别以5,-5为均值,标准差都为0.5%%
figure(1),plot(data1(:,1),data1(:,2),'r+');hold on;
plot(data2(:,1),data2(:,2),'b*');hold on;
% figure(3),plot(data3(:,1),data3(:,2),'m^');hold on;%%
mu_1=mean(data1,1); %求data1数据集的均值 mean是求每一列的均值
mu_2=mean(data2,1); %求data2数据集的均值 mean是求每一列的均值
tmp=data1-repmat(mu_1,[size(data1,1),1]); %size(data1,1)返回data1第一维的大小 repmat将mu_1矩阵当成一个数,然后按后面的向量排列
S1=tmp'*tmp; %计算出S1 下面的操作是一样的
tmp=data2-repmat(mu_2,[size(data2,1),1]);
S2=tmp'*tmp;
Sw=S1+S2;
w_star=Sw\(mu_1-mu_2)'; %这边直接用结论 注意这里的mu_1 mu_2是行向量,而PPT上的为列向量,所以多了个转置,实际上是一样的%% Plot w_star
Data=[data1;data2]; %将两个数据集合并成一个数据集
[xmin,ymin]=min(Data,[],1); %返回每一列的最小值
[xmax,ymax]=max(Data,[],1); %返回每一列的最大值
X=xmin:0.1:xmax; %采样
k=w_star(2)/(w_star(1)+eps);%求出判别函数的斜率
plot(X,k*X-4,'k--'); %画出判别函数,-4只是上下平移,并不会影响到判别函数的方向,这里只是为了不让它穿过样本%%
w_star=-w_star; %反向
y1=data1*w_star; %计算data1中每一个样本的投影
y2=data2*w_star; %计算data2中每一个样本的投影
figure(2),plot(y1,zeros(length(y1)),'r+');hold on;
plot(y2,zeros(length(y2)),'b*');hold on; %横坐标是它们的投影,纵坐标取零是便于在一维中比较,可以发现两类样本分开了%% Sw-1Sb特征值分解
Sb=(mu_1-mu_2)'*(mu_1-mu_2); %注意这里的mu_1 mu_2是行向量,而PPT上的为列向量,所以多了个转置,实际上是一样的
Tmp=Sw\Sb; % Jf矩阵
[V,D]=eig(Tmp); %V储存特征向量,D储存特征值,D是个对角阵,特征值储存在对角线上
D=diag(D); %提取出特征值行向量
[~,ind]=max(D);%最大特征值的序号
v=V(:,ind); %提取出与最大特征值对应的特征向量
k1=v(2)/(v(1)+eps);
figure(3),plot(data1(:,1),data1(:,2),'r+');hold on;
plot(data2(:,1),data2(:,2),'b*');hold on;
plot(X,k*X-4,'k--');hold on;
plot(X,k1*X-6,'m--'); %可以发现与第一种方法得到的结果是一样的%% G(x)=w'x+w0
mu_y1=mean(y1); %计算data1数据投影的平均值
mu_y2=mean(y2); %计算data2数据投影的平均值
d=(mu_y1+mu_y2)/2; %d就是阈值
w0=-d;
figure(4),plot(data1(:,1),data1(:,2),'r+');hold on;
plot(data2(:,1),data2(:,2),'b*');hold on;
plot(X,k*X-4,'k--');hold on;
Y=(-w_star(1)*X-w0)/(w_star(2));%令G(x)=0解出y即可 注意x向量的第一个元素是横坐标,第二个元素是纵坐标
plot(X,Y,'m-');
axis equal;
三、实验结果
Figure 1:
Figure 2:
Figure 3:
Figure 4:
Fisher线性判别算法原理及实现 MATLAB相关推荐
- fisher线性判别算法python_干货|机器学习算法之线性判别分析
作者:just_sort 链接:https://blog.nowcoder.net/n/e668319c70b64fab945871e5ab6cc363 来源:牛客网 算法原理 在上文我们使用LDA实 ...
- fisher线性判别算法python_Fisher线性判别(LDA)python实现
LDA概述 首先,LDA是一个用于分类的有监督算法. 基本想法非常质朴,不失一般性的以二维平面二分类为例: 对于两类样本点,我们的目的是想找一条直线,将两类样本点映射到这条直线上时,使这两类之间的类间 ...
- fisher判别_经典模式识别:Fisher线性判别
本文将介绍Fisher线性判别的原理和具体实践,阅读时间约8分钟,关注公众号可在后台领取数据集资源哦^-^ Fisher线性判别 1.背景介绍 生活中我们往往会遇到具有高维特性的数据,如个人信息,天气 ...
- 多类线性分类器算法原理及代码实现 MATLAB
多类线性分类器算法原理及代码实现 MATLAB 一.算法原理 下面举例说明为何蓝圈部分在case2中是确定的而在case1中不确定: 二.代码实现 1.HK函数 function [] = HK(w1 ...
- matlab fisher检验,FISHER线性判别MATLAB实现.doc
FISHER线性判别MATLAB实现 Fisher线性判别上机实验报告 班级: 学号: 姓名: 算法描述 Fisher线性判别分析的基本思想:选择一个投影方向(线性变换,线性组合),将高维问题降低到一 ...
- 基于fisher线性判别法的分类器设计
0.引言说明 这篇文章实际上是楼主上的模式识别课程的课堂报告,楼主偷懒把东西直接贴出来了.选择fisher判别法的原因主要是想学习一下这个方法,这个方法属于线性判别法,操作起来和lda判别法近乎没啥区 ...
- 朴素贝叶斯分类器与Fisher线性判别实践——水果识别为例
开篇:本次博客主要分享二分类水果实现案例,样本构造显然不具备泛化.大数量特性以及背景均为纯白色是为了方便目标提取.大家若需要更好的水果样本,Github上有许多的优秀案例.本次代码计算效率较低,代码有 ...
- 模式识别(1)Fisher线性判别
Fisher线性判别 分类是我们经常会遇到是问题,下面主要介绍Fisher线性判别,利用Fisher算法来分类UCI数据集中的Iris数据集和Sonar数据集. 一.数据集说明 UCI数据库是加州大学 ...
- Python 分类问题研究-Fisher线性判别
[实验目的] 1.掌握常见机器学习分类模型思想.算法,包括Fisher线性判别.KNN.朴素贝叶斯.Logistic回归.决策树等: 2.掌握Python编程实现分类问题,模型评价指标.计时功能.保存 ...
最新文章
- Git之不明觉厉11-利其器source tree
- Progressbar 实现从右向左 加载(逆向)
- ext 从头开始 extjs 控件 触发事件 的几种方式
- 剑指offer--不用加减乘除做加法
- 007_控制器可扩展性
- 理解Lucene中的Query
- 一道money计算题引发的思考
- Android电量优化全解析
- ifonts提取下载ttf文件
- 微信小程序-更改个人信息
- 使用主密钥和钱包方法加密数据
- 风雨十年路,历历在眼前,今做离职语,感慨有万千!-------来自一位中兴长天java十年的总工程师
- 永磁体的退磁化与静态工作点
- 学习数据库应该上哪个网站
- 【ARM指令】LDRD与STRD
- 如何用excel制作xy曲线图_如何用Excel计算百分比?
- VMware Workstation Pro安装教程
- C++ 删除C盘中的用户(坑人必备,极度危险)
- HP LaserJet P2015d 打印机的使用问题
- 2020 非常火的 11 个微前端框架
热门文章
- 记录今天登录oracle时遇到的一个小问题--不能登录
- 新浪微博第三方登陆重定向错误23123
- crm 一级菜单排序,二级菜单选中并且展开,非菜单权限的归属,权限粒度控制到按钮级别...
- electron 项目的搭建方式,借助 node 和 npm
- 2016.3.22(关系型数据库简介,管理数据库和表)
- Linux下nginx安装与配置
- 【vue-router①】router-link跳转页面传递参数 - 进击的前端之路(偶尔爬坑java小路) - SegmentFault 思否
- [题解]Codeforces Round #519 - B. Lost Array
- 导出数据生成excel
- @angular/platform-browser-dynamic