美文网首页机器学习算法学习scikit-learn
scikit-learn--cross-validated(交叉

scikit-learn--cross-validated(交叉

作者: DayDayUp_hhxx | 来源:发表于2017-06-09 15:10 被阅读186次

    在scikit-learn中,可以使用 train_test_split 快速地将数据集分为训练数据和测试数据。当我们评估不同的设置(超参数)时,在测试集上仍然存在着过拟合风险,因为参数要不断调整到模型最佳为止。在这个过程中,关于测试集的知识就会“泄漏”到模型中,评估指标也不再泛化。为了解决这个问题,数据集的一部分被作为“验证集”,在训练集上训练数据,然后在验证集上验证,直到模型看起来成功了,再在测试集上最终评价。
    然而,把数据集分为三部分,我们用来学习模型的训练数据将减少,并且模型结果依赖划分数据集的特定随机数。
    cross-validation (CV) 过程用来解决这个问题。测试数据集仍然用来做最终的评价,但是验证集不再需要。k折 CV方法,把训练数据划分为k 个小数据集,k-1 折数据用来训练,余下的数据用来评估。
    k折 CV方法采用递归计算中的平均值作为模型评价,这种方法会导致较大的计算量,但是没有浪费数据。

    计算CV指标

    CV 最简单的方法是使用 cross_val_score函数。

    from sklearn.model_selection import cross_val_score
    clf = svm.SVC(kernel='linear', C=1)
    scores = cross_val_score(clf, iris.data, iris.target, cv=5)
    scores        
    

    每次CV迭代的得分默认使用模型的得分计算计算,也可以通过 scoring 参数修改,例如 scoring='f1_macro'。
    当参数 cv 是整数时,使用 KFold 或 StratifiedKFold 策略,也可以使用其他划分策略。
    cross_val_predit 对于每个输入,返回这个输入在测试集中的预测值。只有在cv策略把输入的所有元素都分配到测试集一次的情况下,才能使用。

    分层数据的交叉验证(Cross-validation iterators with stratification based on class labels.)

    对于不平衡分类问题,推荐使用 StratifiedKFold 和StratifiedShuffleSplit 确保在训练和测试集中保持近似的频率。

    分组数据的交叉验证

    GroupKFold
    LeaveOneGroupOut
    LeavePGroupsOut
    GroupShuffleSplit

    时间序列数据的交叉验证

    TimeSeriesSplit


    来源:http://scikit-learn.org/stable/modules/cross_validation.html

    相关文章

      网友评论

        本文标题:scikit-learn--cross-validated(交叉

        本文链接:https://www.haomeiwen.com/subject/alltqxtx.html