寻找最优的C和gamma值以优化支持向量机(SVM)。

4

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

首先,我将C固定为一个整数,然后迭代许多gamma值,直到我获得了为该C提供最佳测试集准确度的gamma。然后,我将上述步骤中获得的这个gamma固定下来,并迭代C的值,找到可以给我最佳准确度的C,如此循环...

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

有人能帮我找到一种方法来获取在sckit-learn中的(gamma,C)组合吗?


1
当然不会!因为这样很有可能会陷入局部最优解,而C和gamma的组合也不能给我最佳准确度。 - ajaysinghnegi
你尝试过实现它了吗?还是只是猜测呢?网格搜索将尝试所有可能的组合,因此不会陷入局部最大值。 - Gambit1614
1
@MohammedKashif 我尝试了,但是这个过程似乎是无止境的,通过修复一个并迭代另一个,然后对另一个执行此操作。 - ajaysinghnegi
1个回答

6
你正在寻找超参数调整。在参数调整中,我们传递一个字典,其中包含分类器可能值的列表,然后根据您选择的方法(例如GridSearchCV、RandomSearch等),返回最佳参数。您可以在这里了解更多信息。
例如:
#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的更多信息,以及这里有关RandomizedSearchCV的更多信息。需要注意的是,SVM需要大量的CPU计算资源,因此请小心传递的参数数量。根据您的数据和传递的参数数量,处理可能需要一些时间。

这个链接也包含一个示例。


2
你正在创建一个变量"params_grid"并使用"params_grids"。请更正它。此外,这会出现错误,显示"'SVC'对象没有属性'best_estimators'"。你能提供完整的代码吗? - Vipul Sharma
@VipulSharma 使用 clf.best_params_(在 clf 对象上) - Arthur Attout
感谢您的回答。在获得最佳参数后,我们如何验证它们是否良好?使用 X_test 吗?我们可以使用交叉验证吗? :) - EmJ
1
@Emi 你需要使用 X_test 来测试你的分类器。如果你想使用交叉验证,只需在 GridSearchCV 中指定 cv 属性即可。 - Gambit1614
@Gambit 非常感谢 :) 顺便问一下,如果你知道这个问题的答案,请告诉我 https://dev59.com/3VMI5IYBdhLWcg3wrNck 谢谢 :) - EmJ
1
@Gambit 非常感谢您的出色回答。是的,它非常有帮助。只有一个快速问题。是否有一种方法可以从rfecv中获取所选特征?此外,我们如何使用所选特征验证X_test?期待您的回复。再次非常感谢您 :) - EmJ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接