Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python GridSearchCV拟合后是否返回最佳估计值?_Python_Scikit Learn_Cross Validation_K Fold - Fatal编程技术网

Python GridSearchCV拟合后是否返回最佳估计值?

Python GridSearchCV拟合后是否返回最佳估计值?,python,scikit-learn,cross-validation,k-fold,Python,Scikit Learn,Cross Validation,K Fold,假设我们使用GridSearch调整SVM,如下所示: 算法=SVM() 参数={'kernel':['rbf','sigmoid'],'C':[0.1,1,10]} grid=GridSearchCV(算法、参数) 网格拟合(X,y) 然后,您希望在交叉值得分中使用最佳拟合参数/估计器。我的问题是,此时哪个模型是网格?这是表现最好的吗?换句话说,我们能做到吗 cross_val_分数=cross_val_分数(网格,X=X,y=y) 或者我们应该使用 cross_val_分数=cross_

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

算法=SVM()
参数={'kernel':['rbf','sigmoid'],'C':[0.1,1,10]}
grid=GridSearchCV(算法、参数)
网格拟合(X,y)
然后,您希望在交叉值得分中使用最佳拟合参数/估计器。我的问题是,此时哪个模型是网格?这是表现最好的吗?换句话说,我们能做到吗

cross_val_分数=cross_val_分数(网格,X=X,y=y)
或者我们应该使用

cross_val_分数=cross_val_分数(grid.best_估计器,X=X,y=y)

当我同时运行这两个程序时,我发现它们返回的分数并不相同,因此我很好奇这里的正确方法是什么。(我假设使用
最佳估计值
)这又提出了另一个问题,即:仅仅使用
网格
作为模型使用什么?第一个?

在安装
GridSearchCV
后,您不需要
交叉评分。它已经具有允许您访问交叉验证分数的属性<代码>cv_结果
为您提供所有信息。如果只想查看特定估计器的结果,可以使用
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(…)
获取最佳模型的预测)。对于
估计器
,情况并非如此。你所看到的差异可能来自于此
cross_val_score
再次拟合,但这次根据
grid.estimator
进行评分,但不是
grid.best_estimator

所以,为了确保我得到了正确的答案:GridSearch将测试所有拆分上的所有参数?假设有四个参数组合,k=5,那么对于每个分割,所有四个组合都会被测试?比较所有5次拆分的平均结果,并返回最佳结果。在您的示例中,split0。。。split4只是最佳模型的分割结果?这是否也意味着超参数在分割之间可能不同?对于所有这些问题,我很抱歉,但文档非常简短。@BramVanroy对于您的第一个问题,是的。对于每个参数组合(kernel=rbf,C=0.1;kernel=rbf,C=1,…,kernel=sigmoid,C=10),默认情况下将进行5倍交叉验证。在我的示例中,对于6个参数组合中的一个(对于最佳组合),您可以看到5次拆分的结果。它特定于找到的最佳参数组合(C=10,kernel=rbf)。这5个分割的超参数是相同的。谢谢你的澄清。关于最后一点:它们总是一样的吗?我这样问是因为属性
best_params_uu
会让我怀疑,对于所有拆分,总是使用相同的超参数。在哪里使用?其过程如下:对于kernel:rbf,C:0.1进行5倍交叉验证,保存结果(所有5次分割上此特定参数组合的分数)。接下来,对于kernel:rbf,C:1进行5倍交叉验证并保存结果。对所有人重复以上步骤,然后选择最好的。其他参数的结果仍然可用(5个其他参数组合*5倍),但如果调用
grid.predict()
它将使用给出最佳平均分数的结果。