目录
一、构造编码矩阵
先构造编码矩阵,然后再把训练集已经打好的标签重新根据编码矩阵中第i列重新标记,按这种理解使用多少二分类器(n)就需要重新标记训练集几次(n)。
因此,构造编码矩阵,共有k个类别的多分类任务,做n(想使的二分类器数量)次划分,每次划分时从k中随机选取部分为正类,其余为负类,刚好n个训练集。如何设计编码矩阵还有多种方法。
其实可以不用构造编码矩阵,可先把训练集随机分成和二分类器个数一样的n个子训练集对应着各个分类器,然后直接训练。存在的问题就是再测试的时候没有对比的类别码。
如图,每一行C表示一个类别,每一列f代表一个分类器 。
二、训练
不知道大家是否和我一样对如何分别训练每个分类器 f有困惑,如表1每一列是一个训练集共7个训练集,把打好标签共有4个类别的训练集(如1-4的手写数字)随机划分成7份对应到7个分类器,然后根据编码矩阵各分类对应的列标签重新标记它对应的子训练集,再用重新标记的二标签训练集训练相当于二分类。当然可以不用预先随机划分训练集,直接把训练集根据二分类器fi对应的列重新标记成二类别数据集。训练集太大,个人觉得增加了重新标记数据集和训练的时间。
还有就是第一节提到直接构造训练集的方法,但是存在的问题还需要进一步解决。
三、测试
把每一条测试数据分别通过f1到f7二值分类器,每个分类器输出一个一个编码,组合起来构成的7位编码和编码矩阵中每一行(代表一个类别)计算距离,跟那个类别最近就属于那个类。
1、海明距离,对应位置的编码不相同算一个距离,所有对应位值不相同得距离和就是两个编码串得海明距离
2、欧式距离,类似两个坐标点间得距离
3、个人觉得可以直接两个二进制编码做差,这样容错能力,或者说泛化能力也不错,中间可以有2的n次方/2的容错度
四、应用
可以和感知机,SVM,线性分类器等二分类器组合构成多类分类器