二分类学习推广到多分类学习

入门小菜鸟,希望像做笔记记录自己学的东西,也希望能帮助到同样入门的人,更希望大佬们帮忙纠错啦~侵权立删。

目录

一、主要思想

二、一对一(OvO)

三、一对其余(OvR)

1、方法阐述

2、与OvO的对比

四、多对多(MvM)

1、方法阐述 

2、ECOC

五、python实现


一、主要思想

拆解法——将多分类任务拆为多个二分类问题进行求解。

经典拆分策略有:一对一,一对其余,多对多


二、一对一(OvO)

假定总共有N个类别,我们随机选两个类别来进行二分类学习,那么一共有C_{n}^{2}种组合,即产生C_{n}^{2}个二分类的分类器。最后的预测结果则由这C_{n}^{2}个分类器的结果进行投票得出。


三、一对其余(OvR)

1、方法阐述

假定总共有N个类别,我们随机选一个类别作为正例,其余作为反例来进行二分类学习,产生N个二分类的分类器。最后的预测结果则由这N个分类器的结果进行投票得出(选择最大置信度的那个类别)。

2、与OvO的对比

(1)OvO的存储开销和测试时间比OvR大

(2)OvR的每个分类器都用了全部的样本,OvO的每个分类器仅用到两个类别的样本。

(3)预测性能的区别需要看具体的数据分布,多数情况下两者效果差不多。


四、多对多(MvM)

1、方法阐述 

假定总共有N个类别,我们随机选若干个类别作为正例,其余作为反例来进行二分类学习。

MvM需要有特殊的设计。

常见的MvM技术——纠错输出码(ECOC)

2、ECOC

将编码思想引入类别拆分,并尽可能在解码过程中具有容错性。

基本工作流程:

(1)编码:对N个类别做M次划分,每次划分将一部分类别划分为正类,另一部分划分为反类,从而形成一个二分类训练集。这样就可以训练出M个二分类器。

(2)解码:M个分类器分别对测试样本进行预测分类,这些预测标记组成一个预测编码,将这个预测编码与每个类别各自的编码进行比较,返回其中距离最小的类别作为最终预测结果。

具体过程阐述

类别划分通过编码矩阵指定。常见的编码矩阵形式有二元码和三元码。以下我们以二元码为例:

二分类学习推广到多分类学习_第1张图片

其中+1代表在分类器f_{i}下是正例,-1代表反例。 C代表类别。最后一行是最终得到的测试编码。

海明距离:两个合法代码对应位上编码不同的位数。

欧氏距离:对于C1:sqrt(0+4+4+4+0)=2√3 (C1行编码与测试样例的编码)

基于欧氏距离和海明距离:最终预测结果是C3。

特点:

(1)ECOC编码越长,纠错能力越强,但码长有一定的限制(组合数目的限制)—— 某个分类器若分错了,影响的程度随编码的增长而减弱。

(2)对于同等长度编码,任意两个类别之间的编码距离越远,则纠错能力越强。


五、python实现

详见逻辑回归(Logistic Regression)_tt丫的博客-CSDN博客_逻辑回归csdn

中的“逻辑回归的python实现”——函数参数选择决定多分类任务中的拆解方式


欢迎大家在评论区批评指正,谢谢~

你可能感兴趣的:(机器学习,机器学习,多分类学习,ECOC,OvO,OvR)