使用 scikit-learn 对多类支持向量机进行参数优化

Posted

技术标签:

【中文标题】使用 scikit-learn 对多类支持向量机进行参数优化【英文标题】:Parameter optimization for multi-class Support Vector Machine with scikit-learn 【发布时间】:2016-05-11 12:19:33 【问题描述】:

我正在尝试使用 scikit-learn 库中的 SVC 类来解决多类分类问题。我对一对一的策略很感兴趣。我想 优化每对类的超参数(C 和 gamma)。但我不 知道如何在 scikit-learn 中做到这一点。我怎样才能做到这一点? 非常感谢。

【问题讨论】:

您查看过 scikit-learn 文档吗? scikit-learn.org/stable/modules/grid_search.html 有很多不同的方法可以做到这一点。 非常感谢。从文档中,我可以尝试为所有类对只优化一对 C 和 gamma。那么我是否需要将训练数据划分为二进制训练集来训练二进制 SVM 然后将它们集成?还是我误会了什么? 【参考方案1】:

正如@ncfirth 所述,您可以使用 GridSearchCV 根据您的训练集找到最佳参数。我在我的程序中使用了以下代码。

tuned_parameters = ['kernel': ['rbf'], 'gamma': [1e-3, 1e-4, 1e-5, 1e-6, 1e-7, 1e-8],
                     'C': [1, 10, 100, 1000]]

scores = ['precision', 'recall']

for score in scores:
    print("# Tuning hyper-parameters for %s" % score)
    print()

    clf = GridSearchCV(svm.SVC(C=1), tuned_parameters, cv=5,
                       scoring='%s_macro' % score)
    clf.fit(X, Y)

    print("Best parameters set found on development set:")
    print()
    print(clf.best_params_)

我从 *** 获得了上述解决方案(没有指向它的链接),它帮助我在我的程序中选择了正确的 gamma 和 C 值。我的要求是只检查“rbf”内核。您可以包含线性、多边形和其他内核及其参数,以检查您是否适合您的程序。

【讨论】:

以上是关于使用 scikit-learn 对多类支持向量机进行参数优化的主要内容,如果未能解决你的问题,请参考以下文章

Matlab:使用 SVM 对多类分类问题进行预测

Matlab:使用SVM对多类分类问题进行预测

scikit-learn 决策树是不是支持无序(“枚举”)多类特征?

Scikit-learn 使用朴素贝叶斯进行 10 折交叉验证的多类分类

使用 PySpark API 的线性支持向量机多类分类

支持向量机多类分类方法及特点