傻瓜攻略(十九)——MATLAB实现SVM多分类

article/2025/9/7 22:02:16

对于组合二元支持向量机模型的多类学习,使用纠错输出码(ECOC,error-correcting output codes )。有关详细信息,请参阅fitcecoc。 ECOC 可以用来将 Multiclass Learning 问题转化为 Binary Classification 问题。

以下内容基于MATLAB官网的介绍文档,进行了一点个人的理解和整理,不算原创,但也不是单纯的翻译。一年的博客写作生涯,随着博士生涯进入正轨,我写博客的动力也变了,原来是纯粹为了分享和成长,想写的方法就学一学写一写。现在不行了,搞科研的方法太多了,能让人皓首穷经,慢慢地,我就变成了没有需求就没有学习的的动力。用不到的方法就不想去学了,python的学习就是这样放下的。SVM也是,这里就开个头吧,不知道以后还有没有机会深入学习,拿出来哪怕一个月的时间,从头到尾地学习。现在这篇博客里的内容缺斤少两的,想看具体的英文内容请点击链接fitcecoc。

MATLAB实现SVM多分类

    • 纠错输出码(ECOC)相关网页
    • 官网的例子
      • Train Multiclass Model Using SVM Learners
      • Train Multiclass Linear Classification Model
      • Cross-Validate ECOC Classifier
      • Estimate Posterior Probabilities Using ECOC Classifier
      • Speed Up Training ECOC Classifiers Using Binning and Parallel Computing
      • Optimize ECOC Classifier
      • Train Multiclass ECOC Model with SVMs and Tall Arrays
    • 其他

纠错输出码(ECOC)相关网页

https://www.deeplearn.me/587.html
https://blog.csdn.net/u010945683/article/details/52743515

官网的例子

Train Multiclass Model Using SVM Learners

使用支持向量机(SVM)二进制学习器训练多类纠错输出代码(ECOC)模型。

% 导入数据,Y中含有三类标签
load fisheriris
X = meas;
Y = species;% 使用默认选项训练多类ECOC模型。
% Mdl是ECOC多分类模型,默认情况下,fitcecoc使用SVM二进制学习器和一对一编码设计,可以使用点表示法访问Mdl属性。
Mdl = fitcecoc(X,Y)% 显示类名称和编码设计矩阵。
% 三个类的一对一编码设计产生三个二进制学习器。CodingMat的列对应于学习器,行对应于类。
% 类顺序与Mdl.ClassNames类中的顺序相同
% 例如,CodingMat(,1)[1;1;0],表示matlab使用分类为"setosa""versicolor"的所有观测值训练第一个支持向量机二进制学习者。
% 因为'setosa'对应于1,所以它是正类;'versicolor'对应于-1,所以它是负类。
Mdl.ClassNames
CodingMat = Mdl.CodingMatrix% 使用单元格索引和点表示法访问每个二进制学习器。
Mdl.BinaryLearners{1}   % The first binary learner% 计算替换类别错误。 训练数据的分类误差很小,但是分类器可能是过拟合模型。 可以使用crossval对分类器进行交叉验证,并计算交叉验证分类错误。
error = resubLoss(Mdl)

Train Multiclass Linear Classification Model

训练由多个二进制,线性分类模型组成的ECOC模型。

% 导入数据
load nlpdata
% X是预测数据的稀疏矩阵,Y是类标签的分类向量。数据中有两个以上的类。
% 创建默认的线性分类模型模板。
t = templateLinear();
% 训练由多个二进制,线性分类模型组成的ECOC模型,这些模型可以根据文档网页上单词的频率分布来识别产品。 
% 为了缩短训练时间,请转置预测数据,并指定观察值对应于列。
X = X';
rng(1); % For reproducibility 
Mdl = fitcecoc(X,Y,'Learners',t,'ObservationsIn','columns')

Cross-Validate ECOC Classifier

使用SVM二进制学习器对ECOC分类器进行交叉验证,并估计分类错误。

