【问题标题】:multiclass representation of LIBSVMLIBSVM 的多类表示
【发布时间】:2015-06-29 18:46:33
【问题描述】:

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

我在 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…。

感谢和问候。

【问题讨论】:

  • 我无法理解您的问题。考虑改进您的问题以增加获得答案的机会。呈现您的输入数据。描述您的预期输出。描述你的方法。

标签: python machine-learning svm libsvm data-representation


【解决方案1】:

你很困惑

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2015-06-26
    • 2012-02-17
    • 2012-02-20
    • 2014-09-23
    • 2014-06-14
    • 2017-05-26
    • 2015-05-06
    • 2013-10-21
    • 2013-01-13
    相关资源
    最近更新 更多