4

假设我们使用 GridSearch 调整 SVM,如下所示:

algorithm = SVM()
parameters = {'kernel': ['rbf', 'sigmoid'], 'C': [0.1, 1, 10]}

grid= GridSearchCV(algorithm, parameters)
grid.fit(X, y)

然后,您希望在cross_val_score. 我的问题是,目前是哪种型号grid?它是表现最好的吗?换句话说,我们能不能做

cross_val_scores = cross_val_score(grid, X=X, y=y)

或者我们应该使用

cross_val_scores = cross_val_score(grid.best_estimator_, X=X, y=y)

当我同时运行两者时,我发现它们返回的分数不同,所以我很好奇这里的正确方法是什么。(我会假设使用best_estimator_。)不过,这引发了另一个问题,即: 那么,使用 just griduse 作为模型是什么?第一个?

4

1 回答 1

2

cross_val_score装好后就不需要了GridSearchCV。它已经具有允许您访问交叉验证分数的属性。cv_results_给你一切。best_index如果您只想查看该特定估算器的结果,您可以使用该属性对其进行索引。

cv_results = pd.DataFrame(grid.cv_results_)
cv_results.iloc[grid.best_index_]
mean_fit_time                        0.00046916
std_fit_time                         1.3785e-05
mean_score_time                     0.000251055
std_score_time                      1.19038e-05
param_C                                      10
param_kernel                                rbf
params               {'C': 10, 'kernel': 'rbf'}
split0_test_score                      0.966667
split1_test_score                             1
split2_test_score                      0.966667
split3_test_score                      0.966667
split4_test_score                             1
mean_test_score                            0.98
std_test_score                        0.0163299
rank_test_score                               1
Name: 5, dtype: object

您在拟合时调用的大多数方法都GridSearchCV使用最佳模型(grid.predict(...)例如,为您提供最佳模型的预测)。对于estimator. 您看到的差异可能来自于此。cross_val_score再次适合它,但这一次使得分反对grid.estimator但不是grid.best_estimator_

于 2019-12-29T11:02:09.367 回答