机器学习D5——交叉验证

K折交叉验证

  • 目的:
    • 选出最为合适的模型超参数的取值,然后将超参数的值作用到模型的创建中。
  • 思想:
    • 将样本的训练数据交叉的拆分出不同的训练集和验证集,使用交叉拆分出的不同的训练集和验证集分别测试模型的精准度,然后求出精准度的均值就是此次交叉验证的结果。将交叉验证作用到不同的超参数中,选取出精准度最高的超参数作为模型创建的超参数即可!
  • 实现思路
    • 将数据集平均分割成K个等份
    • 使用1份数据作为测试数据,其余作为训练数据
    • 计算测试准确率
    • 使用不同的测试集,重复2、3步骤
    • 对准确率做平均,作为未知数据预测准确率的估计
  • API
    • from sklearn.model_selection import cross_val_score
    • cross_val_score(estimator, X, y, cv)
      • estimator:模型对象
      • X,y:训练集数据
      • cv:折数
  • 交叉验证在KNN中的基本使用
    在这里插入图片描述
    • mean()求的是均值
    • KNN中的k值为5,不一定是最佳的选择,所以我们可以来进行选择,找到一个最优的k(最优的超参数)
  • 使用交叉验证和学习曲线,找寻最优的超参数
    在这里插入图片描述
    在这里插入图片描述
    • 交叉验证也可以帮助我们进行模型选择,以下是一组例子,分别使用iris数据,KNN和logistic回归模型的比较和选择。
      -

K-Fold和cross_val_score

  • Scikit中提供了K-Fold的API
    • n-split就是折数
    • shuffle指是否对数据洗牌
    • random_state为随机种子,固定随机性
      在这里插入图片描述
  • Scikit中提取带K-Fold接口的交叉验证接口sklearn.model_selection.cross_validate,但是该接口没有数据shuffle功能,所以一般结合Kfold一起使用。如果Train数据在分组前已经经过了shuffle处理,比如使用train_test_split分组,那就可以直接使用cross_val_score接口
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44350337/article/details/115141405
d5