% 交叉验证ECOC分类器
% 加载Fisher的虹膜数据集,指定预测变量数据X和标签Y。
load fisheriris
X = meas;
Y = species;
rng(1); % For reproducibility
% 创建一个SVM模板,并标准化预测变量。
% t是一个SVM模板。 大多数模板对象属性为空,训练时,属性为其默认值。
t = templateSVM('Standardize',true)
% 训练ECOC分类器Mdl,并指定类别顺序。
Mdl = fitcecoc(X,Y,'Learners',t,...'ClassNames',{'setosa','versicolor','virginica'});
% 使用10倍交叉验证对Mdl进行交叉验证
CVMdl = crossval(Mdl);
% 估计广义分类误差,误差越小说明分类器的泛化效果越好
genError = kfoldLoss(CVMdl)

Estimate Posterior Probabilities Using ECOC Classifier

使用SVM二进制学习器训练ECOC分类器。首先预测训练样本标签和类后验概率,然后预测网格中每个点的最大类后验概率,并可视化结果。(啊不想看了)

Speed Up Training ECOC Classifiers Using Binning and Parallel Computing

使用合并和并行计算加快训练ECOC分类器的速度。
使用具有替代分割的决策树GentleBoost集成训练一个一对多ECOC分类器。 为了加快训练速度,合并(bin应该是这个意思)数值预测器并使用并行计算。Binning只有在fitcecoc使用树型学习器时才有效。训练结束后,利用10倍交叉验证估计分类误差。

Optimize ECOC Classifier

每个SVM相关函数的实例中都有一个优化的例子

Train Multiclass ECOC Model with SVMs and Tall Arrays

创建两个基于高数据训练的多类ECOC模型。其中一个模型使用线性二进制学习器,另一个模型使用核心二进制学习器。 比较两个模型的分类误差。

其他

输入输出设置的内容也有很多,需要注意的是,在这里,可以使用多种分类器进行多分类,SCM只是其中的一种。

此外,fitcecoc只支持稀疏矩阵(稀疏矩阵是个啥?)用于训练线性分类模型。对于所有其他模型,请提供完整的预测数据矩阵。

更多的内容需要进一步学习啊,学吧,学无止境,太深了。
在这里插入图片描述


http://chatgpt.dhexx.cn/article/Oqi6TaPN.shtml

相关文章

【机器学习】SVM多分类问题及基于sklearn的Python代码实现

SVM多分类问题及Python代码实现 1. 什么是SVM?2. SVM的分类3. SVM决策函数类型4. SVM多分类的Python代码实现参考资料1. 什么是SVM? 对于这个点已经介绍的非常多了,不管是西瓜书还是各种博客,就是需要找到一个超平面,用这个超平面把数据划分成两个类别,最开始的SVM就是在…

SVM多分类问题

SVM本身是一个二值分类器,SVM算法最初是为二值分类问题设计的,当处理多类问题时,就需要构造合适的多类分类器。 1、直接法 :直接在目标函数上进行修改,将多个分类面的参数求解合并到一个最优化问题中,通…

《机器学习算法》SVM进行多分类及代码实现

最近做了一个工作就是对属性进行分类,然后用了不同的分类器,其中就用到了SVM,再次做一个总结。 1、什么是SVM? 对于这个点已经介绍的非常多了,不管是西瓜书还是各种博客,就是我们需要找到一个超平面&…

android uevent机制,安卓linux uevent内核上报机制实例

uevent可以实现内核通知上层的一种机制,最常见的电池状态的变化就是kernel uevent通知的,每次百分比或者其他的变化通过power_supply_changed通知上层update; 每个device下面都有kobj,找到device就可以通过kobject_uevent_env 通知android了; 以拔出T卡为例,内核通知上层。…

Linux设备模型剖析系列之二(uevent、sysfs)

CSDN链接: Linux设备模型剖析系列一(基本概念、kobject、kset、kobj_type) Linux设备模型剖析系列之二(uevent、sysfs) Linux设备模型剖析系列之三(device和device driver) Linux设备模型剖析系…

Linux下的uevent

