【问题标题】:Using hold-out-set for validation in RandomizedSearchCV in scikit-learn?在 scikit-learn 的 RandomizedSearchCV 中使用保持集进行验证?
【发布时间】:2020-10-20 17:02:54
【问题描述】:

当验证数据已经作为保留集存在时,是否有任何方法可以从 scikit-learn 执行 RandomizedSearchCV?我尝试连接训练和验证数据并定义 cv 参数以准确拆分两个集合的组合位置,但找不到 RandomizedSearchCV 接受的正确语法。

scikit-learn 文档说:

cv : int, cross-validation generator or an iterable, optional
    Determines the cross-validation splitting strategy.
    Possible inputs for cv are:
      - None, to use the default 3-fold cross validation,
      - integer, to specify the number of folds in a `(Stratified)KFold`,
      - An object to be used as a cross-validation generator.
      - An iterable yielding train, test splits.

我希望最后一个选项应该可以工作,但我不知道我必须以哪种格式交出它。

感谢任何帮助!

【问题讨论】:

  • “一个可迭代的产量火车,测试分裂”,它不起作用吗?

标签: python scikit-learn hyperparameters


【解决方案1】:

假设您的训练样本索引位于 train_indices 中,测试样本的索引位于 test_indices 中。然后,将这些作为包装在列表中的元组传递给RandomizedSearchCVcv 参数就足够了。要演示的 MWE:

from sklearn.datasets import make_classification
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import RandomizedSearchCV


X, y = make_classification(n_samples=10)

param_distributions = {
    'n_estimators': [10, 20, 30, 40]
}

train_indices = [0, 1, 2, 3, 4]
test_indices = [5, 6, 7, 8, 9]
cv = [(train_indices, test_indices)]

search = RandomizedSearchCV(
    RandomForestClassifier(),
    param_distributions=param_distributions,
    cv=cv,
    n_iter=2
)

search.fit(X, y)

这将始终在相同样本上训练和测试估算器。如果您的数据存储在 pandas 数据帧中,例如df,使用df.index.values 获取您需要的索引。

【讨论】:

    猜你喜欢
    • 2020-01-29
    • 2017-04-12
    • 2017-06-07
    • 2021-10-25
    • 2015-05-25
    • 2020-10-28
    • 2018-03-09
    • 1970-01-01
    • 2019-01-21
    相关资源
    最近更新 更多