多分类学习

  • OVO和OVR
  • sklearn实现多分类问题:鸢尾花分类

OVO和OVR

之前提到的是二分类问题,问题结果是0或1这种明显分为两类的。在现实任务中往往遇到的是多分类问题,有些二分类学习方法可以推广到多分类上使用,但是在更多情况下可以使用拆解法,把一个多分类任务分成多个二分类任务解决。

多分类问题的解决思路就是使用拆解法。利用二分类学习器进行多分类问题学习。先对问题进行拆分,再为拆分出来的每一个二分类任务训练一个二分类学习器。最后在进行预测的时候,把这些二分类学习器预测结果进行集成来获得多分类问题最终的结果。

上述解决思路中最关键的就是如何对多分类任务进行拆分,如何对多个分类器进行集成。

最经典的拆分策略有三个:OVO,OVR,MvM。分别是:一对一,一对多,多对多

这次主要介绍一对一和一对多进行多分类任务的拆分。看图理解。

OVO:进行两两配对,比如有c1,c2,c3,c4四个样例,那么如下图一共有6种情况,会训练出6个分类器,在最终测试时,将6种分类器预测到的结果集成得到最终结果。

OVR:每次将一个类的样例作为正例,其他都为反例来训练出N个训练器。在测试时,如果N个分类器预测出的N个结果中只有一个分类器预测到的是正类,那么该分类器预测到的结果就是最终结果。
比如在下图中,4个类的样例有4个分类器,只有第三个预测结果为正类,则取该结果为最终结果。

sklearn实现多分类问题:鸢尾花分类

这次代码中由于数据集中的数据类型杂乱,有字符串和小数,所以使用pandas库结合numpy对数据进行处理。

部分数据集如下图:

在Sklearn机器学习包中,集成了各种各样的数据集,这里引入的是鸢尾花卉(Iris)数据集,它是很常用的一个数据集。鸢尾花有三个亚属,分别是山鸢尾(Iris-setosa)、变色鸢尾(Iris-versicolor)和维吉尼亚(Irisvirginica)。
该数据集一共包含4个特征变量,1个类别变量。共有150个样本,iris是鸢尾植物,这里存储了其萼片和花瓣的长宽,共4个属性,鸢尾植物分三类。

所以在对数据进行处理的过程中,要把最后一列字符串数据通过字典映射为0,1,2三个类别,方便后续处理。

import numpy as np
import pandas as pd
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split#使用pandas库读取函数
def per_read(path):data=pd.read_csv(path) #pandas读取数据class_dict={'Iris-setosa':0,'Iris-versicolor':1,'Iris-virginica':2} #字典转换data['species']=data['species'].map(class_dict) #使用map进行替换#print(data)#进行数据分割x=data.iloc[:,0:-1]y=data.iloc[:,-1]x=np.array(x,dtype=np.float)y = np.array(y, dtype=np.float)#数据归一化处理mu=x.mean(0)std=x.std(0)x=(x-mu)/std#分测试集与数据集x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.33)return x_train,x_test,y_train,y_test#OVO的计算函数
def ovo(x_train,x_test,y_train,y_test):log_model=LogisticRegression(solver="lbfgs",multi_class="multinomial")##self.solver参数决定了我们对逻辑回归损失函数的优化方法,lbfgs是拟牛顿法multi_class="multinomial"是制定使用ovolog_model.fit(x_train,y_train)y_predict=log_model.predict(x_test)print(np.sum(y_predict==y_test)/len(y_test)) #计算预测的准确率#OVR的计算函数
def ovr(x_train,x_test,y_train,y_test):log_model=LogisticRegression(solver="lbfgs",multi_class="ovr")#是用牛顿法进行优化,并指定使用ovrlog_model.fit(x_train,y_train)y_predict=log_model.predict(x_test)print(np.sum(y_predict==y_test)/len(y_test))if __name__=="__main__":x_train, x_test, y_train, y_test =per_read("F:\comdata\iris.txt")ovo(x_train, x_test, y_train, y_test)ovr(x_train, x_test, y_train, y_test)

