SVM本身是一个二值分类器,SVM算法最初是为二值分类问题设计的,当处理多类问题时,就需要构造合适的多类分类器。
:直接在目标函数上进行修改,将多个分类面的参数求解合并到一个最优化问题中,通过求解该最优化问题“一次性”实现多类分类。这种方法看似简单,但其计算复杂度比较高,实现起来比较困难,只适合用于小型问题中。
以Weston在提出的多值分类算法为代表,在经典SVM理论的基础上重新构造多值分类模型通过SV方法对新模型的目标函数进行优化实现多值分类,它实际上是标准SVM中二次优化问题的一种自然的推广。
:主要是通过组合多个二分类器来实现多分类器的构造。
在该分类方法中对n个类别仅需构造n个支持向量机‚每一个支持向量机分别将某一类的数据从其他类别中分离出来。在测试时‚取决策函数输出值最大的类别为测试样本的类别。其第i个SVM可通过解决下面的最优化问题得到。
例如:使用这三个训练集分别进行训练,然后的得到三个训练结果文件。在测试的时候,把对应的测试向量分别利用这三个训练结果文件进行测试。最后每个测试都有一个结果f1(x),f2(x),f3(x)。于是最终的结果便是这三个值中最大的一个作为分类结果。
首先将所有类别分为两个类别,再将子类进一步划分为两个次级子类,如此循环下去,直到所有的节点都只包含一个单独的类别为止,此节点也是二叉树树种的叶子。该分类将原有的分类问题同样分解成了一系列的两类分类问题,其中两个子类间的分类函数采用SVM。如下图表示
注意:越上层节点的分类性能对整个分类模型的推广性影响越大. 因此,在生成二叉树的过程中, 应该让最易分割的类最早分割出来, 即在二叉树的上层节点处分割。
在该分类方法中各个类别之间构造分类器对n个类别共需构造n(n-1 )/2个分类器每个分类器函数的训练样本是相关的两个类,‚组合这些两类分类器并使用投票法,得票最多的类为样本点所属的类。具体的讲对第i类和第j类之间的分类器,我们通过解下面的最优化问题得到:
例如:假设有四类A,B,C,D四类。在训练的时候我们选择(A,B)、 (A,C)、(A,D)、(B,C)、(B,D)、(C,D)所对应的向量作为训练集,然后得到六个训练结果,在测试的时候,把对应的向量分别对六个结果进行测试,然后采取投票形式,最后得到一组结果。投票是这样的:
A=B=C=D=0; # 票数初始化
(A,B)-classifier 如果是A win,则A=A+1;otherwise, B=B+1;
(A,C)-classifier 如果是A win,则A=A+1;otherwise, C=C+1;
…
(C,D)-classifier 如果是C win,则C=C+1;otherwise, D=D+1;
The decision is the Max(A,B,C,D)
由1和0组成的一个码矩阵设为^其中Q为类别数S为待训练的分类器数当_= 1 ( _ = 0)时表示此样本相对于第q类而言是作为正例(负例)来训练第s个分类器fs的。
工作分两步:训练和测试。在训练过程中依上述原则训练分类器f(x)= (f1(x)… fs(x))在测试过程中对于新例x计算分类器f(x)的输出向量与各类别向量的距离使其距离最小的类即为x所属的类。
例如:对于该样本分类时,10个SVM分类器的分类结果(0或1 )构成一个编码 s,计算码本内 7个编码与 s汉明距离,距离最小者所代表的类别即该测试样本所属类别。
可能有小伙伴会疑惑,用纠错编码SVM使用3次不就是可以分出8类了吗
但是,对于纠错编码SVM有以下使用约定(暂未找到证明)
包括 k ( k − 1 ) / 2 个节点和 k 个 ”叶“。其中每个节点为一个分类器,并与下一层的两个节点(或者叶)相连。当对一个未知样本进行分类时,首先从顶部的根节点开始,根据根节点的分类结果用下一层中的左节点或者右节点继续分类,知道到达底层某个叶为止,该叶所表示的类别即未知样本的类别。
微信公众号:人生梦想实现家
你好,很高兴遇见你,愿和你一起看最美的风景!