当前位置 : 主页 > 编程语言 > 其它开发 >

模型评估与改进:交叉验证

来源:互联网 收集:自由互联 发布时间:2022-05-28
⭐为什么要划分测试集与训练集? 用测试集度量模型对未见过数据的泛化性能 ⭐交叉验证 数据被多次划分,需要训练多个模型 最常用K折交叉验证 k是用户指定的数字,通常取0/5, 5折

⭐为什么要划分测试集与训练集?

  • 用测试集度量模型对未见过数据的泛化性能

⭐交叉验证

  • 数据被多次划分,需要训练多个模型
  • 最常用K折交叉验证
    • k是用户指定的数字,通常取0/5,

    • 5折交叉验证:数据划分为5部分,每一部分叫做折。每一折依次轮流作为测试集,其余做训练集

      mglearn.plots.plot_cross_validation()

1、scikit-learn中的交叉验证

利用model_selection中的cross_val_score(模型,训练数据,真实标签)

  #在iris数据上,利用logisticregre进行评估

  from sklearn.linear_model import LogisticRegression
  from sklearn.datasets import load_iris
  from sklearn.model_selection import cross_val_score

  iris = load_iris()
  lrg = LogisticRegression()

  scores = cross_val_score(lrg,iris.data,iris.target)
  print("cross_validation scores:{}".format(scores))

  '''
  `cross_validation scores:[0.96666667 1.         0.93333333 0.96666667 1.        ]`
  '''

默认情况下,cross_val_score执行3折交叉验证,可通过修改cv值改变折数

  #总结交叉验证精度:计算平均值

  print("Average cross-validation:{:.2f}".format(scores.mean()))

  '''
  `Average cross-validation:0.97`
  '''
2、分层k折交叉验证和其它策略

⭐sklearn里面的交叉验证

  • 分类问题时使用:分层交叉验证

    • 使每个折中类别之间的比例与整个数据集中的比例相同
  • 回归问题:标准k折交叉验证

    mglearn.plots.plot_stratified_cross_validation()
    

2.1 对交叉验证的更多控制

⭐可以用cv来调节cross_val_score的折数

  • sklearn还提供一个交叉验证分离器(cross_validatoin splitter)作为cv参数

    #在分类数据集上使用标准K折交叉验证
    #需要从model_selection导入KFold分离器类,并将其实例化
    
    from sklearn.model_selection import KFold
    
    kf = KFold(n_splits=5) #5折
    
    scores = cross_val_score(lrg,iris.data,iris.target,cv=kf)
    print("cross_validation scores:{}".format(scores))
    
    '''
    `cross_validation scores:[1.         1.         0.86666667 0.93333333 0.83333333]`
    '''
    
    kf = KFold(n_splits=3) #3折
    
    scores = cross_val_score(lrg,iris.data,iris.target,cv=kf)
    print("cross_validation scores:{}".format(scores))
    
    '''
    `cross_validation scores:[0. 0. 0.]`
    '''
    

网友评论