找到 C 和 gamma 的值以优化 SVM

Posted

技术标签:

【中文标题】找到 C 和 gamma 的值以优化 SVM【英文标题】:Finding the values of C and gamma to optimise SVM 【发布时间】:2018-03-02 00:04:46 【问题描述】:

我在一些数据集中应用了 SVM (scikit-learn),并希望找到可以为测试集提供最佳准确度的 C 和 gamma 值。

我首先将 C 固定为某个整数,然后迭代多个 gamma 值,直到获得为该 C 提供最佳测试集精度的 gamma。然后我修复了在上述步骤中得到的这个 gamma 并遍历 C 的值并找到一个可以给我最佳精度的 C 等等......

但上述步骤永远无法给出产生最佳测试集精度的 gamma 和 C 的最佳组合。

任何人都可以帮助我找到一种方法来获得这个组合(伽玛,C) sckit-learn ?

【问题讨论】:

当然不是! bcz 我很有可能会陷入局部最大值,C 和 gamma 的组合不会给我最好的精度。 您尝试实现它还是只是猜测它?网格搜索会尝试所有可能的组合,因此不会卡在本地 Maxima 中 @MohammedKashif 我试过了,但是通过修复一个并迭代另一个并为另一个执行此操作,该过程接缝是无止境的 【参考方案1】:

您正在寻找超参数调整。在参数调整中,我们传递一个包含分类器可能值列表的字典,然后根据您选择的方法(即 GridSearchCV、RandomSearch 等)返回最佳可能参数。你可以阅读更多关于它的信息here。

例如:

#Create a dictionary of possible parameters
params_grid = 'C': [0.001, 0.01, 0.1, 1, 10, 100],
          'gamma': [0.0001, 0.001, 0.01, 0.1],
          'kernel':['linear','rbf'] 

#Create the GridSearchCV object
grid_clf = GridSearchCV(SVC(class_weight='balanced'), params_grid)

#Fit the data with the best possible parameters
grid_clf = clf.fit(X_train, y_train)

#Print the best estimator with it's parameters
print grid_clf.best_estimators

您可以阅读有关 GridSearchCV here 和 RandomizedSearchCV here 的更多信息。不过需要注意的是,SVM 会占用大量 CPU 资源,因此请注意传递的参数数量。根据您的数据和传递的参数数量,可能需要一些时间来处理。

This link 也包含一个例子

【讨论】:

您正在创建一个变量“params_grid”并使用“params_grids”。请更正。此外,这会给出一个错误,提示“'SVC' 对象没有属性 'best_estimators'”。能否提供完整的代码? @VipulSharma 使用clf.best_params_(在clf 对象上) 感谢您的回答。获得最优参数后,我们如何验证它们是否良好?是使用X_test 吗?我们可以使用交叉验证吗? :) @Emi 你需要使用X_test 来测试你的分类器。如果要使用交叉验证,只需在GridSearchCV 中指定cv 属性即可。 @Gambit 非常感谢您的出色回答。是的,它非常有帮助。只是一个快速的问题。有没有办法从 rfecv 获取选定的功能?此外,我们如何使用选定的特征来验证 X_test?期待您的回音。再次非常感谢你:)

以上是关于找到 C 和 gamma 的值以优化 SVM的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法在 One-Class SVM 上执行网格搜索超参数优化

SVM的两个参数 C 和 gamma

如何正确计算我的 SVM 的最佳 C 和 gamma?

SVM的两个参数 C 和 gamma

支持向量机SVM模型中C和gamma参数分别是什么?对模型有什么影响?

SVM(支持向量机)