2

我有一个特定类别(比如癌症)的训练数据集(文本)。我想在 weka 中为这个类训练一个 SVM 分类器。但是,当我尝试通过创建一个文件夹“cancer”并将所有这些训练文件放入该文件夹来执行此操作时,当我运行代码时,我收到以下错误:weka.classifiers.functions.SMO:无法处理一元类!

我想要做的是,如果分类器找到与“癌症”相关的文档,它会正确显示类名,一旦我输入了非癌症文档,它应该会显示类似“未知”的内容。

我应该怎么做才能得到这种行为?

4

1 回答 1

7

Weka 中的 SMO 算法只在两个类之间进行二元分类。顺序最小优化是解决 SVM 的特定算法,在 Weka 中,这是该算法的基本实现。如果你有一些例子是癌症而一些不是,那么这将是二元的,也许你没有正确标记它们。

但是,如果您使用的是所有癌症示例的训练数据,并且您希望它告诉您未来的示例是否符合该模式,那么您正在尝试进行一类 SVM,也就是异常值检测。

Weka 中的 LibSVM可以处理一类 svm。与 Weka SMO 实现不同,LibSVM是一个独立程序,它已与 Weka 连接,并结合了 SVM 的许多不同变体。Wekalist 上的这篇文章解释了如何在 Weka 中使用 LibSVM。

于 2012-05-01T12:21:38.950 回答