一种支持非线性内核和多标签的支持向量机实现

An SVM implementation supporting non-linear kernels and multi-label on a one-vs.-rest

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

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

sklearn.svm.LinearSVC - 支持one-vs.-rest场景下的多标签分类,但它是基于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,之前是否已经尝试过?

Binary Relevance problem transformation method uses one-vs-rest approach for doing multi-label classification. One could easily implement SVM with non-linear kernels using scikit-multilearn 图书馆。以下是执行相同操作的示例 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)