4

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

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

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

任何人都可以帮助我找到在 sckit-learn 中获得这个组合(gamma,C)的方法吗?

4

1 回答 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 资源,因此请注意传递的参数数量。根据您的数据和传递的参数数量,可能需要一些时间来处理。

此链接还包含一个示例

于 2017-09-20T19:40:42.113 回答