NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

机器学习笔记(四):逻辑回归的多分类

  • 2020-04-04
  • 本文字数:2357 字

    阅读完需:约 8 分钟

机器学习笔记(四):逻辑回归的多分类

一般情况下,我们都认为逻辑回归(LR)用来解决二分类问题,模型输出是 y=1 的概率值。那逻辑回归能否用来做多分类任务呢,答案是肯定的。


这里有两种方法使得逻辑回归能进行多分类任务:


一、将多分类任务拆解成多个二分类任务,利用逻辑回归分类器进行投票求解;


二、对传统的逻辑回归模型进行改造,使之变为 softmax 回归模型进行多分类任务求解

多分类任务拆解成多个二分类器

首先了解下进行多分类学习任务的策略,第一种策略是直接采用支持多分类的模型,例如 K 近邻分类器、决策树等,第二种策略则是利用多个二分类学习期来解决多分类问题。第一种策略中的多分类模型后面会逐一详细介绍,这里重点介绍下第二种策略。


第二种策略的基本思路是“拆解”,将多分类任务拆为多个二分类任务求解,一般有 3 种拆分策略:


(1)OvO(一对一,One vs One):假如数据 D 中有 N 个类别,将 N 个类别进行两两配对,产生 N(N-1)/2 个二分类器,在预测中,将测试样本输入这 N(N-1)/2 个二分类器中得到相应个数的预测结果,然后再将被预测结果数最多的(Voting)作为最终分类结果。


下图是一个简单的例子,数据集中有 4 种类别,两两配对可以产生 6 个二分类器,将测试样本输入分类器中可得到 6 个预测结果,通过投票取最多的预测结果类别 1 作为最后的预测结果。



2)OvR(一对其余,One vs Rest): 将一个类别作为正例,其余所有类别作为反例,这样 N 个类别可以产生 N 个二分类器,将测试样本输入这些二分类器中中得到 N 个预测结果,如果仅有一个分类器预测为正类,则将对应的预测结果作为最终预测结果。如果有多个分类器预测为正类,则选择置信度最大的类别作为最终分类结果。


下图所示,数据集中共 4 个类别,产生 4 个二分类器,类别 2 对应的分类器 2 预测结果为正例,则最终预测结果为类别 2。



(3)MvM(多对多,Many vs Many):将数据集中的若干个类作为正例,若干个其他类作为反例。MvM 的正、反类构造必须有特殊的设计,而不是随意选取,通常采用“纠错输出码(ECOC)”,产生编码矩阵后划分类别。


编码:将 N 个类做 M 次划分,每次划分一些是正类,一些是负类。共产生 M 个二分类器。


解码:M 个分类器对新样本测试,其结果组成一个编码,与各个类别的编码比较,返回距离最小的类别为最终结果。


编解码的详细过程可参考周志华的西瓜书。


了解了多分类任务拆分为多个二分类问题的算法原理后,利用 sklearn 的鸢尾花数据集验证一下,该数据集有 4 个特征属性,3 种分类{‘setosa’, ‘versicolor’, ‘virginica’},我利用 OvR 和 MvM 两种策略进行多分类的学习及预测:


Python 代码


from sklearn import datasetsfrom sklearn.cross_validation import train_test_splitfrom sklearn.multiclass import OneVsRestClassifierfrom sklearn.multiclass import OneVsOneClassifierfrom sklearn.linear_model import LogisticRegressionfrom sklearn.metrics import accuracy_score
data_iris = datasets.load_iris()x, y = data_iris.data, data_iris.targetx_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.3,random_state = 0)
# 使用multiclass的OvO多分类策略,分类器使用LogisticRegressionmodel = OneVsOneClassifier(LogisticRegression(C=1.0, tol=1e-6))model.fit(x_train, y_train)y_pred = model.predict(x_test)print(accuracy_score(y_test, y_pred))============================================0.9555555555555556
# 使用multiclass的OvR多分类策略,分类器使用LogisticRegressionmodel = OneVsRestClassifier(LogisticRegression(C=1.0, tol=1e-6))model.fit(x_train, y_train)y_pred = model.predict(x_test)print(accuracy_score(y_test, y_pred))============================================0.8888888888888888
复制代码


从验证结果上来看,OvO 策略和 OvR 策略类似,在大多数情况分类效果差不多(小数据量和少类别的情况下可能 OvO 效果更好),OvO 训练的分类器数目比 OvR 多,所以 OvO 的存储开销和训练时间通常比 OvR 更大,但由于训练时,OvR 的每个分类器需要用到所有训练样例,而 OvO 的每个分类器只用到两个类别的样例,所以在大数据集和类别较多的情况下,OvO 的训练时间开销比 OvR 更小。

softmax 回归

softmax 回归其实是逻辑回归的一种变形,逻辑回归模型输出的是两种类别的概率,softmax 回归输出的 K 种类别的概率。模型公式如下:



