0

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

我在 python 版本中使用'libsvm',因为在 python 中删除停用词、标记化和词干似乎更容易,这要归功于 Snowball、NLTK 等工具......

这个版本不能直接使用多分类
但是,可以编写一个多类分类器模型,生成总共 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…。

谢谢并恭祝安康。

4

1 回答 1

1

你很困惑

  • 多类场景 - 通常有 2 个以上的类,但每个对象都被分配了一个
  • 多标签场景 -为每个对象分配多个标签

SVM 在其基本制定/实现中无法做到以上任何一项。尽管这两个问题都可以很容易地分解。

第一个通常使用一对一或一对一来处理,两者都在 中实现scikit-learn,您将 python 绑定到 libsvm。

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

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

于 2015-04-22T09:44:35.080 回答