如何集成所有分类器以进行多标签 svm 分类

Posted

技术标签:

【中文标题】如何集成所有分类器以进行多标签 svm 分类【英文标题】:How to integrate all the classifiers for multilabel svm classification 【发布时间】:2015-01-27 22:49:23 【问题描述】:

我有 4 个标记组,我想使用 SVM 对其进行分类。

Class-A, Class-B, Class-C, Class-D

现在,如果我需要训练分类器进行识别,我会将 A、B、C、D 中的所有文本复制到文件“A-against-all”中。 B、C 和 D 类似

"B-against-all" CLass B :1 , Rest all :-1
"C-against-all" CLass C :1 , Rest all :-1
"D-against-all" CLass D :1 , Rest all :-1

现在,如果我在“A-against-all”上运行 SVM,那么我会得到一个分类器作为输出。 同样,我得到了另外三个 B、C 和 D 分类器。

现在我的问题是: - 我如何整合这 4 个分类器以便统一操作?

【问题讨论】:

我猜 OP 的意思是说文件“B-against-all”的 B 类为 1,其余全部为 -1,类似地“C-against-all”将具有类-C 为 1,其余为 -1 【参考方案1】:

我不知道如何将 2 个或更多 SVM 分类器合并为 1 个。但是对于您的特定问题,您可以通过创建一个包含 A、B、C 和 D 的所有数据的文件来获得所需的 SVM,并带有单独的标签,例如 @ 987654323@ 分别为A, B, C & D。在这个组合文件上运行 SVM,生成的分类器将正确识别数据点为 Class-A、Class-B、Class-C 或 Class-D。

虹膜数据上的 SVM。虹膜数据有 0、1、2 三类。 0-50 为 0 级,50-100 为 1 级,100-150 为 2 级。

>>> from sklearn import datasets as DS
>>> iris = DS.load_iris()
>>> from sklearn import svm
>>> clf=svm.SVC()
>>> clf.fit(iris.data,iris.target)
SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0, degree=3, gamma=0.0,
  kernel='rbf', max_iter=-1, probability=False, random_state=None,
  shrinking=True, tol=0.001, verbose=False)
>>> clf.predict(iris.data[25])
array([0])
>>> clf.predict(iris.data[75])
array([1])
>>> clf.predict(iris.data[125])
array([2])

如您所见,SVM 将数据分类为三个类别标签并准确预测。

看看这个问题:Prepare data for text classification using Scikit Learn SVM.这就是你需要做的。

【讨论】:

但是 SVM 不是只对二进制分类进行操作吗?你确定它会起作用吗? SVM 不仅仅对二进制分类进行操作。它可以用任意数量的类进行分类。试试这个方法。它肯定会起作用。 我上传了代码,其中 SVM 准确地将数据分类为三个类别。检查一下。 @rzach 您还应该按照 bhat 的建议参考 scikit-learn.org/stable/datasets @BHATIRSHAD 非常感谢。但是我如何为 svm 准备数据。实际上我的数据是文本数据。类:“制药”、“零售”、“食品和旅游”。我为这些类中的每一个都有 100 个文本文件。现在如何转换这些文本文件以便在 SVM 中使用?

以上是关于如何集成所有分类器以进行多标签 svm 分类的主要内容,如果未能解决你的问题,请参考以下文章

使用 SVM 对文本数据进行多标签分类

Python:如何在多标签类的 SVM 文本分类器算法中找到准确度结果

opencv SVM多分类 人脸识别

大型数据集的多标签分类

多分类SVM损失函数: Multiclass SVM loss

ML-10多分类及多标签分类算法