多类线性分类器算法原理及代码实现 MATLAB

多类线性分类器算法原理及代码实现 MATLAB

一、算法原理

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
下面举例说明为何蓝圈部分在case2中是确定的而在case1中不确定:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、代码实现

1、HK函数

function [] = HK(w1_data,w2_data)
%w1_data为第一类数据集  w2_data为第二类数据集
%此函数的作用为用HK算法对输入的数据集w1_data,w2_data做二分类,并画出分界面lr=0.5 ;%学习率
MaxIter = ceil(20000/lr);%最大迭代次数
Eps = 1e-5; %精度%% 增广化
w1_data=[w1_data';ones(1,size(w1_data,1))]';
w2_data=[w2_data';ones(1,size(w2_data,1))]';Y=[w1_data;-w2_data];%待分类数据,w1在决策平面的正侧
[xmin,~]=min(Y,[],1); %求出横坐标最小值
[xmax,~]=max(Y,[],1); %求出横坐标最大值
b=rand(size(Y,1),1);
Y_flag=(Y'*Y)\Y';
% Y_flag=pinv(Y);N=length(b);
C=0;%迭代次数
while(C < MaxIter)a=Y_flag*b;e=Y*a-b;zeronum = sum(e<Eps & e>-Eps);nenum = sum(e<0);if  zeronum==N %all is 0break;elseif nenum ==Nbreak;enddelta=lr*(e+abs(e));b = b + delta; %更新bC=C+1; %迭代次数+1
end
if C ==MaxIterif sum(e>-Eps)==N % all is larger than or equal to 0.fprintf('It has cost all iterartions(%d), and all elements are larger than or equal to 0. The sample is linear to be classified!\n',MaxIter);elseif sum(e<=Eps) ==N% all is less than or equal to 0.fprintf('It has cost all iterartions(%d), and all elements are less than or equal to 0. The sample is non-linear to be classified!\n',MaxIter);elsefprintf('It has cost all iterartions(%d), the sample is uncertain to be classified!\n',MaxIter);endend
end%% 画出分界面
x1=(xmin-8:0.1:xmax+20);
if abs(a(2))<1e-7x1=-a(3)/a(1);x2=(-1:0.1:1);x1=ones(size(x2))*x1;
elsex2=(a(1)*x1+a(3))/(-a(2));
end
plot(x1,x2,'LineWidth',1);
hold on;

2、case1

clc;
close all;
clear;
%% 生成数据
rng(2020);   %指定一个种子
mu1 = [0 3];
sigma1 = [0.5 0; 0 0.5];
data1 = mvnrnd(mu1,sigma1,300); %生成一个300*2的矩阵,每一列的数据分别以03为均值,标准差都为0.5rng(2021);  %指定一个种子
mu2 = [6 7];
sigma2 = [0.5 0; 0 0.5];
data2 = mvnrnd(mu2,sigma2,300); %生成一个300*2的矩阵,每一列的数据分别以67为均值,标准差都为0.5rng(2022);  %指定一个种子
mu3 = [5 -5];
sigma3 = [0.5 0; 0 0.5];
data3 = mvnrnd(mu3,sigma3,300); %生成一个300*2的矩阵,每一列的数据分别以5-5为均值,标准差都为0.5HK(data1,[data3;data2]); %data1为一类,其他所有数据为另一类
HK(data2,[data1;data3]); %data2为一类,其他所有数据为另一类
HK(data3,[data1;data2]); %data3为一类,其他所有数据为另一类%% 画出点集
plot(data1(:,1),data1(:,2),'r+');hold on;
plot(data2(:,1),data2(:,2),'b*');hold on;
plot(data3(:,1),data3(:,2),'m^');hold on;

实验结果:

在这里插入图片描述

3、case2

clc;
close all;
clear;
%% 生成数据
rng(2020);   %指定一个种子
mu1 = [0 3];
sigma1 = [0.5 0; 0 0.5];
data1 = mvnrnd(mu1,sigma1,300); %生成一个300*2的矩阵,每一列的数据分别以03为均值,标准差都为0.5rng(2021);  %指定一个种子
mu2 = [6 7];
sigma2 = [0.5 0; 0 0.5];
data2 = mvnrnd(mu2,sigma2,300); %生成一个300*2的矩阵,每一列的数据分别以67为均值,标准差都为0.5rng(2022);  %指定一个种子
mu3 = [5 -5];
sigma3 = [0.5 0; 0 0.5];
data3 = mvnrnd(mu3,sigma3,300); %生成一个300*2的矩阵,每一列的数据分别以5-5为均值,标准差都为0.5HK(data1,data2); %对data1,data2作二分类
HK(data2,data3); %对data2,data3作二分类
HK(data3,data1); %对data1,data3作二分类%% 画出点集
plot(data1(:,1),data1(:,2),'r+');hold on;
plot(data2(:,1),data2(:,2),'b*');hold on;
plot(data3(:,1),data3(:,2),'m^');hold on;

实验结果:

在这里插入图片描述

4、case3

clc;
close all;
clear;%% 生成数据
rng(1800);   %指定一个种子
mu1 = [0 3];
sigma1 = [0.5 0; 0 0.5];
data1 = mvnrnd(mu1,sigma1,300); %生成一个300*2的矩阵,每一列的数据分别以03为均值,标准差都为0.5rng(1900);  %指定一个种子
mu2 = [6 7];
sigma2 = [0.5 0; 0 0.5];
data2 = mvnrnd(mu2,sigma2,300); %生成一个300*2的矩阵,每一列的数据分别以67为均值,标准差都为0.5rng(2022);  %指定一个种子
mu3 = [5 -5];
sigma3 = [0.5 0; 0 0.5];
data3 = mvnrnd(mu3,sigma3,300); %生成一个300*2的矩阵,每一列的数据分别以5-5为均值,标准差都为0.5%% 
Label1=ones(length(data1),1);   %为data1的每个数据生成一个标签
Label2=ones(length(data2),1)+1; %为data2的每个数据生成一个标签
Label3=ones(length(data3),1)+2; %为data3的每个数据生成一个标签
Data=[data1;data2;data3]; %将三个数据集整合起来
Label=[Label1;Label2;Label3]; %将三个标签集整合起来
[xmin,ymin]=min(Data,[],1); %提取出数据集横坐标最小值,纵坐标最小值
[xmax,ymax]=max(Data,[],1); %提取出数据集横坐标最大值,纵坐标最大值
Data=[Data,ones(size(Data,1),1)]; %为每个数据增加一维,增加的一维取值为1%%
[N,M]=size(Data);
A=randn(M,3); %随机初始化三类的三个权向量 每一列是一个权向量
p=1; %学习率
t=0; %迭代器
MaxInt=1000; %最大迭代次数
while(t<MaxInt)C=0; %分类正确计算器for i=1:Ny=Data(i,:)'; %提取出第i个数据tmp=A'*y; %计算数据在三个判别器中的值[v,ind]=max(tmp); %提取出最大判别器的值和序号if ind==Label(i) % 如果最大判别器就是该类的判别器C=C+1; %该数据正确分类elseA(:,ind)=A(:,ind)-p*y;A(:,Label(i))=A(:,Label(i))+p*y; %套用公式,更新相应的权向量endendt=t+1; %迭代次数+1if C==N %如果样本全部正确分类,则退出循环break;end
end%% 求交点
A_=A(1:2,:)';
b_=-A(3,:)';
pt=(A_'*A_)\A_'*b_; %求一个向量,令三个判别器的值全为零,该向量就是交点%注意A的每一列是增广的权向量,真正的权是前两行,第三行其实是w0%%
w1=A(:,1)-A(:,2);
w2=A(:,1)-A(:,3);
w3=A(:,2)-A(:,3);
X1=xmin-30:0.1:pt(1);
X2=pt(1):0.1:xmax+30;
Y1=(-w1(1)*X2-w1(3))/(w1(2));
Y2=(-w2(1)*X1-w2(3))/(w2(2));
Y3=(-w3(1)*X2-w3(3))/(w3(2));%% 画出三个数据集的点
plot(data1(:,1),data1(:,2),'r+');hold on;
plot(data2(:,1),data2(:,2),'b*');hold on;
plot(data3(:,1),data3(:,2),'m^');hold on;%% 画出三个分类平面
plot(X2,Y1,'k-');hold on;
plot(X1,Y2,'k-.');hold on;
plot(X2,Y3,'k--');hold on;%% 画出交点
plot(pt(1),pt(2),'.','MarkerSize',24);
axis equal;

实验结果:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/258332.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(转) C#如何使用异步编程

怎么使用异步&#xff0c;就是用委托进行处理&#xff0c;如果委托对象在调用列表中只有一个方法&#xff0c;它就可以异步执行这个方法。委托类有两个方法&#xff0c;叫做BeginInvoke和EndInvoke&#xff0c;它们是用来异步执行使用。 异步有三种模式 等待模式&#xff0c;在…

javascript 的 ~ 操作符作用

2019独角兽企业重金招聘Python工程师标准>>> "~" operator in javascript. For anyone else who also didnt know what it does: it converts -1 to 0&#xff0c;可以节省用来比较-1的情况&#xff0c;如 if (~event.origin.indexOf(http://yoursite.com…

驻定相位原理(POSP)以及线性调频信号的频谱

最近看论文遇到了驻定相位原理&#xff0c;问老师直接给了我一本书让我看&#xff0c;看半天只有一段…不是这个方向的&#xff0c;半路出家做毕业设计需要用到这个定理&#xff0c;有错误的话请不吝赐教。 一、驻定相位原理 在数字信号处理中&#xff0c;经常需要将一个时域…

vue怎么合并两个视频_【软件分享】视频分割合并软件哪款好用呢?怎么剪切合并视频?...

现在有很多小伙伴都喜欢喜欢自己拍视频上传到各大视频平台&#xff0c;有时候会遇到关于视频剪辑方面的难题&#xff0c;比如说&#xff0c;视频怎么剪切&#xff1f;怎么将两段小视频合并成一个呢&#xff1f;这些都是一些比较常常遇到的问题&#xff0c;今天小编就给大家介绍…

怎样根据字段域查找到其在数据库中关系与属性

Infor SyteLine ERP中&#xff0c;很多时候需要做维护&#xff0c;我们需要从打开的window窗口的form中某一个输入Textbox域或是DropDownList域&#xff0c;去找到它是绑定了数据库中的哪一张表&#xff0c;哪一个字段的&#xff1f; 其相关的关系或是属性等。比如下面这个form…

【手势交互】9. PS Move

索尼研发体感控制技术已有10年&#xff0c;在过去那么多年里。尝试了3D摄像头、超声波和电磁感应等各种技术。最后还是觉得眼下的MOVE所使用的技术最为合适。PS Move是索尼于2010年9月份推出。用来让PS3主机具备动态感应功能的控制器。他利用动态控制器&#xff08;手柄&#x…

多普勒效应及多普勒频移的简单推导

多普勒效应及多普勒频移的简单推导 fd≡fR−fT(1)f_d\equiv f_R-f_T \tag{1} fd​≡fR​−fT​(1)   式中&#xff0c;fdf_dfd​表示多普勒频移&#xff0c;fRf_RfR​表示目标回波的频率&#xff08;Hz),fTf_TfT​表示发射信号的频率&#xff08;Hz&#xff09;。 多普勒频移…

amazons3 检查连接是否_钢筋机械连接接头如何检查是否合格?抽检数量、合格率是多少?...

一、钢筋机械连接介绍1、钢筋机械连接在连接区段内接头率的规定(35d)&#xff1a;★接头宜设置在结构构件中受拉应力较小的部位&#xff0c;当需要在高应力部位设置时&#xff0c;在同一连接区段内Ⅲ接头的接头率不应大于25%&#xff0c;Ⅱ接头率不应大于50%&#xff0c;Ⅰ接头…

学容器必须懂 bridge 网络 - 每天5分钟玩转 Docker 容器技术(32)

上一节我们讨论了 none 和 host 类型的容器网络&#xff0c;本节学习应用最广泛也是默认的 bridge 网络。 Docker 安装时会创建一个 命名为 docker0 的 linux bridge。如果不指定--network&#xff0c;创建的容器默认都会挂到 docker0 上。 当前 docker0 上没有任何其他网络设备…

驻定相位原理(POSP)的简单应用

在SAR雷达成像中&#xff0c;POSP是相当基础重要的一个定理&#xff0c;一般在对回波做傅里叶变换时经常用到&#xff0c;一般在论文的开头就会出现。   下面简单复习一下POSP的步骤&#xff1a; 1&#xff1a;列出傅里叶变换表达式 2&#xff1a;对相位在驻定相位点处泰勒展…

vs2019 更新安装错误_本月Windows 10累积更新再出BUG:安装时跳出错误代码

在本月的补丁星期二活动日中&#xff0c;微软为所有支持的 Windows 10 系统带来了新一轮的累积更新。和以往一样&#xff0c;本次发布的 KB4566782 和 KB4565351 两个累积更新又出现了新的 BUG。根据用户反馈&#xff0c;Windows10 Version 2004/1909/1903 功能更新安装这些累积…

【python】画一个爱心

python画爱心 做二级python题目的时候&#xff0c;遇到了一个画爱心编程题&#xff0c;感觉挺有趣的&#xff0c;把它搬到这里来。 from turtle import * def curvemove():for i in range(200):right(1)forward(1) setup(600,600,400,400) hideturtle() pencolor(black) fill…

上天入海又怎样?阿里的运动达人纷纷表示不服

6月23日是国际奥林匹克日。奥林匹克精神其实是一个普遍的概念。所有能使人变得更好的原则&#xff0c;都包容它明亮的光环里。2017年1月19日&#xff0c;阿里巴巴和国际奥委会在洛桑共同宣布top合作伙伴计划&#xff0c;开启了为期12年的阿里奥运之旅。阿里将给世界带来“云上的…

cordova 更改app版本_Cordova打包Android应用流程(MAC)

扩展阅读基于Cordova批量打场景包(MAC)APP包名称命名规则1. 安装cordova打包应用brew install cordova2. 创建cordova项目执行命令 create app com.githen.app 测试app * app 项目的目录名称 ( 下面所有目录均以此目录为根目录说明 ) * com.githen.app 项目包名称 * 测试app 项…

深搜——数字划分问题

TYVJ 1271 零式求和 描述 请考虑一个由1到N&#xff08;N3, 4, 5 ... 9&#xff09;的数字组成的递增数列&#xff1a;1 2 3 ... N。现在请在数列中插入“”表示加&#xff0c;或者“-”表示减&#xff0c;抑或是“ ”表示空白(例如1-2 3就等于1-23)&#xff0c;来将每一对数字…

正交解调原理

雷达系统发射和接收的脉冲是实信号。本文解释了如何通过正交解调对接收信号进行频带搬移&#xff0c;从而获得一个复的基带信号。  一般具有较高载频的低频调制实信号表示如下&#xff1a; x(τ)cos[2πf0τϕ(τ)](1)x(\tau)cos[2\pi f_0\tau\phi(\tau)]\tag{1} x(τ)cos[2π…

channelinactive触发后不关闭channel_go那些事儿|channel使用及其实现原理

目录 channel背景channel基本用法channel应用场景channel实现原理channel数据结构channel实现方式channel注意事项闲聊欢迎加入我的公众号【迈莫coding】 一起pk大厂1channel背景channel是Go的核心类型&#xff0c;是Go语言内置的类型&#xff0c;你无需引包&#xff0c;就能使…

matlab画信号频谱

为了让大学生活充实一点&#xff0c;多学点东西&#xff0c;我选修了《数字信号处理》。现在充实得不要不要的。 clc close all clear%参数设置% Fs 1000; % Sampling frequency T 1/Fs; % Sampling period L 1500; …

关于字节序(大端法、小端法)的定义

关于字节序(大端法、小端法)的定义《UNXI网络编程》定义&#xff1a;术语“小端”和“大端”表示多字节值的哪一端(小端或大端)存储在该值的起始地址。小端存在起始地址&#xff0c;即是小端字节序&#xff1b;大端存在起始地址&#xff0c;即是大端字节序。 也可以说&#xff…

html div初始隐藏点击可见_3种CSS3移动手机隐藏菜单UI界面代码解析/附源码下载...

这是一款效果非常酷的jQuery和CSS3移动手机隐藏菜单UI界面设计。这个UI设计共有三种不同的打开隐藏菜单的效果&#xff0c;分别为滑动显示&#xff0c;Material Design风格效果和展开式效果。使用方法HTML结构这三种不同的隐藏菜单的HTML结构大致基本相同。第一种滑动效果菜单的…