多类别分类器(Machine Learning研习十八)

news2024/11/23 23:35:23

多类别分类器

二元分类器可以区分两个类别,而多类别分类器(也称为多叉分类器)可以区分两个以上的类别。

一些 Scikit-Learn 分类器(如 LogisticRegressionRandomForestClassifier GaussianNB)能够原生处理多个类别。其他分类器则是严格的二进制分类器(如 SGDClassifierSVC)。不过,您可以使用多种策略来使用多个二进制分类器执行多类分类。

要创建一个能将数字图像分为 10 类(从 0 到 9)的系统,一种方法是训练 10 个二进制分类器,每个数字一个(0-检测器、1-检测器、2-检测器,以此类推)。然后,当您想对一幅图像进行分类时,您可以从每个分类器中得到该图像的判定分数,然后选择分类器输出分数最高的类别。这就是所谓的 “以一敌百”(OvR)策略,有时也称为 “以一敌众”(OvA)策略。

另一种策略是为每一对数字训练一个二元分类器:一个用于区分 0 和 1,另一个用于区分 0 和 2,还有一个用于区分 1 和 2,以此类推。这就是所谓的一对一(OvO)策略。如果有 N 个类别,则需要训练 N × (N - 1) / 2 个分类器。对于 MNIST 问题,这意味着要训练 45 个二进制分类器!当你想对一幅图像进行分类时,你必须让图像通过所有 45 个分类器,看看哪个分类器赢得了最多的对决。OvO 的主要优势在于,每个分类器只需在训练集中包含其必须区分的两个类别的部分进行训练。

有些算法(如支持向量机分类器)随训练集的大小而缩放,效果不佳。对于这些算法,OvO 是首选,因为在小训练集上训练多个分类器比在大训练集上训练少数分类器更快。不过,对于大多数二元分类算法来说,OvR 是首选。

Scikit-Learn 会检测你是否尝试在多分类任务中使用二元分类算法,并根据算法自动运行 OvROvO。让我们使用 sklearn.svm.SVC 类支持向量机分类器来尝试一下。我们只对前 2,000 张图像进行训练,否则会耗费很长时间:

from sklearn.svm import SVC

svm_clf = SVC(random_state=42) svm_clf.fit(X_train[:2000], y_train[:2000])  # y_train, not y_train_5

我们使用从 0 到 9 的原始目标类别(y_train),而不是 5 对其余目标类别(y_train_5)来训练 SVC。由于有 10 个类别(即多于 2 个),Scikit-Learn 使用 OvO 策略训练了 45 个二元分类器。现在,让我们对一幅图像进行预测:

在这里插入图片描述

赢得决斗的次数加上或减去一个小调整(最大 ±0.33)以打破平局:没错!这段代码实际上进行了 45 次预测,每对班级一次,并选择了赢得决斗最多的班级。如果你调用 decision_function() 方法,就会看到它为每个实例返回 10 个分数:每个班级一个。根据分类器的得分,每个类得到的分数等于

在这里插入图片描述

得分最高的是 9.3 分,确实是 5 级:

在这里插入图片描述

训练分类器时,分类器会在 classes_ attribute中存储目标类列表,并按值排序。在 MNIST 的情况下,classes_ array 中每个类的索引很容易与类本身相匹配(例如,索引为 5 的类恰好是 "5 "类),但在一般情况下,你就没那么幸运了;你需要像这样查找类标签:

在这里插入图片描述

如果您想强制 Scikit-Learn 使用一对一或一对多,可以使用 OneVsOneClassifier 或 OneVsRestClassifier 类。只需创建一个实例,并向其构造函数传递一个分类器(甚至不必是二进制分类器)。例如,这段代码使用 OvR 策略创建了一个基于 SVC 的多分类器:

from sklearn.multiclass import OneVsRestClassifier

ovr_clf = OneVsRestClassifier(SVC(random_state=42)) ovr_clf.fit(X_train[:2000], y_train[:2000]) 

让我们进行一次预测,并检查已训练分类器的数量:

在这里插入图片描述

在多类数据集上训练 SGDClassifier 并用它进行预测也同样简单:

在这里插入图片描述