多分类问题OVR和OVO----机器学习相关推荐

  1. 机器学习:逻辑回归(OvR 与 OvO)

    一.基础理解 问题:逻辑回归算法是用回归的方式解决分类的问题,而且只可以解决二分类问题: 方案:可以通过改造,使得逻辑回归算法可以解决多分类问题: 改造方法: OvR(One vs Rest),一对剩 ...

  2. 机器学习笔记(五)逻辑回归 、决策边界、OvR、OvO

    目录 1.分类问题 2.逻辑回归 3.损失函数 4.决策边界 5.OvR与OvO 1.分类问题 机器学习中有三大问题,分别是回归.分类和聚类.线性回归属于回归任务,而逻辑回归和k近邻算法属于分类任务. ...

  3. sklearn中实现多分类任务(OVR和OVO)

    sklearn中实现多分类任务(OVR和OVO) 1.OVR和OVO是针对一些二分类算法(比如典型的逻辑回归算法)来实现多分类任务的两种最为常用的方式,sklearn中专门有其调用的函数,其调用过程如 ...

  4. 文本分类学习 (五) 机器学习SVM的前奏-特征提取(卡方检验续集)

    前言: 上一篇比较详细的介绍了卡方检验和卡方分布.这篇我们就实际操刀,找到一些训练集,正所谓纸上得来终觉浅,绝知此事要躬行.然而我在躬行的时候,发现了卡方检验对于文本分类来说应该把公式再变形一般,那样 ...

  5. sklearn.svm.SVC的方法decision_function_shape:ovr 或者 ovo

    原文地址:http://blog.csdn.net/yiqingyang2012/article/details/53437076 SVM算法最初是为二值分类问题设计的,当处理多类问题时,就需要构造合 ...

  6. Multi class ovr or ovo

    one-versus-rest和one-versus-one的不同 SVM算法最初是为二值分类问题设计的,当处理多类问题时,就需要构造合适的多类分类器. 目前,构造SVM多类分类器的方法主要有两类:一 ...

  7. svm多分类_人工智能科普|机器学习重点知识——支持向量机SVM

    作为模式识别或者机器学习的爱好者,同学们一定听说过支持向量机这个概念,这可是一个,在机器学习中避不开的重要问题. 其实关于这个知识点,有一则很通俗有趣的传说: 很久以前,一个村庄里住着一位退隐的大侠, ...

  8. [Python人工智能] 二十一.Word2Vec+CNN中文文本分类详解及与机器学习(RF\DTC\SVM\KNN\NB\LR)分类对比

    从本专栏开始,作者正式研究Python深度学习.神经网络及人工智能相关知识.前一篇文章分享了Keras实现RNN和LSTM的文本分类算法,并与传统的机器学习分类算法进行对比实验.这篇文章我们将继续巩固 ...

  9. 机器学习 文本分类 代码_无需担心机器学习-如何在少于10行代码中对文本进行分类

    机器学习 文本分类 代码 This article builds upon my previous two articles where I share some tips on how to get ...

最新文章

  1. a按钮居中显示 bootstrap_Excel合并后居中,跨越合并,及跨列居中的区别你都知道吗...
  2. MPB:西农焦硕组-微生物生物地理学研究方法
  3. 值引用和引用问题分析
  4. 2014 网选 5014 Number Sequence(异或)
  5. 2019.5.18-5.19 ACM-ICPC 全国邀请赛(西安)赛后总结
  6. python函数abs()
  7. 《Core Data应用开发实践指南》一2.15 小结
  8. Maven ,命令行中,字符编码 设置
  9. Java使用自动化测试脚本selenium
  10. 边缘计算初探:什么是边缘计算,它能做什么?
  11. 中文翻译拉丁文转换_实时正则表达式(猪拉丁文翻译器)
  12. 前端js华为云obs上传下载文件与进度条的设置
  13. 人类的15个欲望与游戏设计
  14. 基于 ESP8266 的智能家居开源解决方案 【文章结尾有资料】
  15. mac中linux 命令
  16. 【架构】工程代码结构(附带NXP、ST官方demo)
  17. 有一个已排好序的数组 要求输入一个数后 按原来排序的规律将它插入数组中
  18. 《麦肯锡笔记思考法》初步学习心得
  19. string字符串内容倒叙_Java实现字符串倒序输出的几种方法
  20. 谭浩强c 语言程序设计

热门文章

  1. OpenWRT 学习笔记 -- 用户自定义添加app的开机自启动
  2. 春考天津计算机知识点资料,2016年天津春季高考计算机基础考试大纲
  3. 如何在滴滴云 DC2 上搭建 MySQL 服务
  4. casella pdf 统计推断_统计推断_PDF图书下载_George Casella,Roger L. Berger_免费PDF电子书下载_第一图书网...
  5. 5G精华问答 | 什么是5G?5G与LTE有什么关系?
  6. arcgis10.2以上版本转换测量队节点所在TXT为所需格式(arctoolbox-samples-features-creat featrure from text file所需要的面格式)
  7. 工作流调度系统Apache DolphinScheduler介绍和设计原理
  8. 参考文献怎么缩进换行
  9. Unity学习笔记1 简易2D横版RPG游戏制作(一)
  10. python开发小程序拼团_拼团商城模式开发(如何开发)