我的目标是制作一个多类分类器,以处理不同的文件,并使用至少两个类(或标签)对其进行标记。这些文件是议会计划,因此将在一个同义词库中以至少一对值的形式对每个文件进行索引。

我在python版本中使用的是“ libsvm”,因为借助Snowball,NLTK等工具,在Python中删除停用词,标记化和词干化似乎更容易。

这个版本不能直接使用多重分类
但是,可以对多类分类器模型进行编程,生成总共k *(k-1)/ 2(其中“ k”是类数)。

LIBSVM的表示为:

<class/target>[ <attribute number>:<attribute value>]*


然后,对于具有5个类的文件,我是否应该仅更改类就生成前一行的5倍?

例如:

1 1:3 2:4 6:5…。
2 1:3 2:4 6:5…。
3 1:3 2:4 6:5…。
4 1:3 2:4 6:5…。
5 1:3 2:4 6:5…。

谢谢并恭祝安康。

最佳答案

你很困惑


多类方案-一般有2个以上的类,但每个对象正好分配了一个
多标签方案-每个对象分配了多个标签


SVM在其基本表述/实现中不能执行以上任一操作。尽管这两个问题都可以轻松分解。

通常,第一个方法是使用一个或全部或一对一的方法,两者都在scikit-learn中实现,其中您将python绑定到libsvm。

您的方案看起来就像多标签,在这种情况下,只能通过将问题分解为K个独立的svm来使用基本svm,只需创建K个不同的训练集,每个训练集都会回答问题“给定文件是否带有标签i?”并训练K个不同的SVM,每个简单地给您一点答案(我们假设标记过程是独立的,这是一种简化,但是其他方法将需要结构化SVM方法,例如svmstruct中可用的一种)。

您不能为单个标签创建单个libsvm培训文件。您引用的文档是指多类的,这不是您的情况,仅需要使用K个不同的标签名称,而不是复制行。

关于python - LIBSVM的多类表示,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29791997/

10-15 12:45