Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >模型选择之交叉验证

模型选择之交叉验证

作者头像
Coggle数据科学
发布于 2019-09-12 09:51:59
发布于 2019-09-12 09:51:59
1.6K00
代码可运行
举报
文章被收录于专栏:Coggle数据科学Coggle数据科学
运行总次数:0
代码可运行

(背景为纪念2018年西安第一场雪)

我们这里介绍两种模型选择的方法,分别是正则化和交叉验证。

交叉验证

代码语言:txt
AI代码解释
复制
  交叉验证是在机器学习建立模型和验证模型参数时常用的办法,一般被用于评估一个机器学习模型的表现。更多的情况下,我们也用交叉验证来进行模型选择(model selection)。
代码语言:txt
AI代码解释
复制
  交叉验证,顾名思义,就是重复的使用数据,把得到的样本数据进行切分,组合为不同的训练集和测试集,用训练集来训练模型,用测试集来评估模型预测的好坏。在此基上可以得到多组不同的训练集和测试集,某次训练集中的某样本在下次可能成为测试集中的样本,即所谓“交叉”。 

  那么什么时候才需要交叉验证呢?交叉验证用在数据不是很充足的时候。如果数据样本量小于一万条,我们就会采用交叉验证来训练优化选择模型。如果样本大于一万条的话,我们一般随机的把数据分成三份,一份为训练集(Training Set),一份为验证集(Validation Set),最后一份为测试集(Test Set)。用训练集来训练模型,用验证集来评估模型预测的好坏和选择模型及其对应的参数。把最终得到的模型再用于测试集,最终决定使用哪个模型以及对应参数。

  回到交叉验证,根据切分的方法不同,交叉验证分为下面三种:   

  第一种是简单交叉验证,所谓的简单,是和其他交叉验证方法相对而言的。首先,我们随机的将样本数据分为两部分(比如: 70%的训练集,30%的测试集),然后用训练集来训练模型,在测试集上验证模型及参数。接着,我们再把样本打乱,重新选择训练集和测试集,继续训练数据和检验模型。最后我们选择损失函数评估最优的模型和参数。 

  第二种是

折交叉验证( S-Folder Cross Validation),也是经常会用到的。和第一种方法不同,

折交叉验证先将数据集

随机划分为

个大小相同的互斥子集,即

,每次随机的选择

份作为训练集,剩下的1份做测试集。当这一轮完成后,重新随机选择

份来训练数据。若干轮(小于

)之后,选择损失函数评估最优的模型和参数。注意,交叉验证法评估结果的稳定性和保真性在很大程度上取决于

取值。

周志华《机器学习

代码语言:txt
AI代码解释
复制
  第三种是**留一交叉验证**(Leave-one-out Cross Validation),它是第二种情况的特例,此时 

等于样本数

,这样对于

个样本,每次选择

个样本来训练数据,留一个样本来验证模型预测的好坏。此方法主要用于样本量非常少的情况,比如对于普通适中问题,

小于50时,我一般采用留一交叉验证。

  通过反复的交叉验证,用损失函数来度量得到的模型的好坏,最终我们可以得到一个较好的模型。那这三种情况,到底我们应该选择哪一种方法呢?一句话总结,如果我们只是对数据做一个初步的模型建立,不是要做深入分析的话,简单交叉验证就可以了。否则就用S折交叉验证。在样本量少的时候,使用S折交叉验证的特例留一交叉验证。

  此外还有一种比较特殊的交叉验证方式,也是用于样本量少的时候。叫做自助法(bootstrapping)。比如我们有m个样本(m较小),每次在这m个样本中随机采集一个样本,放入训练集,采样完后把样本放回。这样重复采集m次,我们得到m个样本组成的训练集。当然,这m个样本中很有可能有重复的样本数据。同时,用原始的m个样本做测试集。这样接着进行交叉验证。由于我们的训练集有重复数据,这会改变数据的分布,因而训练结果会有估计偏差,因此,此种方法不是很常用,除非数据量真的很少,比如小于20个。

实例代码

使用sklearn库实现交叉验证

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import numpy as np
from sklearn import datasets
from sklearn.cross_validation import train_test_split
#train_test_split进行数据切分
#X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
from sklearn.neighbors import KNeighborsClassifier
from sklearn.cross_validation import cross_val_score 

