请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于交叉验证随机性

老师好,请问下 交叉验证分成K份,是有什么规则吗?
以下图为例,训练数据分成了3份 (A、B、C),请问是根据什么规则分成3份的?

比如我有99条数据,分成3份,是否
A = 第1-33条数据
B = 第34-66条数据
C = 第67-99条数据
图片描述

正在回答 回答被采纳积分+3

插入代码

1回答

liuyubobobo 2023-02-15 05:04:28

对于大部分数据,随机划分即可。


但是对于一些特殊数据,尤其是某一个 label 比较小的数据(有偏的数据),应该考虑保证在每一份中,每一个 label 的比例大致一样。这样可以避免某一份中某一个 label 一个都没有的情况。


在机器学习领域,有一个专门的名词来描述这种“划分”,被称为是 Stratified Split (听起来非常高大上,但就是我上面说的那个意思,非常好理解。)sklearn 中有专门的方法实现了这种 split,可以参考这里:https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.StratifiedShuffleSplit.html


继续加油!:)

1 回复 有任何疑惑可以回复我~
  • 提问者 lemonlxn #1
    非常感谢,谢谢老师
    回复 有任何疑惑可以回复我~ 2023-02-15 09:31:06
  • 提问者 lemonlxn #2
    我查看了一下sklearn相关文档,编写了一个分层抽样函数。
    
    这个函数,可使抽样后的比例,与原数据比例一致。
    
    from sklearn.model_selection import StratifiedShuffleSplit
    
    def Stratified_Shuffle_Split(X,y,test_size=0.3,random_state=666):
        ss = StratifiedShuffleSplit(n_splits=1,test_size=test_size,random_state=random_state)
        
        for train_index, test_index in ss.split(X, y):
            X_train, X_test = X[train_index], X[test_index]#训练集对应的值
            y_train, y_test = y[train_index], y[test_index]#类别集对应的值
        return X_train, X_test, y_train, y_test
    回复 有任何疑惑可以回复我~ 2023-02-15 11:28:40
  • liuyubobobo 回复 提问者 lemonlxn #3
    大赞!感谢分享:)
    回复 有任何疑惑可以回复我~ 2023-02-15 12:32:23
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信