大家好,欢迎来到IT知识分享网。
在构建一个机器学习模型之后,我们需要对模型的性能进行评估。如果一个模型过于简单,就会导致欠拟合(高偏差)问题,如果模型过于复杂,就会导致过拟合(高方差)问题。为了使模型能够在欠拟合和过拟合之间找到一个折中方案,我们需要对模型进行评估,后面将会介绍holdout交叉验证和k折交叉验证,通过这两种方法,我们可以获得一个模型泛化误差的可靠估计,也就是模型在新数据上的性能。
一、holdout交叉验证
holdout交叉验证(holdout cross-validation)是评估机器学习模型泛化能力一种常用的方法。holdout方法是将数据集划分为训练集和测试集,训练集用于训练模型,测试集用于评估模型的性能。
但是,如果我们在模型选中过程中不断的重复使用相同的测试数据,其实就可以将测试数据看作训练数据的一部分,从而导致模型的过拟合。在使用holdout交叉验证的时候,有一种更好的方法可以避免过拟合,将数据集分为三个部分:训练集、测试集和验证集。训练集用于不同模型的拟合,模型在验证集上的表现作为模型性能的评估和选择标准,测试集是当模型的参数优化完成之后,再用来评估模型的泛化误差。
holdout方法的缺点:模型性能的评估对于训练集和验证集的划分是敏感的,评价的结果会随着样本的不同而发生变化。接下来将介绍一种鲁棒性更高的性能评价技术:k折交叉验证。
二、k折交叉验证
k折交叉验证(k-fold cross-validation),不重复的将训练集划分为k个,其中k-1个用于模型的训练,剩下的一个用于测试。重复k次,可以得到k个模型及对应模型的性能评价。通过这些独立且不同的数据子集来获取评价结果,最后取这些结果的平均性能,与holdout方法相比,这样的结果对于数据集的划分敏感度相对较低。通过k折交叉验证来验证模型参数的调优,从而找到模型泛化性能最优的参数,找到满意的参数之后,就使用整个训练集作为训练数据来训练模型,然后通过测试集来评价模型的性能。在k折交叉验证中,每一个样本都会被划分为训练集或者测试集(验证集)的机会,与holdout方法相比,这样模型可以获得一个较小的方差。
在k则交叉验证中,常用的k值是10,即训练数据被划分为10块,其中9块用于训练,1块用于测试评价模型的性能,每一次评价都能获得一个评价指标Ei(分类的准确率或者误差),最后我们选取模型平均指标的平均值。当,训练数据相对较少的时候,我们可以增加k的大小,使得每次迭代中将会有更多的数据可以用于训练,这样可以获得较小的偏差。在增加k值的同时,也会导致交叉验证的算法运行时间较长,而且由于训练块之间高度相似,从而导致评价结果的方差较高。如果训练数据较大的时候,我们可以减少k值,这样不仅能够较少交叉验证需要消耗的时间还可以降低模型在不同数据上的重复拟合,从而获得一个较准确的模型评估结果。
三、sklearn实现k折交叉验证
数据集下载地址:https://www.kaggle.com/uciml/breast-cancer-wisconsin-data/data
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/52015.html