def main():
    # 加载iris数据集
    iris = datasets.load_iris()
    # 读取特征
    X = iris.data
    # 读取分类标签
    y = iris.target
    # 定义分类器,k近邻选择为5
    knn = KNeighborsClassifier(n_neighbors = 5)
    # 进行交叉验证数据评估, 数据分为5部分, 每次用一部分作为测试集
    scores = cross_val_score(knn, X, y, cv = 5, scoring = 'accuracy')
    # 输出5次交叉验证的准确率
    print(scores)

if __name__ == '__main__':
    main()

最后输出结果

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[ 0.96666667  1.          0.93333333  0.96666667  1.        ]
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
交叉验证(Cross Validation)原理小结
    交叉验证是在机器学习建立模型和验证模型参数时常用的办法。交叉验证,顾名思义,就是重复的使用数据,把得到的样本数据进行切分,组合为不同的训练集和测试集,用训练集来训练模型,用测试集来评估模型预测的好坏。在此基础上可以得到多组不同的训练集和测试集,某次训练集中的某样本在下次可能成为测试集中的样本,即所谓“交叉”。 
刘建平Pinard
2018/08/14
8780
几种交叉验证(cross validation)方式的比较
模型评价的目的:通过模型评价,我们知道当前训练模型的好坏,泛化能力如何?从而知道是否可以应用在解决问题上,如果不行,那又是哪里出了问题? train_test_split 在分类问题中,我们通常通过对训练集进行train_test_split,划分成train 和test 两部分,其中train用来训练模型,test用来评估模型,模型通过fit方法从train数据集中学习,然后调用score方法在test集上进行评估,打分;从分数上我们可以知道 模型当前的训练水平如何。 from sklearn.da
用户1631856
2018/04/12
5.8K0
几种交叉验证(cross validation)方式的比较
模型评估、过拟合欠拟合以及超参数调优方法
上一篇文章介绍了性能评估标准,但如何进行模型评估呢,如何对数据集进行划分出训练集、验证集和测试集呢?如何应对可能的过拟合和欠拟合问题,还有超参数的调优,如何更好更快找到最优的参数呢?
kbsc13
2019/08/16
1.8K0
机器学习之交叉验证
交叉验证(Cross Validation)是在机器学习建立模型和验证模型参数时常用的方法。顾名思义,就是重复的使用数据,把得到的样本数据进行切分,组合为不同的训练集和测试集。用训练集来训练模型,测试集来评估模型的好坏。在此基础上可以得到多组不同的训练集和测试集,某次训练集中的样本,在下次可能成为测试集中的样本,也就是所谓的交叉。
小一
2019/08/14
8620
机器学习之交叉验证
Spark机器学习——模型选择与参数调优之交叉验证
spark 模型选择与超参调优 机器学习可以简单的归纳为 通过数据训练y = f(x) 的过程,因此定义完训练模型之后,就需要考虑如何选择最终我们认为最优的模型。 如何选择最优的模型,就是本篇的主要内容: 模型验证的方法 超参数的选择 评估函数的选择 模型验证的方法 在《统计学习方法》这本书中,曾经讲过模型验证的方法有三种,分别是简单的交叉验证,S折交叉验证,留一交叉验证 简单的交叉验证 即把全部数据按照比例分割成两部分,分别是训练集和测试集。在训练集训练模型,在测试集测试效果,最终选择一个代价比较小
用户1154259
2018/03/28
1.6K0
机器学习(十二)交叉验证实例
假设有个未知模型具有一个或多个待定的参数,且有一个数据集能够反映该模型的特征属性(训练集)。
致Great
2018/11/07
2.6K0
机器学习,过拟合与欠拟合,正则化与交叉验证
不同的机器学习方法会给出不同的模型。当损失函数给定时,基于损失函数的模型的训练误差(training error)和模型的测试误差(test error)就自然成为学习方法评估的标准。
zhangjiqun
2024/12/14
2260
机器学习,过拟合与欠拟合,正则化与交叉验证
为什么要用交叉验证
本文结构: 什么是交叉验证法? 为什么用交叉验证法? 主要有哪些方法?优缺点? 各方法应用举例? ---- 什么是交叉验证法? 它的基本思想就是将原始数据(dataset)进行分组,一部分做为训练集来训练模型,另一部分做为测试集来评价模型。 ---- 为什么用交叉验证法? 交叉验证用于评估模型的预测性能,尤其是训练好的模型在新数据上的表现,可以在一定程度上减小过拟合。 还可以从有限的数据中获取尽可能多的有效信息。 ---- 主要有哪些方法? 1. 留出法 (holdout cross validation)
杨熹
2018/04/03
2.2K0
为什么要用交叉验证
使用Python实现交叉验证与模型评估
交叉验证是一种评估机器学习模型性能的常用方法,它可以更准确地估计模型在未知数据上的性能。在本文中,我们将介绍交叉验证的原理和常见的几种交叉验证方法,并使用Python来实现这些方法,并展示如何使用交叉验证来评估模型的性能。
Echo_Wish
2024/04/19
4870
机器学习-12-sklearn案例01-初级
网上有很多关于sklearn的学习教程,最好的教程就是官方文档。 官方文档地址:https://scikit-learn.org/stable/
用户2225445
2024/05/26
3560
机器学习-12-sklearn案例01-初级
机器学习入门 8-6 验证数据集与交叉验证
前几个小节通过引入过拟合和欠拟合的概念,让大家理解使用train_test_split方法划分出测试集的意义。
触摸壹缕阳光
2019/12/30
1.4K0
机器学习中的交叉验证
总第100篇 本篇讲讲机器学习中的交叉验证问题,并利用sklearn实现。 前言 在说交叉验证以前,我们先想一下我们在搭建模型时的关于数据切分的常规做法[直接利用train_test_split把所有的数据集分成两部分:train_data和test_data,先在train_data上进行训练,然后再在test_data上进行测试评估模型效果的好坏]。 因为我们训练模型时,不是直接把数丢进去就好了,而是需要对模型的不断进行调整(比如参数),使模型在测试集上的表现足够好,但是即使模型在测试集上效果好,不
张俊红
2018/04/11
1.9K0
机器学习中的交叉验证
R 交叉验证①
什么是交叉验证?在机器学习中,交叉验证是一种重新采样的方法,用于模型评估,以避免在同一数据集上测试模型。交叉验证的概念实际上很简单:我们可以将数据随机分为训练和测试数据集,而不是使用整个数据集来训练和测试相同的数据。交叉验证方法有几种类型LOOCV - leave -one- out交叉验证,holdout方法,k - fold交叉验证。 K折交叉验证(k-fold cross-validation)首先将所有数据分割成K个子样本,不重复的选取其中一个子样本作为测试集,其他K-1个样本用来训练。共重复K次,
用户1359560
2018/08/27
8170
交叉验证_验证的三种方法
它的基本思想就是将原始数据(dataset)进行分组,一部分做为训练集来训练模型,另一部分做为测试集来评价模型。
全栈程序员站长
2022/09/20
2.7K0
交叉验证_验证的三种方法
【机器学习】交叉验证 Cross-validation
以下简称交叉验证(Cross Validation)为CV.CV是用来验证分类器的性能一种统计分析方法,基本思想是把在某种意义下将原始数据(dataset)进行分组,一部分做为训练集(train set),另一部分做为验证集(validation set),首先用训练集对分类器进行训练,在利用验证集来测试训练得到的模型(model),以此来做为评价分类器的性能指标.常见CV的方法如下:
Twcat_tree
2023/11/22
5140
图解机器学习中的 12 种交叉验证技术
今天我给大家盘点下机器学习中所使用的交叉验证器都有哪些,用最直观的图解方式来帮助大家理解他们是如何工作的。
数据STUDIO
2021/09/09
2.8K0
《机器学习》学习笔记(四)——用Python代码实现单变量线性回归、多变量线性回归;数据评估之交叉验证法、留出法、自助法
根据上面的训练数据,我们能否推断(预测)出某个直径的披萨可能的售价呢?例如,12英寸的披萨可能售卖多少钱?
荣仔_最靓的仔
2021/02/02
3K0
《机器学习》学习笔记(四)——用Python代码实现单变量线性回归、多变量线性回归;数据评估之交叉验证法、留出法、自助法
机器学习|模型选择之划分数据集及Sklearn实现
直接将数据集D划分为两个互斥的集合:训练集S和测试集T(D = S∪T,S∩T = ∅),在S上训练模型,用T来评估其测试误差。
用户1621951
2019/10/18
2.5K0
Scikit-Learn 中级教程——网格搜索和交叉验证
在机器学习中,选择合适的模型超参数是提高模型性能的关键一步。Scikit-Learn 提供了网格搜索(Grid Search)和交叉验证(Cross-Validation)等工具,帮助我们找到最佳的超参数组合。本篇博客将深入介绍如何使用 Scikit-Learn 中的网格搜索和交叉验证来优化模型。
Echo_Wish
2024/01/22
9920
KFold交叉验证
from sklearn.model_selection import KFold
润森
2019/10/24
1.9K0
相关推荐
交叉验证(Cross Validation)原理小结
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档