sklearn中的逻辑回归在处理多分类的问题的时候提供两种策略一种是ovr,一种是multinomial,ovr很简单,就是一个类以及把其它类当成另一个类,就是把多分类切分成一堆二分类,比如3个类别a,b,c。则每切分成3个分类问题分别为(a,(b,c)),(b,(a,c)),(c,(a,b)),一般要设置clcass_weight避免因为这种切分策略导致的样本不平衡问题对模型带来的影响,所以使用ovr的话就会生成3个最终的模型,最后3个训练完毕的模型对新样本分别进行预测然后取均值。
可以看到,ovr这里的预测用到了_predict_proba_lr 这个函数我们再看看这个函数:
很明显,就是简单平均,自己带一列的数字进去算算就行了,不难的,就是费时间。
然后我看了“multinomial”,额,和网上的说法非常不一样呢,也不知道那些up主是不是看了西瓜书就把一切非ovr的多分类处理策略都当成mvm中的ecoc(西瓜书唯一提到的一种策略),百度搜索到关于逻辑回归的multinomial的解读都是直接照抄西瓜书,关键还是错的。
https://blog.csdn.net/huangjx36/article/details/78056375/blog.csdn.net实际上sklearn中的多分类的另一个策略是使用多项式逻辑回归,Multinomial_logistic_regression,上面这一片csdn的博客介绍的挺好的,摘取其中的一种求法就可以了。
首先我们需要知道,逻辑回归属于判别模型中的概率模型,和决策树属于典型的两种判别式模型的子类型,决策树这类直接针对输入和输出的映射关系建模,而逻辑回归则是概率判别式模型,是从概率论的角度来求解参数的。逻辑回归假设数据服从伯努利分布,通过极大化似然函数的方法,运用梯度下降法等最优化方法求解参数。
直接盗周老师的图吧懒得写了:
这个是二分类的逻辑回归的求解过程,可以看到3.23与3.24的式子假设了输入和输出之间服从伯努利分布。
下面看看多项逻辑回归是怎么推导的:
实现多类别逻辑回归模型最简单的方法是,对于所有K个可能的分类结果,我们运行K−1个独立二元逻辑回归模型,在运行过程中把其中一个类别看成是主类别,然后将其它K−1个类别和我们所选择的主类别分别进行回归。通过这样的方式,如果选择结果K作为主类别的话,我们可以得到以下公式。
上面式子转化一下:
要注意的是,我们最后得到的概率必须加起来等于1,基于这个事实我们可以得到:
这样的话,我们可以把以上公式代入到之前的公式中得到:
然后,每一个类别对应的概率公式有了,极大似然法配合梯度下降求解就可以了。
需要注意的是,我们在使用二分类的时候输出的coef权重系数对应的是类别1所对应的权重系数,而多分类的时候代码是一股脑输出全部的coef,所以一开始看起来好像是用mvm之类的方法来处理多分类的实际上压根就不是。