【问题标题】:How to get the folds themselves that are partitioned internally in sklearn.cross_validation.cross_val_score?如何获得在 sklearn.cross_validation.cross_val_score 内部分区的折叠本身?
【发布时间】:2014-07-08 07:37:19
【问题描述】:

我正在使用:

sklearn.cross_validation.cross_val_score

进行交叉验证并获取每次运行的结果。

这个函数的输出是分数。

有没有一种方法可以获取在 cross_val_score 函数内部分区的折叠(分区)本身?

【问题讨论】:

    标签: python scikit-learn cross-validation


    【解决方案1】:

    没有办法提取cross_val_score 中使用的内部交叉验证拆分,因为此函数不会公开任何有关它的状态。如documentation 中所述,将使用带有k=3 的k-fold 或分层k-fold。

    但是,如果您需要跟踪使用的交叉验证拆分,您可以通过创建自己的 cross validation iterators 来显式传入 cross_val_scorecv 参数:

    from sklearn.cross_validation import KFold, cross_val_score
    from sklearn.datasets import load_iris
    from sklearn.svm import SVC
    
    iris = load_iris()
    kf = KFold(len(iris.target), 5, random_state=0)
    clf = SVC(kernel='linear', C=1)
    scores = cross_val_score(clf, iris.data, iris.target, cv=kf)
    

    以便它使用您指定的拆分而不是滚动它自己的拆分。

    【讨论】:

    • 我想确认一下,分割分区有随机性吗?还是为相同的 kfold 设置和目标标签生成相同的分区?
    • 由参数random_state 控制的分割存在随机性。如果您不指定,将使用numpy 的内部随机状态,并且多次运行的结果可能不同。对于KFold 的情况,随机性仅适用于shuffle=True
    • 在 StratifiedKFold 中没有称为“shuffle”或“random_state”的参数,这是什么情况?
    • 至少在sklearn version 0.18,它确实有这些参数。
    【解决方案2】:

    cross_val_score 的默认交叉验证器是 StratifiedKFold,K=3 用于分类。您可以通过使用StratifiedKFold 并循环拆分如示例中所示来获得交叉验证迭代器。

    【讨论】:

    • 是的,我知道我可以做到,但是 cross_val_score 可以节省很多精力,所以我正在寻找一种在使用时提取折叠的方法。
    猜你喜欢
    • 2019-10-29
    • 2020-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-20
    • 1970-01-01
    • 2013-09-20
    相关资源
    最近更新 更多