十折交叉验证pythoniris_数据集的划分——交叉验证法

本文介绍了交叉验证法在机器学习中的重要性,特别是十折交叉验证,通过Python示例展示了如何使用sklearn库进行Logistic回归模型的训练,并对比了不同类型的交叉验证方法,如5折交叉验证、留一法和重复的k折交叉验证。通过这些方法,可以更好地评估模型的泛化能力,尤其适用于样本量较小的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文作者:王 歌

文字编辑:戴 雯

技术总编:张 邯Python云端培训课程火热招生中~重大通知!!!爬虫俱乐部于2020年7月11日至14日在线上举行为期四天的Stata编程技术定制培训,招生工作已经圆满结束啦!!!

另外,应广大学员需求,爬虫俱乐部将于2020年7月25日至28日在线上举行Python编程技术训练营,本次培训采用理论与案例相结合的方式,帮助大家在掌握Python基本思想的基础上,学习科学计算技术与网络数据抓取技术,详情可点击《Python云端培训课程开始报名~》,或点击文末阅读原文直接提交报名信息呦~导读前面我们在举例时,通常是将所使用的数据集按照75%和25%的比例划分为训练集和测试集,这主要是为了我们举例方便,同时划分后的数据量也依然符合大样本的要求。其实在机器学习中还有其他划分数据集的方法,可以在本身数据总量就比较小时使模型达到很好的效果,我们今天介绍的交叉验证法就是比较常用的方法,它在我们将要介绍的集成学习的Stacking算法中经常使用到。

1方法介绍我们往往会得到多个模型,而最终选择的模型必定是泛化能力强,也就是在未知的新数据上效果最好的模型,因此我们在训练模型前就要将我们所掌握的数据进行划分,严格来说一般会划分为训练集、验证集和测试集,在训练集上进行训练模型,在验证集上试验效果、调整参数设置,在测试集上进行最终的测试。为了保证最终的效果,这三个集合不能有交集,常见的比例是8:1:1。当然,通常我们只有训练集和测试集也是可以的,前面我们使用的样例数据集只有几百个,因此也没有划分验证集。我们所使用的train_test_split属于留出法,也就是随机将一部分数据作为训练集,剩下的作为测试集。但对样本信息的利用往往不充分,并且需要的样本量较大。如果我们本身样本量有限,并且想充分利用数据集中的信息,我们可以采用交叉验证法。交叉验证法是将数据集划分为k个大小相似的互斥子集,并在划分时保持数据分布的一致性,每次用k-1个子集的并集作为训练集,剩余的做测试集,进行k次训练,最后取k次结果的均值。该方法依赖于k值的选取,通常取10,因此也称为k折交叉

### 数据集划分交叉验证 #### 验证集划分的重要性 为了确保模型具备良好的泛化能力,防止过拟合现象的发生,合理地划分验证集至关重要。通过引入独立于训练过程的验证集,可以有效地监控模型的学习进度并调整超参数。 #### 常见的数据集划分方式 一种常见的做是按照一定比例将原始数据切分成三个互斥的部分:训练集用于构建预测函数;验证集用来调优算配置;而测试集则是在所有优化完成后仅执行一次评估的任务[^1]。 对于具体的比例分配并没有固定的标准,通常会依据实际应用场景和个人经验来决定。例如,在某些情况下可能会采用70%训练/15%验证/15%测试这样的分割方案。 #### 实现交叉验证的最佳实践 ##### K交叉验证 (K-Fold Cross Validation) 这是一种广泛使用的策略,它能够更充分地利用有限数量的数据样本进行多次迭代式的训练和检验: - 将整个可用数据集均匀划分为\( k \)份; - 对每一轮循环,选取一份作为临时性的验证集,其余\((k−1)\)份构成当前轮次下的训练集; - 执行完整的建模流程直至完成全部\( k \)轮,并汇总各阶段所得误差指标以获得更加稳定可靠的性能估计值[^4]。 下面给出一段Python代码片段展示如何应用sklearn库来进行简单的五交叉验证操作: ```python from sklearn.model_selection import KFold, cross_val_score from sklearn.datasets import load_iris from sklearn.linear_model import LogisticRegression # 加载鸢尾花分类问题示例数据集 data = load_iris() X, y = data.data, data.target # 初始化逻辑回归分类器实例对象 classifier = LogisticRegression(max_iter=200) # 创建KFold对象指定叠次数为5 kf = KFold(n_splits=5, shuffle=True, random_state=42) # 使用cross_val_score计算平均得分 scores = cross_val_score(classifier, X, y, cv=kf) print(f'Cross-validation scores: {scores}') print(f'Mean score: {"{:.3f}".format(scores.mean())}') ``` ##### 留一交叉验证 (Leave-One-Out CV 或 LOOCV) 当面对极少量观测值时可考虑此特殊形式的交叉验证技术——即令\( k=n \),其中\( n \)代表总的记录数目。这意味着几乎每次都只留出单条记录充当验证案例,从而尽可能减少因样本量不足带来的偏差影响[^2]。 尽管LOOCV提供了近乎无偏的错误率估算,但由于其极端耗费资源的特点并不适用于大规模数据环境之下。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值