zoukankan      html  css  js  c++  java
  • 机器学习:SVM做多分类问题

       

    引言

       

    SVM做二分类问题很简单明了,但是如何用二分类构建多分类问题,自己查找了部分资料,发现普遍分为两种,一种是直接法,直接求解多目标函数优化问题,但这种方法计算量很大,不实用,另外一种是间接法,通过多个二分类来实现多分类,常见的有一对多和一对一两种

       

    最后针对一对一要构建n平方个二分类器,如果n过大,那么分类器个数过多的情况,提出一种有向无环图的方法,这种方法只需要构建n个分类器,但存在误差累计的问题

       

    直接法求多目标优化问题(不实用)

       

    一次性考虑所有样本,并求解一个多目标函数的优化问题,一串心得到多个分类的面

       

       

    每个区域对应一个类别

       

    但这种一次性求解的方法计算量太大,大到无法实用的地步

       

    一对多

       

    将类别1看作正类,其余2,3,4,5看作负类(一对多),这样拿一个样本来,可以告诉你是不是属于类别1的,如果不属于,再在2,3,4,5中继续寻找

       

    存在两个问题:

       

    一个是一个样本可能同时属于几个类

       

    那么看一下这个样本到各个超平面的距离,哪个远判给哪个

       

    另一个是一个样本可能不属于任何一个

       

    这样这个样本属于第6类,这个类的数目远大于5类之和,所以会造成数据偏斜问题

       

    一对一

       

    将类别1看作正类,不降2,3,4,5都看作负类,而是从1-5中任意选取2种类别来分类,得到5*4/2=10中分类器,每一个分类器只告诉你是第一类还是第二类,或者是第一类还是第三类,统计所有分类器的票数,根据票数得到分类结果

       

    这种问题不会有样本不属于任何一类的情形出现

       

    但如果类别数比较大,比如1000,那么分类器的数目要上升到类别数的平方级别

       

    复杂度较大

       

    有向无环图

       

    不会走回头路 >>> 减少分类器的数目

       

       

    先问是第一类还是第五类

       

    如果是第五类,再问是第二类还是第五类

       

    如果是第五类,然后再问是第三类还是第五类

       

    这样的话得到最后的结果不管怎样都只调用N个分类器,N是类别的数目,比起上面要调用N平方个分类器要减少很多

       

    但问题在于存在误差累计,一旦犯错,后面都错的情况

  • 相关阅读:
    一步一步学EF系列二【Fluent API的方式来处理实体与数据表之间的映射关系】
    EntityFramework 6 开篇
    DOS For循环
    mysql中查看所有表、表字段、表注释、字段注释
    灾备还原之gitlab
    JavaScript 实现继承的5种方式
    HBuilder完成webApp入门(5) 实例
    HBuilder完成webApp入门(4) 实例
    HBuilder完成webApp入门(3) 关于webview (转)
    HBuilder完成webApp入门(2)
  • 原文地址:https://www.cnblogs.com/keedor/p/4463050.html
Copyright © 2011-2022 走看看