一、简介
相比较传统的二分类问题,常见的如:是/否,男/女,0/1,点击/未点击这些情况。多分类问题,其实没有复杂很多。比如预测年龄区间20~25,26~40,40~60;预测出行是开车/步行/公交/自行车。
二、与二分类区别联系
一个非常大的区别是他们用的激活函数是不同的。 逻辑回归用的是sigmoid,这个激活函数的除了给函数增加非线性之外还会把最后的预测值转换成在【0,1】中的数据值。也就是预测值是0
我们最后的一层中使用的激活函数就是softmax。 我们发现跟二分类在输出层之后一个单元不同的是, 使用softmax的输出层拥有多个单元,实际上我们有多少个分类就会有多少个单元,在这个例子中,我们有4个分类,所以也就有4个神经单元,它们代表了这4个分类。在softmax的作用下每个神经单元都会计算出当前样本属于本类的概率。如下:
如上图,该样本属于第一个分类的概率是0.842, 属于第二个分类的概率是0.042,属于第三个分类的概率是0.002,属于第四个分类的概率是0.114. 我们发现这些值相加等于一,因为这些值也是经过归一化的结果。 整个效果图可以参考下面的例子, 这是一个比较直观的图。
三、One-Vs-The-Rest与One-Vs-One
一种适用于重叠,一种适用于互斥。比如兴趣爱好可以有很多类别(OneVsRest),掷骰子只有1个面(OneVsOne)。
one vs one策略(多分类)
假设我们有N个类别,该策略基本思想就是不同类别两两之间训练一个分类器,这时我们一共会训练出C(N,2)种不同的分类器。在预测时,我们将样本提交给所有的分类器,一共会获得N(N-1)个结果,最终结果通过投票产生。
one vs all策略(多标签)
该策略基本思想就是将第i种类型的所有样本作为正例,将剩下的所有样本作为负例,进行训练得到一个分类器。这样我们就一共可以得到N个分类器。在预测时,我们将样本提交给所有的分类器,一共会获得N个结果,我们选择其中概率值最大的那个作为最终分类结果。
四、Python代码
五、评估指标
比如年龄有5个区间分类,每个区间有100个样本,总共700个样本。我们对每个分类计算相应的精准度、F1值、召回等。
python代码(i为分类个数):
metrics.classification_report(test_y,predict_y)
for i in range(0:5):
print(model.estimators[i].feature_importances_)
参考文献:使用scikit-learn实现多类别及多标签分类算法 - 数据科学沉思录yphuang.github.ioLR多分类推广 - Softmax回归*www.cnblogs.com