写点什么

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

  • 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 华语音乐、流行音乐、重金属音乐等)则采用多个二分类器策略进行预测。


作者:华为云专家周捷


2020-04-04 16:598832

评论

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

干货 | 五大关键点,帮助企业快速构建可落地的IT服务管理体系

嘉为蓝鲸

运维 嘉为蓝鲸 IT服务

嘉为蓝鲸IT服务管理中心V3.0正式发布,实现IT服务管理体系新升级!

嘉为蓝鲸

运维 嘉为蓝鲸 IT服务

Seata 环境搭建

Jeremy Lai

分布式事务 seata

AI 作画领域中的“神笔马良”是怎样炼成的?

行者AI

一图读懂《2022 年中国政企数智办公平台行业研究报告》

融云 RongCloud

办公 数智化 图论

干货 | 企业如何快速采集分析日志?

嘉为蓝鲸

运维 嘉为蓝鲸

EMQ助力阿里云飞天洛神云网络构建新一代“亿级并发、百万级吞吐”NLB网络型负载均衡系统

EMQ映云科技

阿里云 物联网 IoT mqtt 12 月 PK 榜

PID和TID的区别

源字节1号

软件开发 前端开发 后端开发 小程序开发

阿里云ECS后台CPU占用100%,top却找不到

Jeremy Lai

cpu 100% 阿里云;

Spring Cloud 整合 nacos 实现动态配置中心

Jeremy Lai

nacos 动态配置

腾讯发布数字政务核心产品体系,多方位助力政府数字化转型

科技热闻

Lattice – 基于扩展点的多维度业务定制叠加

原力在线

架构 lattice 高可扩展

快速开发协同办公OA系统 让企业管理提质增效

力软低代码开发平台

字节一面:说说TCP的三次握手

Jeremy Lai

三次握手 TCP协议

手把手教你用Java获取IP归属地

Jeremy Lai

IP地址

腾讯云升级云端 IDE Cloud Studio,助力开发“化繁为简”

科技热闻

嘉为蓝鲸WeOps荣获“2022年度行业科技创新产品”

嘉为蓝鲸

运维 嘉为蓝鲸 #WeOps

友元、异常和其他

Maybe_fl

CleanMyMac X2023第三方mac系统清理软件

茶色酒

CleanMyMac X CleanMyMac X2023

2022腾讯Techo前沿技术论坛召开,六位科学家分享前沿科学成果

科技热闻

小程序正式版报错600002 url not in domain list

Jeremy Lai

小程序

后端程序员实现一个IP归属地的小程序

Jeremy Lai

Web3时代到来,腾讯云助力产业提效和互联网创新

科技热闻

1-5-10 快恢在数字化安全生产平台 DPS 中的设计与落地

阿里巴巴云原生

阿里云 云原生 数字化安全生产平台

详解MySQL隔离级别

Jeremy Lai

隔离级别

中国视频云进入“出海”时代,腾讯云音视频发布海外专门品牌及新产品

科技热闻

融云&艾瑞发布《政企数智办公平台行业研究报告》,解读数智化时代的办公新趋势

融云 RongCloud

即时通讯 办公 数智化

超简单的CDH6部署和体验(单机版)

程序员欣宸

大数据 hadoop CDH 12月月更

商务部研究院信用所、启信宝联合发布《中国商务信用发展指数报告(2022)》

合合技术团队

人工智能 大数据 商业

MySQL索引的底层数据结构原理剖析(二叉树、 红黑树、Hash、B-Tree、B+Tree)

C++后台开发

MySQL 数据结构 后端开发 底层原理 C++开发

应用瓴羊Quick BI数据分析,实时掌控企业运营数据

对不起该用户已成仙‖

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