查找linux的uevent节点(find /sys -name uevent),大概有1000多个,那这些节点是怎么实现的呢。 drivers/base/core.c 有如下代码,每创建一个device,都会创建一个event节点 static ssize_t uevent_show(struct device *dev, struc…

Android UEvent事件分析

1.背景概述 众所周知,在安卓系统中有状态栏,在插入外设的时候,会在顶部状态栏显示小图标。 比如,camera设备,耳机设备,U盘,以及电池等等。这些都需要在状态栏动态显示。 从上面这张图片可以看出这些设备都有自己的服务一直在跑,并且都是继承了UEventObserver.java这个…

嵌入式Linux——uevent机制:uevent原理分析

简介: 本文主要介绍uevent机制是什么,并通过代码分析使用uevent机制生成设备节点的过程。而本文将分为两部分,第一部分我们介绍一些预备知识和uevent的原理,而第二部分——通过代码介绍使用uevent机制创建设备节点。 Linux内核&am…

uevent机制:uevent原理分析

简介: 本文主要介绍uevent机制是什么,并通过代码分析使用uevent机制生成设备节点的过程。而本文将分为两部分,第一部分我们介绍一些预备知识和uevent的原理,而第二部分——通过代码介绍使用uevent机制创建设备节点。 声明&#…

900 多道 LeetCode 题解,这个 GitHub 项目值得 Star!

公众号关注 “GitHubPorn” 设为 “星标”,每天带你逛 GitHub! 大家好,我是小 G。 周末风和日丽,适合刷 LeetCode 今天给你们推荐个 GitHub 项目,里面收集了 900 多道 LeetCode 题解,并包含中英文两个版本&…

Leetcode中你的代码执行之后显示超出时间限制

Leetcode中但凡是你的代码执行之后显示超出时间限制 比如: 那么必定是你写的代码不够完善甚至是还存在错误!

升职加薪,必不可少!Python刷题打怪,你要的LeetCode答案都在这里了!

对于还不了解LeetCode的同学,那比较厉害了,估计离大厂还有一步距离! LeetCode,让程序员进阶的在线平台,找工作备战名企技术面试!(文末阅读原文到达学习平台) 本公众号之前陪伴了几期LeetCode的打卡之旅&…

LeetCode 96~100

前言 本文隶属于专栏《LeetCode 刷题汇总》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构请见LeetCode 刷题汇总 正文 幕布 幕布链接 96. 不同的二叉搜索树 题解 官方…

【下载】快速通过Python笔试?学大家一样先把LeetCode答案私藏了

如今学习python的同学越来越多了,也正是同学们秋招时期,去年分享了LeetCode答案后,已经有上百位同学找到小编开始实践这个平台。 LeetCode,让程序员进阶的在线平台,找工作备战名企技术面试!(文末阅读原文到…

面试失败总结,这 577 道 LeetCode 题 Java 版答案你值得拥有

去字节、美团、BAT 等大厂面试,刷 LeetCode 上的数据结构算法题是必修课。许多读者说,刷题的时候经常会遇到困难,想要找一本答案题解做参考。 下面分享几个用 Java 语言实现的开源 LeetCode 题解,也要感谢这些优秀的开源作者们&a…

LeetCode答案大全题(java版)

思路:查找时, 建立索引(Hash查找) 或进行排序(二分查找)。本题缓存可在找的过程中建立索引,故一个循环可以求出解(总是使用未 使用元素查找使用元素,可以保证每一对都被检…

LeetCode数据库题目汇总一(附答案)

1、基础SQL 数据表: dept: deptno(primary key), dname, loc emp: empno(primary key), ename, job, mgr(references emp(empno)), sal, deptno(references dept(deptno)) 1 列出emp表中各部门的部门号,最高工资,最低工资 select max(sal) as 最高工资,min(sal) as 最…

Leetcode各种题型题目+思路+代码(共176道题及答案)

文章目录 第一章:Leetcode 每日很多题 1、Leetcode-1047 删除字符串中的所有相邻重复项 2、剑指 Offer 53 - I. 在排序数组中查找数字 I 3、Leetcode704:二分查找 4、 Leetcode 227:基本计算器II 5、leetcode 224:基本计算器(带括号的计…

Leetcode Top100题目和答案(Java完整版 面试必备)

二刷完剑指Offer后又刷了一遍Leetcode Top 100专栏的题目,听说基本上能涵盖面试的算法题,总体来说收获还是很大的,下面贴出答案,又不懂的可以给我留言,博主会及时解答。 我的github 准备把春招复习的知识都整理到githu…

数据可视化-柱状图-dict结构MACARONS主题

from pyecharts.charts import Bar from pyecharts.faker import Faker from pyecharts.globals import ThemeTypec (Bar({"theme": ThemeType.MACARONS}).add_xaxis(Faker.choose()).add_yaxis("商家A", Faker.values()).add_yaxis("商家B", F…