Python每日一记21>>>交叉验证

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 
               
                    本文链接:https://blog.csdn.net/weixin_44663675/article/details/88736723
                
            
                    
                                                    
                                        
                    
                    
                                            还记的前期我们对机器学习的数据集的划分都是利用train_test_split()将数据划分为训练集和测试集,而且各自的比例是我们指定的,但是这样具有的人为性可能导致模型的泛化能力不佳。
交叉验证就是为了解决这个问题:
1、简单交叉验证(K折交叉验证):其将数据集划分为几个部分(注意不是随即划分,而是依次划分),再进行建模和测试。如我们制定数据集划分为3个子集,分为1,2,3;然后对1和2建模,再在3上进行测试,得分取平均值;再对1,3建模,在2上测试,以此类推。这样得到的结果更具普遍性和随机性,模型的泛化能力就更佳。需要的函数是cross_val_score
form sklearn.model_selection import cross_val_score
form sklearn.datasets import load_iris
form sklearn.liner_model  import LogisticRegression
data=load_iris()
logr=LogisticRegression()
score=cross_val_score(logr,data[‘data’],data[‘target’],cv=3)
print(score)
打印得分后,我们会得到三个得分,取平均值即可.
以上cross_val_score()中,cv指定子集个数。
需要记住的是,交叉验证不是构建可应用于新数据的模型的方法,其不会返回一个模型。在调用cross_val_score时,内部会构建多个模型,但交叉验证的目的知识评估给定算法在特定数据集上训练后的泛化能力,也就是说,没有预测的方法。当我们进行了交叉验证并且得分还OK的情况下,不需要对数据集划分成测试集和训练集,直接再次进行建模即可,建模后的数据就可以用于新数据集的预测。
下面再介绍其他交叉验证的方法
2、分层交叉验证
简单交叉验证的最大缺点就是,对于类别型标签,假如数据标签是【0,0,0,0,1,1,1,1,2,2,2,2】,分成三类的交叉验证会这样分【0,0,0,0】、【1,1,1,1】、【2、2、2、2】,那么这样的得分就会是0,这根本没什么意义。这就意味着,简单交叉验证方法失效了。
分层交叉验证能很好的解决这个问题,划分数据使得每个数据集中类别的比例与源数据集类别的比例一致。
当然我们不用过于担心,因为cross_val_score默认对分类变量使用分层k交叉验证,而对于回归模型默认使用简单K交叉验证。
之前的简单交叉也可以这样表示:
form sklearn.model_selection import K_Fold
form sklearn.model_selection import cross_val_score
form sklearn.datasets import load_iris
form sklearn.liner_model  import LogisticRegression
data=load_iris()
logr=LogisticRegression()
kf=K_Fold(n_splits=5)
score=cross_val_score(logr,data[‘data’],data[‘target’],cv=kf)
print(score)
如果我们先要更加随即的交叉验证,那么可以kf=K_Fold(n_splits=5,shuffle=True,random_state=1)
这样划分数据集前,会打乱数据,避免出现简单交叉验证的错误。
3、其余的交叉验证还有留一法交叉验证、打乱划分交叉验证、分组交叉验证、各位可以自行去查看资料。
总之对于回归数据,简单交叉验证即可,对于分类数据,分层交叉验证或其他方法即可,推荐使用分层交叉验证或者简单交叉验证参数设置为shuffle=True。
--------------------- 
版权声明:本文为CSDN博主「Python每日一记」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_44663675/article/details/88736723

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值