如何通过交叉验证优化模型评估及改进效果?

2026-05-25 06:341阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计526个文字,预计阅读时间需要3分钟。

如何通过交叉验证优化模型评估及改进效果?

为什么要划分测试集与训练集?- 测试集用于评估模型对未见数据的泛化能力。- 交叉验证可以增强测试结果的可靠性。- 数据多次划分,需训练多个模型。- 最常用K折交叉验证,K是用户指定的数字,通常为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.]` '''

如何通过交叉验证优化模型评估及改进效果?

本文共计526个文字,预计阅读时间需要3分钟。

如何通过交叉验证优化模型评估及改进效果?

为什么要划分测试集与训练集?- 测试集用于评估模型对未见数据的泛化能力。- 交叉验证可以增强测试结果的可靠性。- 数据多次划分,需训练多个模型。- 最常用K折交叉验证,K是用户指定的数字,通常为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.]` '''

如何通过交叉验证优化模型评估及改进效果?