【问题标题】:Is there a way to see the folds for cross-validation in GridSearchCV?有没有办法在 GridSearchCV 中查看交叉验证的折叠?
【发布时间】:2017-06-20 02:14:03
【问题描述】:

我目前正在使用 Python 中的 GridSearchCV 进行 3 倍 cv 以优化超参数。我只是想知道是否有任何方法可以查看 GridSearchCV 中使用的 cv 中训练和测试数据的索引?

【问题讨论】:

    标签: python grid-search


    【解决方案1】:

    如果您不想在 CV 阶段折叠之前对样本进行洗牌,您可以这样做。您可以将 KFold(或另一个 CV 类)的实例传递给 GridSearchCV 构造函数并像这样访问它的折叠:

    import pandas as pd
    import numpy as np
    from sklearn.model_selection import GridSearchCV
    from sklearn.linear_model import LogisticRegression
    from sklearn.model_selection import KFold
    
    params = {'penalty' : ['l1', 'l2'], 'C' : [1,2,3]}
    grid = GridSearchCV(LogisticRegression(), params, cv=KFold(n_splits=3))
    
    X = np.array([[1, 2], [3, 4], [1, 2], [3, 4], [5, 6], [7, 8]])
    
    for train, test in grid.cv.split(X):
        print('TRAIN: ', train, ' TEST: ', test)
    

    哪个打印:

    TRAIN:  [2 3 4 5]  TEST:  [0 1]
    TRAIN:  [0 1 4 5]  TEST:  [2 3]
    TRAIN:  [0 1 2 3]  TEST:  [4 5]
    

    对于未打乱的 CV,折叠始终相同,因此您可以确定这些是在网格搜索期间使用的折叠。

    如果您想在折叠之前对样本进行洗牌,这会稍微复杂一些,因为每次调用 cv.split() 都会产生不同的拆分。我可以想到两种方法:

    1. 您可以为 CV 对象提供固定的随机状态,例如KFold(n_splits=3, shuffle=True, random_state=42).

    2. 在创建GridSearchCV 对象之前,从KFold 迭代器创建一个列表。

    因此,对于第二种方法,请执行以下操作:

    grid = GridSearchCV(LogisticRegression(), params, 
                        cv=list(KFold(n_splits=3, shuffle=True).split(X)))
    

    除了迭代器,列表是一个固定对象,除非您手动操作它,否则它将在所有 GridSearch 迭代中保持相同的值。

    【讨论】:

    • 非常感谢您的帮助。它适用于 sklearn v0.18,但不幸的是我目前使用的是 v0.17。在 v0.17 中有没有办法做到这一点?
    • 应该是一样的,只是记住你需要分别从sklearn.grid_searchsklearn.cross_validation而不是model_selection导入GridSearchCVKFold。 0.18 中模块的组织方式发生了变化
    • @Toterich - 我有点惊讶你的第二种方式“在创建 GridSearchCV 对象之前,从 KFold 迭代器创建一个列表。”因为根据文档 (scikit-learn.org/stable/modules/generated/…) 可以工作,所以 cv 应该是 None、int、generator 或 iterable。考虑到文档,是否应该将列表传递给它是显而易见的,还是没有文档记录?
    • 列表是可迭代的,因为它们实现了__iter__()。见here under "iterable"
    猜你喜欢
    • 2020-10-17
    • 2021-03-18
    • 2021-02-17
    • 2015-06-12
    • 2016-08-17
    • 2019-04-28
    • 2018-08-27
    • 2014-11-08
    • 1970-01-01
    相关资源
    最近更新 更多