预测错误确实会发生!这次,Scikit-Learn 在引擎盖下使用了 OvR 策略:因为有 10 个类别,所以它训练了 10 个二元分类器。现在,decision_function() 方法会为每个类别返回一个值。让我们看看 SGD 分类器为每个类别分配的分数:

在这里插入图片描述

可以看出,分类器对自己的预测不是很有信心:几乎所有的分数都非常负面,而第 3 类的分数为 +1,824 分,第 5 类也不差,为 -1,386 分。当然,你需要在不止一幅图像上对这个分类器进行评估。由于每个类别中的图片数量大致相同,因此准确度指标也没有问题。像往常一样,你可以使用 cross_val_score() 函数来评估模型:

在这里插入图片描述

它在所有测试折叠中的准确率超过 85.8%。如果使用随机分类器,准确率会达到 10%,所以这个成绩还不算太差,但还可以做得更好。只需缩放输入(如第 2 章所述),准确率就能提高到 89.1%以上:

在这里插入图片描述

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

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

相关文章

硬件了解 笔记 2

CPU 内存控制器:负责读写数据 代理系统和平台IO:与主板上的芯片组通信,并管理PC中其他组件之间的数据流 主板:巨大的印刷电路板 Chipset:芯片组,位于散热器下方,直接连接到CPU的系统代理部分 …

HTTP/1.1、HTTP/2、HTTP/3 演变(计算机网络)

HTTP/1.1 相比 HTTP/1.0 提高了什么性能? HTTP/1.1 相比 HTTP/1.0 性能上的改进: 使用长连接改善了短连接造成的性能开销。支持管道网络传输,只要第一个请求发出去了,不必等其回来,就可以发第二个请求出去&#xff0c…

UniApp 应用发布到苹果商店指南

🚀 想要让你的 UniApp 应用在苹果商店亮相吗?别着急,让我来带你一步步完成这个重要的任务吧!在这篇博客中,我将详细介绍如何将 UniApp 应用顺利发布到苹果商店,让你的应用跻身于苹果生态之中。 引言 &…

MySQL 数据学习笔记速查表(视图、存储过程、事务)

文章目录 十三、视图1、视图是什么?2、视图的特性?3、视图的作用?4、视图的用途?5、视图的使用?1、基本语法2、创建视图3、调用视图4、视图练习(1) 利用试图简化复杂的联结(2) 利用视图重新格式化检索出的数据(3) 利用…

【flutter封装图片/视频选择控件】

引入库 wechat_assets_picker: ^6.0.5 、video_player: ^2.5.1 # 视频播放、 flutter_screenutil: ^5.7.0 import dart:async; import dart:io; import package:generated/l10n.dart; import package:jade/configs/PathConfig.dart; import package:jade/customWidget/addImag…

gateway应用(1)

1 简介 简单理解---业务服务的统一入口,方便实现,服务路由,安全,限流,过滤,黑白名单,证书加密解密,服务降级/熔断,灰度,等等 2 介绍 Predicate&#xff08…

Raven:一款功能强大的CICD安全分析工具

关于Raven Raven是一款功能强大的CI/CD安全分析工具,该工具旨在帮助广大研究人员对GitHub Actions CI工作流执行大规模安全扫描,并将发现的数据解析并存储到Neo4j数据库中。 Raven,全称为Risk Analysis and Vulnerability Enumeration for C…

Linux操作系统基础入门​

1、操作系统简介​ a. DOS 和 Windows NT​ DOS是一个与Unix完全不相干的操作系统,这一点可以从DOS使用反斜杠来表示文件目录分隔符上 看出来。随着IBM个人PC的流行,微软DOS操作系统在个人电脑上流行起来。Windows 95, Windows 98, 和 Windows ME底层都…

Databend 集成 PRQL:现代数据处理的一小步

PRQL,读作 “Prequel”,是一种与 SQL 并肩的查询语言,它的独到之处在于采用了管道式的语法,在查询关系数据库时显得更加直观和高效。 Databend 拥抱 PRQL 在 v1.2.380-nightly 版本中,得益于社区贡献者 ncuwaln 提交…

《PDVC》论文笔记

PS:模型代码解释清明后出 原文链接: [2108.07781v1] End-to-End Dense Video Captioning with Parallel Decoding (arxiv.org) 原文笔记: What: End-to-End Dense Video Captioning with Parallel Decoding 并行解码的端到端…

