我一直在努力优化Scikit-Learn中的SVR模型,但一直无法理解如何利用GridSearchCV。
考虑documentation中提供的示例代码略有修改的情况:
from sklearn import svm, grid_search, datasets
iris = datasets.load_iris()
parameters = {'kernel': ('linear', 'rbf'), 'C':[1.5, 10]}
svr = svm.SVC()
clf = grid_search.GridSearchCV(svr, parameters)
clf.fit(iris.data, iris.target)
clf.get_params()
由于我指定最佳C值的搜索仅包含1.5和10,我希望模型返回使用这两个值中的一个。但是,当我查看输出时,情况似乎并非如此:
{'cv': None,
'estimator': SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0, degree=3, gamma=0.0,
kernel='rbf', max_iter=-1, probability=False, random_state=None,
shrinking=True, tol=0.001, verbose=False),
'estimator__C': 1.0,
'estimator__cache_size': 200,
'estimator__class_weight': None,
'estimator__coef0': 0.0,
'estimator__degree': 3,
'estimator__gamma': 0.0,
'estimator__kernel': 'rbf',
'estimator__max_iter': -1,
'estimator__probability': False,
'estimator__random_state': None,
'estimator__shrinking': True,
'estimator__tol': 0.001,
'estimator__verbose': False,
'fit_params': {},
'iid': True,
'loss_func': None,
'n_jobs': 1,
'param_grid': {'C': [1.5, 10], 'kernel': ('linear', 'rbf')},
'pre_dispatch': '2*n_jobs',
'refit': True,
'score_func': None,
'scoring': None,
'verbose': 0}
我怀疑我对GridSearchCV的基本误解是如何使用它,以及我可以期待它返回的内容。我原本以为它会根据我的搜索选择返回一个带有优化参数的分类器,但事实并非如此。
非常感谢任何指导。
非常感谢。
答案 0 :(得分:10)
您不应在此使用get_params
。使用best_params_
或best_estimator_.params
。 get_params
会返回给出的构造函数参数。其中一个是估算器,你给它一个带有默认参数的SVC,这就是你在这里看到的。这与在网格搜索中尝试的参数无关。
如果你看一下例子(look at the bottom of the dev documentation for example),你将永远不会在GridSearchCV上看到get_params
- 或者实际上,我认为;)它是定义GridSearchCV如何使用其他估算器的接口。