一般情况下,我们都认为逻辑回归(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 代码
从验证结果上来看,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 回归的区别
softmax 回归中对一个测试样本得到的属于各类别的概率和一定为 1,而多个二分类器策略中,不管是 OvO、OvR 还是 MvM 策略,一个样本在多个二分类器上得到的概率和不一定为 1。因此当分类之间是互斥的情况下(e.g 数字手写识别、动物识别),通常采用 softmax 回归;而目标类别不是互斥时(e.g 华语音乐、流行音乐、重金属音乐等)则采用多个二分类器策略进行预测。
作者:华为云专家周捷
评论