caolanying

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

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

⭐交叉验证

  • 数据被多次划分,需要训练多个模型
  • 最常用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.]`
    '''
    

相关文章:

  • 2021-07-13
  • 2021-12-20
  • 2021-11-29
  • 2022-12-23
  • 2022-12-23
  • 2021-06-03
  • 2021-06-09
  • 2022-02-28
猜你喜欢
  • 2021-05-12
  • 2021-07-18
  • 2021-06-21
  • 2022-12-23
  • 2021-05-01
  • 2021-12-12
  • 2021-04-01
相关资源
相似解决方案