法律行业案例法模型出现,OPenAI公布与法律AI公司Harvey合作案例

Harvey与OpenAl合作,为法律专业人士构建了一个定制训练的案例法模型。该模型是具有复杂推理广泛领域知识以及超越单一模型调用能力的任务的AI系统,如起草法律文件、回答复杂诉讼场景问题以及识别数百份合同之间的重大差异。 Harvey公司由具有反垄断和证…

uniapp,文字超出几行显示省略号...,展开显示更多

效果图&#xff1a; 代码&#xff1a; <template><view class"text-container"><text class"text-content" click"showDetail">{{ text }}</text><text v-if"showMore" class"view-detail" cli…

ModusToolbox 实战入门- XMC GPIO应用篇

导读 ModusToolbox™ 软体&#xff1a;MCU 开发的利器 ModusToolbox™ 软体是一组支援 MCU 周边配置和应用的工具和发展。这些工具使您能够将我们的 MCU 整合到您现有的开发方法中。 ModusToolbox™ 软体的优点 提供完整的 MCU 周边配置和应用工具可整合到现有的开发方法中…

C++——异常机制

目录 一&#xff0c;背景 1.1 C语言处理错误的方式 1.2 C异常概念 二&#xff0c;异常的使用 2.1 异常的简单使用 2.2 异常的匹配原则 2.3 异常抛对象 2.4 异常的重新抛出 2.5 异常安全 三&#xff0c;自定义异常体系 四&#xff0c;异常优缺点 4.1 优点 4.2 缺点 …

NOIP2014提高组D1T2:联合权值

题目链接 NOIP2014提高组D1T2&#xff1a;联合权值 题目描述 无向连通图 G G G 有 n n n 个点&#xff0c; n − 1 n-1 n−1 条边。点从 1 1 1 到 n n n 依次编号,编号为 i i i 的点的权值为 W i W_i Wi​&#xff0c;每条边的长度均为 1 1 1。图上两点 ( u , v ) (…

环保用电监测系统诞生与作用

随着全球能源危机的加剧和环境保护意识的提高&#xff0c;环保用电监测系统应运而生。这一系统以其独特的监测能力、数据分析和节能减排功能&#xff0c;在提高用电效率和促进环境可持续发展方面发挥着重要作用。本文将从环保用电监测系统的诞生背景、主要功能、作用以及在实际…

基于Springboot + MySQL + Vue 大学新生宿舍管理系统 (含源码)

目录 &#x1f4da; 前言 &#x1f4d1;摘要 &#x1f4d1;操作流程 &#x1f4da; 系统架构设计 &#x1f4da; 数据库设计 &#x1f4ac; 管理员信息属性 &#x1f4ac; 学生信息实体属性 &#x1f4ac; 宿舍安排信息实体属性 &#x1f4ac; 卫生检查信息实体属性 &…

leet hot 100-10 和为 K 的子数组

和为 K 的子数组 原题链接思路代码 原题链接 leet hot 100-10 560. 和为 K 的子数组 思路 看到连续非空数组 想到前缀和数组 首先记录前缀和 然后从前往后运算 计算当前位置的前缀和的大小 减少k个 那么这个数字在前缀和的数组中有多少 时间复杂度O(n) 空间复杂度(n) 代…

python基础——模块【模块的介绍,模块的导入,自定义模块,*和__all__,__name__和__main__】

&#x1f4dd;前言&#xff1a; 这篇文章主要讲解一下python基础中的关于模块的导入&#xff1a; 1&#xff0c;模块的介绍 2&#xff0c;模块的导入方式 3&#xff0c;自定义模块 &#x1f3ac;个人简介&#xff1a;努力学习ing &#x1f4cb;个人专栏&#xff1a;C语言入门基…

招聘信息分享(第一期)

今天给大家带来——测绘、地信、遥感领域的事业单位招聘信息&#xff01;这也是我自己在关注的&#xff0c;自己应聘单位大多时间已经截至&#xff0c;后期会陆续分享&#xff0c;先分享近期招聘的事业单位 文章目录 1、宁夏大学2024年人才招聘2、甘肃有色冶金职业技术学院3、…