sklearn常用交叉验证方法总结

一、交叉验证概念

一般来说,数据充足情况下,是将数据分为训练集(训练模型),测试集(评估模型性能),验证集(模型选择)三部分,选择验证误差最小的模型。若数据不充足情况下,选择模型可采用交叉验证方法。
交叉验证是在机器学习建立模型和验证模型参数时常用的办法,重复的使用数据,把得到的样本数据进行切分,组合为不同的训练集和测试集,用训练集来训练模型,用测试集来评估模型预测的好坏,选择测试误差最小的模型。

通过交叉验证还可以来进行特征的选择,对比不同的特征组合对于模型的预测效果。简单方法就是取不同特征对应的数据集进行交叉验证,看预测得分

三种交叉验证方法

  • 留一法交叉验证
  • 简单交叉验证
  • S折交叉验证

第一种是简单交叉验证,所谓的简单,是和其他交叉验证方法相对而言的。首先,我们随机的将样本数据分为两部分(比如: 70%的训练集,30%的测试集),然后用训练集来训练模型,在测试集上验证模型及参数。接着,我们再把样本打乱,重新选择训练集和测试集,继续训练数据和检验模型。最后我们选择损失函数评估最优的模型和参数。 
第二种是S折交叉验证(S-Folder Cross Validation)。和第一种方法不同,S折交叉验证会把样本数据随机的分成S份,每次随机的选择S-1份作为训练集,剩下的1份做测试集。当这一轮完成后,重新随机选择S-1份来训练数据。若干轮(小于S)之后,选择损失函数评估最优的模型和参数。
第三种是留一交叉验证(Leave-one-out Cross Validation),它是第二种情况的特例,此时S等于样本数N,这样对于N个样本,每次选择N-1个样本来训练数据,留一个样本来验证模型预测的好坏。此方法主要用于样本量非常少的情况,比如对于普通 适中问题,N小于50时,我一般采用留一交叉验证。留一法的缺点是:当n很大的时候,计算量会很大,因为需要进行n次模型的训练,而且训练集的大小为n-1

二、使用sklearn来做交叉验证

常用sklearn交叉验证函数

cross_val_score

sklearn.cross_validation.cross_val_score(estimator, X, y=None, scoring=None, cv=None, n_jobs=1, verbose=0, fit_params=None, pre_dispatch='2*n_jobs')

GridSearchCV(网格搜索参数空间,寻找最优参数)

sklearn.grid_search.GridSearchCV(estimator, param_grid, scoring=None, fit_params=None, n_jobs=1, iid=True, refit=True, cv=None, verbose=0, pre_dispatch='2*n_jobs', error_score='raise')

train_test_split(分割训练集为验证集,测试集)

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

1) cross_val_score函数
cross_val_score可用于模型选择,参数选择, 并可以画出单一参数对模型影响,以决策树模型,iris 数据集为例,探究max_depth参数对模型影响,并选择最佳参数。
cross_val_predict 与cross_val_score 很相像,不过不同于返回的是评测效果,cross_val_predict 返回的是estimator 的分类结果(或回归值),这个对于后期模型的改善很重要,可以通过该预测输出对比实际目标值,准确定位到预测出错的地方,为我们参数优化及问题排查十分的重要。
cross_val_score与cross_validate也差不多,不过cross_validate提供了有关拟合时间,训练和测试分数的更多信息,可以返回dataframe格式,清晰可见。

from sklearn import tree
import numpy as np
import pandas as pd 
from sklearn import datasets,model_selection
from sklearn.metrics import accuracy_score
from sklearn.model_selection import cross_val_score,cross_val_predict,cross_validate

import matplotlib.pyplot as
  • 5
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
十折交叉验证是一种常用交叉验证方法,可以在机器学习中使用。在sklearn中,可以使用KFold来实现十折交叉验证。KFold函数可以将数据集分成k个互斥的子集,其中每个子集都可以作为一次验证集,其余的k-1个子集作为训练集。 在sklearn的KFold函数中,参数n_splits表示将数据集分成几折,而shuffle参数默认为False,表示不进行洗牌。当shuffle参数为True时,每次划分样本都会进行洗牌,以增加模型的泛化能力。 使用KFold函数可以返回一个迭代器,该迭代器可以生成每个训练集和验证集的索引。通过遍历迭代器,可以获取每次训练集和验证集的索引,并在每次迭代中使用这些索引来训练和评估模型。 总结来说,十折交叉验证是一种常用的机器学习方法,可以通过使用sklearn中的KFold函数来实现。该函数将数据集分成k个互斥的子集,其中k-1个子集作为训练集,剩余的1个子集作为验证集。可以通过迭代器来获取每次训练集和验证集的索引,并使用这些索引来训练和评估模型。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [【机器学习】(18)使用sklearn实现交叉验证](https://blog.csdn.net/m0_47256162/article/details/117636403)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值