SVM中的多类分类

时间:2016-03-28 10:05:31

标签: matlab machine-learning svm libsvm

我一直在研究"双语文件中的脚本识别"。 我想在matlab中将页面/块分类为Eng(class 1),Hindi(class 2)或者使用libsvm进行混合。但问题是我的训练数据包括仅与印地语和英文页面/块相对应的样本,但没有混合页面。

我想要提供的测试数据也可能包含混合页面/块,在这种情况下,我希望它被分类为"混合"。我打算用置信度得分或概率值来做。如果第1类的概率值大于阈值(比如0.8)并且第2类的概率值小于阈值(0.05)那么它将被分类为第1类,而第2类反之亦然。但如果上述两个条件不满足,那么我想把它归类为"混合"。

来自" libsvmpredict"的第三个返回值是prob_values,我打算继续使用这个prob_values来决定testdata是印地语,英语还是混合语。但是在很少的地方我学到了" libsvmpredict"不产生实际的prob_values。

是否有任何方法可以帮助我使用SVM中仅包含2个类的训练数据将测试数据分为3类(印地语,英语,混合)。

1 个答案:

答案 0 :(得分:0)

这不是SVM的运作方式 在不知道如何将这样的类与所有其他类分开的情况下,SVM无法预测某个给定的类。

LibSVM中的函数svmpredict()实际上显示了概率估计值,该值越大,您对预测的信心就越大。但是,如果您只有两个类来预测第三个类,则不能依赖这些值:实际上svmpredict()将返回与类一样多的决策值。

你可以继续你的阈值系统(再次,不是基于SVM的),但它很可能失败或表现不佳。想一想:您必须设置两个阈值并以逻辑AND方式使用它们。正确分类非混合文档的机会确实会大幅减少。

我的建议是:不要浪费时间设置阈值,很有可能表现不佳,将这些文本加入其中或创建一些带有一些印地语和一些英文行的新文件,以便为您的训练数据添加一些适当的混合文档并执行标准的3类SVM系统 为了创建这样的文件,您也可以使用Matlab,它具有相当不错的文件I / O函数,例如fread()fwrite()fprintf()fscanf(),{ {1}}依旧......