参数θ是一个矩阵,矩阵的每一行可以看做是一个类别所对应分类器的参数,总共有 k 行,输出的 K 个数就表示该类别的概率,总和为 1。这样,softmax 回归模型对于一个测试样本,可以得到多个类别对应的概率值,模型选取概率最高的类别作为最终判定结果。


在 sklearn 中使用 softmax 回归还是调用 linear.model.LogisticRegression,设置一下 multi_class 参数即可,内部即会使用 softmax 函数计算出每个类别的概率。


Python 代码


# 采用softmax回归进行分类model = LogisticRegression(C=1.0, tol=1e-6, multi_class='multinomial', solver='newton-cg')model.fit(x_train, y_train)y_pred = model.predict(x_test)print(accuracy_score(y_test, y_pred))====================================0.9777777777777777
输出每个测试样例的类别预测概率print (model.predict_proba(x_test))
复制代码

多个二分类器策略和 softmax 回归的区别

softmax 回归中对一个测试样本得到的属于各类别的概率和一定为 1,而多个二分类器策略中,不管是 OvO、OvR 还是 MvM 策略,一个样本在多个二分类器上得到的概率和不一定为 1。因此当分类之间是互斥的情况下(e.g 数字手写识别、动物识别),通常采用 softmax 回归;而目标类别不是互斥时(e.g 华语音乐、流行音乐、重金属音乐等)则采用多个二分类器策略进行预测。


作者:华为云专家周捷


公众号推荐:

跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。

2020-04-04 16:598083

评论

发布
暂无评论
发现更多内容

有道QAnything背后的故事---关于RAG的一点经验分享

有道技术团队

语言 & 开发 #开源

“智慧工程”助力房企突破发展瓶颈,精细化管理降本增效

Kyligence

大数据 数字化 解决方案 精细化管理

JavaScript中的包装类型详解

秃头小帅oi

JavaScript 前端

英特尔携手AT&T、德国电信等推动vRAN创新,AI技术提升网络能效

E科讯

常用的Linux命令;Linux常用命令用法及实现方式

小魏写代码

运维一款月变更70+次的服务,是一种什么体验?

华为云开发者联盟

开发 华为云 华为云开发者联盟

Java实战1

thinkers

线程池、Lambda、Java实战

探索AIGC在腾讯自选股应用

ninetyhe

腾讯 AI 大模型 AIGC

阿里云大降价后,与主流云厂商的价格对比,你选哪家?

NineData

数据库 阿里云 服务器 云厂商 阿里云降价

化是渐化,变是顿变:一窥 OpenAI Sora 相关技术的演进

Baihai IDP

程序员 AI openai 白海科技 GenAI

App应用程序(概念、开发步骤、技术要点介绍)

天津汇柏科技有限公司

定制软件开发 app定制开发 软件开发定制

Module2作业

大鹏

马帮ERP与ETLCloud快速同步

RestCloud

数据同步 ETL 数据集成 ERP

把简单留给用户,把复杂交给 AI

Kyligence

大数据 AI 数据治理 指标平台

面试官:说说SSO单点登录的实现原理?

王磊

Java 面试

Redisson 框架中的分布式锁

emanjusaka

Java redis redisson 分布式锁

手把手带你快速上手香橙派AIpro

华为云开发者联盟

人工智能 华为云 昇腾 华为云开发者联盟 AI开发板

软件测试管理进阶,快速掌握高效沟通的汇报技巧

测试人

软件测试 自动化测试 测试开发 测试管理

软件测试学习笔记丨 k8s环境部署实战

测试人

软件测试 测试开发

WebSocket 连接保持方法详解

Apifox

程序员 前端 后端 websocket 长连接

英特尔x爱立信:以开放式移动网络加速未来关键领域数字化转型

E科讯

Javascript 重难点总结分享,看到就是赚到!

秃头小帅oi

【论文精读】| 综述:模糊测试的艺术、科学和工程(下)

云起无垠

文心一言变身虚拟患者,助力医学生轻松开启「实践模式」

飞桨PaddlePaddle

百度 paddle 百度飞桨 开发者说 文心一言

哪里有office2016安装包?office2016下载含激活工具

Rose

office办公套件 office2016

资深项目管理者教你快速掌握高效沟通的汇报技巧

霍格沃兹测试开发学社

Solidity案例详解(四)投票智能合约

BSN研习社

区块链 Solidity

易点天下旗下出海应用数据分析与增长模型平台即将发布,一大波内测福利正在袭来!

新消费日报

Axure RP 9 与其他原型设计工具的比较:为何它是您的最佳选择?

Rose

原型设计 Axure RP 9汉化 Axure RP 9授权码

基于 Ractor 模型优化事务复制回放性能

KaiwuDB

数据库

测试管理进阶 | 快速掌握高效沟通的汇报技巧

测吧(北京)科技有限公司

测试

机器学习笔记(四):逻辑回归的多分类_ArchSummit_华为云开发者联盟_InfoQ精选文章