weka中的一元类文本分类?

Posted

技术标签:

【中文标题】weka中的一元类文本分类?【英文标题】:unary class text classification in weka? 【发布时间】:2012-05-10 19:09:04 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

感谢您的回答。我让它工作了。如果我只想确定有多少与癌症相关的文档(一类)? 区别在于有没有反例。如果您有 100 个癌症样本和 100 个非癌症样本,那么这是两个类别,癌症和非癌症。如果你只有说 100 个健康的例子,并且想知道是否有任何异常,那就是一类。 我在 Weka 使用 LibSVM 进行了一节课培训。但问题是在测试期间,所有测试实例都归类到我在训练中使用的类,它并没有说至少有一个实例不相关,我确信测试实例与该类完全无关。这可能是什么原因? 你做参数调优了吗? SVM 对其参数非常敏感,它不是“开箱即用”的解决方案。这份来自 libsvm 的文档是一个很好的介绍:csie.ntu.edu.tw/~cjlin/papers/guide/guide.pdf 其他几件事要检查 - 如果您有两个类,培训文件是否包含类属性和/或两个类的示例?如果您选择了一类 SVM 并且只给它提供了一个包含两个类的文件,它可能认为类变量是一个属性并将其包含在模型中,在这种情况下,如果您给它提供任何具有该属性值的任何值将其视为课程的一部分。

以上是关于weka中的一元类文本分类?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Weka 进行文本分类

在 Java 中构建/运行流式 Weka 文本分类器

使用 weka 进行文本分类

Java中使用Weka的基本文本分类

weka 3.7 explorer 无法对文本进行分类

在java中使用朴素贝叶斯(weka)进行简单的文本分类