代码改变世界

多分类问题与多类感知机算法

2013-05-06 12:50  夜与周公  阅读(4945)  评论(0编辑  收藏  举报

  本节延续线上节感知机算法,继续探讨多分类的线性感知机算法。

  多分类问题首先可以看成是二元分类的一个拓展,具体的有两种方法:1.one vs rest;2.one vs one。

  1.one vs rest

  对于K(k>=3),我们可以用K-1个分类器,组合实现多分类:

                    

这种方法被一些知名的开源工具支持实现(如Libsvm),绿色部分属于决策结果重叠部分,C1与C2均将其纳入决策区域。

  2.one vs one

  这种方法在每一类之间训练一个分类器,对于K分类问题需要训练(k-1)*k/2个二元分类器:

                     

  

  

这种方法,可能会产生决策模糊区域,如上图绿色标记的区域无法判断属于哪一类。

  另外一种方法是,直接训练K的分类器:

                

其决策区域如下:

      

  

  这种方法可以避免二元分类组合多元分类可能引入的决策重合与决策模糊问题,其缺点是,很多模型并不直接多分类模型(如SVM模型)。

  对于多类感知机算法,我们训练K个二元分类器方法,其损失函数变成:

                

 对损失函数求导,得到梯度:

         

得到梯度后,采用梯度下降算法求导感知机的参数即可,下一节将介绍C++版本的分类器的实现。