SVM中的多类分类



我一直在研究"双语文档中的脚本识别"。我想在matlab中使用libsvm将页面/块分类为Eng(第1类)、Hindi(第2类)或Mixed。但问题是,我所具有的训练数据仅由对应于印地语和英语页面/块的样本组成,而没有混合页面。

我想要给出的测试数据也可能由混合页面/块组成,在这种情况下,我希望它被归类为"混合"。我计划使用置信度得分或概率值来做这件事。类似于如果类别1的prob值大于阈值(比如0.8)并且类别2的prob小于阈值(比如0.05),则它将被分类为类别1,而类别2反之亦然。但如果上述两个条件不满足,那么我想把它归类为"混合"。

"libsvmprecdiction"的第三个返回值是prob_values,我计划继续使用这个prob_value来决定测试数据是印地语、英语还是混合语。但在一些地方,我了解到"libsvmprecdiction"不会产生实际的probvalue。

有没有任何方法可以帮助我使用SVM中仅由2个类组成的训练数据将测试数据分类为3个类(印地语、英语、混合)。

这不是SVM的操作方式
SVM决不能在不知道某个类的情况下预测它,也不知道如何将该类与所有其他类分开。

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

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

我的建议是:与其浪费时间设置阈值,否则很可能会出现糟糕的表现,不如将其中一些文本连接在一起,或者创建一些带有印地语和英语行的新文件,以便在训练数据中添加一些适当的混合文档,并执行标准的3类SVM系统
为了创建这样的文件,您还可以使用Matlab,它有相当不错的文件I/O功能,如fread()fwrite()fprintf()fscanf()importdata()等…

最新更新