如何在matlab / python中为MultiLabel数据训练SVM?

时间:2016-02-26 02:10:34

标签: matlab machine-learning svm

我正在训练一个问题,使得我的输出(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中这样做的任何软件包。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

您可以在https://github.com/scikit-multilearn/scikit-multilearn获取图书馆,并通过git从

安装到pip

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