【问题标题】:How to train SVM in matlab / python for MultiLabel data?如何在 matlab / python 中为 MultiLabel 数据训练 SVM?
【发布时间】:2016-06-09 02:27:56
【问题描述】:

我正在训练一个问题,这样我的输出 (y) 可能不止一个类。例如,SVM 可以说,这个输入向量是类 1,但它也可以说,这个输入向量是类 1 和 5。这与多类 SVM 问题不同,输出可能是多个类之一.我的输出可能是多个类中的一个或几个。

示例:我的训练数据看起来像(对于每个训练向量 X)

X_1   [1 0 0 0]
X_2   [0 1 1 0]
X_3   [0 0 0 1]
X_4   [1 1 0 1]

右侧是要预测的 Y(这里我展示了一个有 4 个类的示例,其中 1 表示类成员资格)。

我知道我可能需要使用结构 SVM,例如此处讨论的:http://www.robots.ox.ac.uk/~vedaldi/svmstruct.html

然而,这一切让我很困惑。

但是,我不想简单地为每个可能的输出类做一对多的分类器。我需要以某种方式考虑类关系,所以我想我需要的是结构 SVM。我的训练数据将有一些用单个类标记的实例和用多个类标记的其他实例。

我想我是在问如何解决这个问题,以及你是否知道任何可以在 MATLAB 或 python 中这样做的包。

【问题讨论】:

    标签: matlab machine-learning svm


    【解决方案1】:

    您可以考虑使用 scikit-learn multiclass and multilabel algorithmsMEKA 工具以及可以在 Python 中与 MEKA 接口的 scikit-multilearn。

    【讨论】:

      【解决方案2】:

      作为 scikit-multilearn 的作者,我可以从 python 的角度推荐使用它,因为它是迄今为止 python 中最大的多标签分类库,并且与 scikit 一起使用非常方便。您可能应该使用 github 的主版本,而不是 2 年前的 0.0.1 版本。我们计划下周发布,这是一个非常大的更新,包含新的分类器和许多其他的。它还可以让您与 meka 交互。

      在您的情况下,使用 4 个标签,您可以使用其中一种基本问题转换方法获得良好的结果 - 标签 powerset 或分类器链,位于 skmultilearn.problem_transform.lp 和 skmultilearn.problem_transform.cc - 更复杂的方法很有用主要是在大标签不平衡的情况下,这通常不会发生在 4 个标签上。

      您可以在https://github.com/scikit-multilearn/scikit-multilearn 获取库并通过以下方式从 git 将其安装在 pip 中:

      pip install git+https://git@github.com:scikit-multilearn/scikit-multilearn.git

      【讨论】:

        猜你喜欢
        • 2014-11-03
        • 2012-02-21
        • 2012-01-23
        • 2019-01-31
        • 2015-11-17
        • 1970-01-01
        • 2015-09-26
        • 2012-04-23
        • 2020-06-22
        相关资源
        最近更新 更多