我试图得到一个SVR模型的最佳参数集。
我想在不同的C
值上使用GridSearchCV
。
然而,从之前的测试中,我注意到分成训练/测试集会极大地影响整体性能(在本例中为r2)。
为了解决这个问题,我想实现一个重复的5倍交叉验证(10x 5CV)。使用GridSearchCV
执行它是否有内置的方法?
快速解决方案:
遵循sci工具包offical documentation中提出的想法,快速解决方案表示为:
NUM_TRIALS = 10
scores = []
for i in range(NUM_TRIALS):
cv = KFold(n_splits=5, shuffle=True, random_state=i)
clf = GridSearchCV(estimator=svr, param_grid=p_grid, cv=cv)
scores.append(clf.best_score_)
print "Average Score: {0} STD: {1}".format(numpy.mean(scores), numpy.std(scores))
您可以为} 。否则,它使用^{} 。但你可以自己供应。在您的情况下,看起来您需要^{} 或^{} 。
GridSearchCV
提供不同的交叉验证生成器。二进制或多类分类问题的默认值是^{这称为嵌套交叉验证。您可以查看official documentation example以引导您进入正确的方向,也可以查看我的other answer here以获得类似的方法。
您可以根据需要调整步骤:
编辑-使用
cross_val_score()
和GridSearchCV()
的嵌套交叉验证的描述clf, X, y, outer_cv
到cross_val_score
X
将使用outer_cv
划分为X_outer_train, X_outer_test
。你也是X_outer_test
将被推迟,并且X_outer_train
将被传递给clf for fit()(在我们的例子中是GridSearchCV)。从这里开始,假设X_outer_train
被称为X_inner
,因为它被传递给内部估计器,假设y_outer_train
是y_inner
。X_inner
现在将使用GridSearchCV中的inner_cv
分成X_inner_train
和X_inner_test
。y也是X_inner_train
和y_train_inner
进行训练,并使用X_inner_test
和y_inner_test
进行评分。(X_inner_train, X_inner_test)
的平均得分最好的超参数被传递给clf.best_estimator_
,并适合所有数据,即X_outer_train
。clf
(gridsearch.best_estimator_
)将使用X_outer_test
和y_outer_test
进行评分。cross_val_score
返回一系列分数nested_score
。相关问题 更多 >
编程相关推荐