入门小菜鸟,希望像做笔记记录自己学的东西,也希望能帮助到同样入门的人,更希望大佬们帮忙纠错啦~侵权立删。
目录
一、主要思想
二、一对一(OvO)
三、一对其余(OvR)
1、方法阐述
2、与OvO的对比
四、多对多(MvM)
1、方法阐述
2、ECOC
五、python实现
拆解法——将多分类任务拆为多个二分类问题进行求解。
经典拆分策略有:一对一,一对其余,多对多
假定总共有N个类别,我们随机选两个类别来进行二分类学习,那么一共有种组合,即产生个二分类的分类器。最后的预测结果则由这个分类器的结果进行投票得出。
假定总共有N个类别,我们随机选一个类别作为正例,其余作为反例来进行二分类学习,产生N个二分类的分类器。最后的预测结果则由这N个分类器的结果进行投票得出(选择最大置信度的那个类别)。
(1)OvO的存储开销和测试时间比OvR大
(2)OvR的每个分类器都用了全部的样本,OvO的每个分类器仅用到两个类别的样本。
(3)预测性能的区别需要看具体的数据分布,多数情况下两者效果差不多。
假定总共有N个类别,我们随机选若干个类别作为正例,其余作为反例来进行二分类学习。
MvM需要有特殊的设计。
常见的MvM技术——纠错输出码(ECOC)
将编码思想引入类别拆分,并尽可能在解码过程中具有容错性。
基本工作流程:
(1)编码:对N个类别做M次划分,每次划分将一部分类别划分为正类,另一部分划分为反类,从而形成一个二分类训练集。这样就可以训练出M个二分类器。
(2)解码:M个分类器分别对测试样本进行预测分类,这些预测标记组成一个预测编码,将这个预测编码与每个类别各自的编码进行比较,返回其中距离最小的类别作为最终预测结果。
具体过程阐述
类别划分通过编码矩阵指定。常见的编码矩阵形式有二元码和三元码。以下我们以二元码为例:
其中+1代表在分类器下是正例,-1代表反例。 C代表类别。最后一行是最终得到的测试编码。
海明距离:两个合法代码对应位上编码不同的位数。
欧氏距离:对于C1:sqrt(0+4+4+4+0)=2√3 (C1行编码与测试样例的编码)
基于欧氏距离和海明距离:最终预测结果是C3。
特点:
(1)ECOC编码越长,纠错能力越强,但码长有一定的限制(组合数目的限制)—— 某个分类器若分错了,影响的程度随编码的增长而减弱。
(2)对于同等长度编码,任意两个类别之间的编码距离越远,则纠错能力越强。
详见逻辑回归(Logistic Regression)_tt丫的博客-CSDN博客_逻辑回归csdn
中的“逻辑回归的python实现”——函数参数选择决定多分类任务中的拆解方式
欢迎大家在评论区批评指正,谢谢~