【问题标题】:Predicted values of each fold in K-Fold Cross Validation in sklearnsklearn中K-Fold Cross Validation中每个折叠的预测值
【发布时间】:2019-01-14 01:39:11
【问题描述】:

我使用 python sklearn 对一个数据集执行了 10 倍交叉验证,

result = cross_val_score(best_svr, X, y, cv=10, scoring='r2')
print(result.mean())

我已经能够得到 r2 分数的平均值作为最终结果。我想知道是否有办法打印出每个折叠的预测值(在本例中为 10 组值)。

【问题讨论】:

    标签: python scikit-learn regression cross-validation


    【解决方案1】:

    我相信您正在寻找cross_val_predict 函数。

    【讨论】:

    • 是的!谢谢。我想知道我是否可以分别打印出每个折叠的结果
    • 我知道它对所有折叠都有预测。我想知道是否有办法分别打印出每个折叠的结果。例如,第 1 折:{....},第 2 折:{......} .....等
    【解决方案2】:

    一个迟到的答案,只是为了添加到@jh314,cross_val_predict 确实返回了所有预测,但我们不知道每个预测属于哪个折叠。为此,我们需要提供折叠,而不是整数:

    import seaborn as sns
    from sklearn.ensemble import RandomForestClassifier
    from sklearn.model_selection import cross_val_predict, StratifiedKFold 
    
    iris = sns.load_dataset('iris')
    X=iris.iloc[:,:4]
    y=(iris['species'] == "versicolor").astype('int')
    
    rfc = RandomForestClassifier()
    skf = StratifiedKFold(n_splits=10,random_state=111,shuffle=True)
    
    pred = cross_val_predict(rfc, X, y, cv=skf)
    

    现在我们遍历 Kfold 对象并提取每个折叠对应的预测:

    fold_pred = [pred[j] for i, j in skf.split(X,y)]
    fold_pred
    
    [array([0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0]),
     array([0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0]),
     array([0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1]),
     array([0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0]),
     array([0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0]),
     array([0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0]),
     array([0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0]),
     array([0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0]),
     array([0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0]),
     array([0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0])]
    

    【讨论】:

    【解决方案3】:

    要打印每个折叠的预测,

    for k in range(2,10):
        result = cross_val_score(best_svr, X, y, cv=k, scoring='r2')
        print(k, result.mean())
        y_pred = cross_val_predict(best_svr, X, y, cv=k)
        print(y_pred)
    

    【讨论】:

    • 这执行与print(result) 相同的功能。我想为每个折叠单独打印它们
    • @KrishiH result 给你分数,而y_pred 给你预测。请检查。
    • 我认为你不明白我的问题。 y_pred 返回所有预测。我想分别打印每个折叠的预测。
    • @KrishiH 添加cv 作为cross_val_predict 的参数给出了预测。谢谢!
    猜你喜欢
    • 2017-06-22
    • 2021-10-02
    • 2015-09-14
    • 2014-05-19
    • 2021-08-29
    • 2019-05-21
    • 1970-01-01
    • 2019-01-23
    • 1970-01-01
    相关资源
    最近更新 更多