使用显式(预定义)验证集进行 sklearn 网格搜索

新手上路,请多包涵

我有一个数据集,之前已将其分为 3 组:训练、验证和测试。必须按给定的方式使用这些集合,以便比较不同算法的性能。

我现在想使用验证集优化 SVM 的参数。但是,我找不到如何将验证集显式输入 sklearn.grid_search.GridSearchCV() 。下面是我以前用于对训练集进行 K 折交叉验证的一些代码。但是,对于这个问题,我需要使用给定的验证集。我怎样才能做到这一点?

 from sklearn import svm, cross_validation
from sklearn.grid_search import GridSearchCV

# (some code left out to simplify things)

skf = cross_validation.StratifiedKFold(y_train, n_folds=5, shuffle = True)
clf = GridSearchCV(svm.SVC(tol=0.005, cache_size=6000,
                             class_weight=penalty_weights),
                     param_grid=tuned_parameters,
                     n_jobs=2,
                     pre_dispatch="n_jobs",
                     cv=skf,
                     scoring=scorer)
clf.fit(X_train, y_train)

原文由 pir 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

使用 PredefinedSplit

 ps = PredefinedSplit(test_fold=your_test_fold)

然后设置 cv=psGridSearchCV

test_fold : “类似数组,形状 (n_samples,)

test_fold[i] 给出样本 i 的测试集折叠。值为 -1 表示相应的样本不属于任何测试集折叠,而是始终放入训练折叠中。

另请参阅 此处

使用验证集时,将属于验证集的所有样本的 test_fold 设置为 0,将所有其他样本设置为 -1。

原文由 yangjie 发布,翻译遵循 CC BY-SA 4.0 许可协议

考虑使用 hypopt Python 包 ( pip install hypopt ),我是它的作者。它是专门为使用验证集进行参数优化而创建的专业包。它适用于开箱即用的任何 scikit-learn 模型,也可以与 Tensorflow、PyTorch、Caffe2 等一起使用。

 # Code from https://github.com/cgnorthcutt/hypopt
# Assuming you already have train, test, val sets and a model.
from hypopt import GridSearch
param_grid = [
  {'C': [1, 10, 100], 'kernel': ['linear']},
  {'C': [1, 10, 100], 'gamma': [0.001, 0.0001], 'kernel': ['rbf']},
 ]
# Grid-search all parameter combinations using a validation set.
opt = GridSearch(model = SVR(), param_grid = param_grid)
opt.fit(X_train, y_train, X_val, y_val)
print('Test Score for Optimized Parameters:', opt.score(X_test, y_test))

编辑:我(认为我)收到了这个回复的-1,因为我建议我编写一个包。这是不幸的,因为该包是专门为解决此类问题而创建的。

原文由 cgnorthcutt 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题