支持非线性内核和多标签的SVM实现

问题描述 投票:5回答:1

我正在寻找支持非线性内核和一对多方案的SVM实现,以执行多标签分类。最好用Python编写,或者我可以用Python用包装器调用。

我正在研究sklearn,有两种实现使用SVM进行分类:

sklearn.svm.LinearSVC - 支持多标签分类与一对一的方案,但它基于liblinear,因此只支持线性内核。

sklearn.svm.SVC - 基于libsvm,支持非线性内核,但多标签分类是在一对一减少的情况下完成的,它为K-way多类问题训练K(K-1)/ 2二元分类器。

更多信息也在这里:http://scikit-learn.org/stable/modules/multiclass.html

有谁知道任何其他直接支持多标签分类和非线性内核的SVM实现?

一种可能的解决方案也可能是根据sklearn.svm.SVC调整代码,以执行One-vs-Rest,这是否已经尝试过?

machine-learning scikit-learn svm nonlinear-functions multilabel-classification
1个回答
2
投票

Binary Relevance problem transformation method使用one-rest-rest方法进行多标签分类。可以使用scikit-multilearn库轻松实现具有非线性内核的SVM。以下是执行相同操作的示例python代码,其中train_y的每一行都是表示多个标签的单热矢量(例如,[0,0,1,0,1,0])

from skmultilearn.problem_transform.br import BinaryRelevance
from sklearn.svm import SVC

# Non-linear kernel
svm = SVC(kernel='rbf')
cls = BinaryRelevance(classifier=svm)

cls.fit(train_x, train_y)
predictions = cls.predict(test_x)
© www.soinside.com 2019 - 2024. All rights reserved.