and*_*kus 4 language-agnostic machine-learning
TL; DR:有没有比yes-no分类器更复杂的分类器?
我会事先说我没有正在进行的具体项目,这更像是一个我一直在想的技术问题.
出于某种原因,我参与了一些机器学习应用程序.所有这些项目都旨在将数据分类为N个类中的一个,并且它们都使用N是 - 否分类器(如果这是他们所谓的).这些分类器中的每一个都给出一些数据(0到1或-1到1),这对应于分类器被训练的类的可能性.然后由程序使用这些分数以某种方式确定最佳分类.
我已经在名义和连续数据上看到了这一点,并对最终分类进行了不同的实现.例如,我曾经写过一个小文档语言标识符,其中分类器是用英语,法语,德语等进行训练的,并且无论哪个分类器都获得了最高分.这对我来说很有意义.
另一个项目以连续的比例对数据进行分类,大多数从0到1.2,但有些数据最多为6.我们制作了6个左右的分类器并将它们分配到箱子:0-0.2,0.2-0.4,......和1.0及以上.一旦所有分类器返回某些数据,我们就会对分数进行二次拟合,然后将峰值作为结果.这让我感到不舒服,但我不知道为什么.
似乎应该有一种更好的方法,而不仅仅是轮询一组是 - 否分类器并尝试基于某种算法来决定.举一个愚蠢的例子,考虑一个系统来决定图片是显示洋葱还是蘑菇.(这实际上是我想到的第一件事.)我认为对象看起来像洋葱越多,看起来就像蘑菇越少,从本体论的角度来看,我想要一种反映这种情况的分类方法.如果我有两个是 - 没有分类器没有考虑到洋葱反对蘑菇,我该如何处理从两者中获得高分的图片?有没有办法得到一个单一的蘑菇或洋葱分类器,以某种方式知道这两类植被之间没有重叠?或者我可以指望用真实数据训练是 - 否分类器以反映这一点而无需任何特殊干预?
有两大类分类:
1)判别 - 在这里我们尝试从训练样例中学习决策边界.然后根据决策边界确定的测试示例所在的空间部分,我们为其分配一个类.最先进的算法是SVM,但如果您的数据不能用一条线分隔,则需要内核(例如,它可以用圆圈分隔).
对多类SVM的修改(许多方法,这里是一个):
令第j个(k)训练示例xj在类i(N)中.然后它的标签yj = i.
a)特征向量:如果xj =属于类i(N)的训练样本,那么对应于xj的特征向量是phi(xj,yj)= [0 0 ... X ... 0]
注意:X在第i个"位置".phi具有总共D*N个分量,其中每个示例具有D个特征,例如洋葱的图片具有D = 640*480灰度整数
注意:对于其他类,即y = p,phi(xj,y)在位置p的特征向量中具有"X",所有其他为零.
b)约束:最小化W ^ 2(如在Vanilla SVM中),使得:
1)对于除y1之外的所有标签y:W.phi(x1,y1)> = W.phi(x1,y)+ 1
2)除了y2之外的所有标签y:W.phi(x2,y2)> = W.phi(x2,y)+ 1
...
和k)除了yk之外的所有标签y:W.phi(xk,yk)> = W.phi(xk,y)+ 1
2)生成 - 在这里我们假设(可能结果是无意义的)每个例子都是由该类的概率分布生成的(就像男性面部的高斯和一个在实践中运作良好的女性面部)我们尝试通过计算与该类对应的训练样本的均值,协方差来学习每个分布的参数 - 均值,协方差.然后,对于测试示例,我们看到哪个分布给出了最高概率并相应地进行分类.
既不使用N yes-no分类器.
判别方法在实践中更好地用于分类,但不能对概率答案进行建模.它还需要大量的训练示例来进行优化步骤(最小化W ^ 2)才能收敛.有一种结合两者的技术,避免内核,称为最大熵识别.
回答你的另一个问题:
我如何处理从两者中获得高分的图片?有没有办法得到一个单一的蘑菇或洋葱分类器,以某种方式知道这两类植被之间没有重叠?
这对于输入数据来说更是一个问题,而不是学习算法本身,它只适用于数字矩阵.它可以反映域中的噪音/不确定性(人们也可以将蘑菇与洋葱完美区分开来).这可以通过更大/更好(训练)的数据集来修复.或者你可能在生成案例中选择了一个糟糕的分布模型.
大多数人会在分类之前在称为特征选择的阶段中预处理原始图像.一种特征选择技术可以捕捉蔬菜的轮廓,因为蘑菇和洋葱具有不同的形状,图像的其余部分可能是"噪音".在自然语言处理等其他领域,您可以删除介词,并保留不同名词的计数.但有时性能可能无法提高,因为学习算法可能无论如何都不会查看所有功能.这实际上取决于你想要捕捉的内容 - 涉及到创造力.特征选择算法也存在.
Tony Jebara在哥伦比亚大学的课程是一个很好的机器学习资源