评估并改善模型的预测性能
介绍
交叉验证是一种模型评估方法,用于评估机器学习算法对尚未经过训练的新数据集进行预测时的性能。通过对数据集进行分区并使用子集来训练模型和其余数据进行测试来完成的。由于交叉验证并未使用所有数据来构建模型,因此它是防止训练期间过度拟合的一种常用方法。
方法流程
每一轮交叉验证都涉及将原始数据集随机划分为训练集和测试集。然后,训练集用于训练监督学习算法,测试集用于评估其性能。重复此过程几次,并将均交叉验证误差( average cross-validation error)用作性能指标。
常见的交叉验证技术包括:
k-fold:将数据划分为大小大致相等的k个随机选择的子集。一个子集用于验证使用其余子集训练的模型。重复此过程k次,以便每个子集仅使用一次进行验证。
Holdout:将数据精确地分成指定比例的两个子集,以进行训练和验证。
Leaveout:使用k倍方法对数据进行分区,其中k等于数据中观察的总数。也称为留一法交叉验证。
Repeated random sub-sampling:在所有运行中对数据进行随机分区和汇总结果的蒙特卡洛重复。
Stratify:对数据进行分区,以便训练和测试集在响应或目标中具有大致相同的班级比例。
Resubstitution:不对数据进行分区;使用训练数据进行验证。通常会对性能产生过分乐观的估计,如果有足够的数据,则必须避免这样做。
交叉验证可能需要大量的计算,因为训练和验证需要进行多次。由于每个分区集都是独立的,因此可以并行执行此分析以加快处理过程。
基于MATLAB进行交叉验证
语法
c = cvpartition(n,'KFold',k)
c = cvpartition(n,'HoldOut',p)
c = cvpartition(group,'KFold',k)
c = cvpartition(group,'KFold',k,'Stratify',stratifyOption)
c = cvpartition(group,'HoldOut',p)
c = cvpartition(group,'HoldOut',p,'Stratify',stratifyOption)
c = cvpartition(n,'LeaveOut')
c = cvpartition(n,'resubstitution')
基于MATLAB K-fold交叉验证
k-fold crossValidation:将数据集A分为训练集(training set)B和测试集(test set)C,在样本量不充足的情况下,为了充分利用数据集对算法效果进行测试,将数据集A随机分为k个子样本集,每次将其中一个子样本集作为测试集,剩下k-1个子样本集作为训练集进行训练。
在matlab中,可以利用:indices=crossvalind(‘Kfold’,N,M) 来实现随机分包的操作,其中N为样本数,M为随机划分子集数量k。
clear all
clcload('fisheriris');
indices = crossvalind('Kfold',species,10);
cp = classperf(species);for i = 1:10 %交叉验证k=10,10个子集轮流作为测试集test = (indices == i); %获得test集元素在数据集中对应的单元编号train = ~test; %train集元素的编号为非test元素的编号class = classify(meas(test,:),meas(train,:),species(train,:)); %要验证的算法classperf(cp,class,test);
end
cp.ErrorRate
模型误差分析
当我们设计并训练好模型之后,就需要在测试集上进行验证。而当模型在测试集上的效果不佳后,我们就需要从模型在测试集上的误差来源进行分析,进而调整模型。
模型选择注意事项
不正确的模型选择
如图所示,将数据集分为两个部分,其中一部分是训练集,另外一部分是测试集。当我们在训练集上完成多个模型训练,就在测试集上进行验证并根据在测试集上的结果对模型进行调整,最终选择在测试集上最好的模型作为结果。
上述做法不正确的原因在于,我们发现模型在测试集上的结果并不理想,就会调整模型,使模型在测试集上的表现更好。但是,由于训练集和测试集的数据分布可能会存在“区别”,因此我们在测试集上进行调整的话,其实是把训练集和测试集的“区别”进行调整。但是,当我们将模型放在线上,所接触到的数据的分布跟训练集和测试集都有“区别”,这个时候,模型的整个效果就没有在测试集上表现的那么好。通常还会变差!
交叉验证
为了真正体现模型在验证集上的性能,可以采用如下图方法进行模型选择。将训练集分为两部分,一部分是训练集(Training Set),一部分是验证集(Validation Set)。在训练集上训练模型,并在验证集上进行验证。当我们确定哪一个模型最好之后,将所有数据集在训练一遍。最后在public Testing Set上进行验证,在public Testing Set上的结果可以反映模型真正的性能。并且不要由于public Testing Set上的效果不佳就去调整模型,因为调整训练集跟public Testing Set之间的区别,并不能真正调整跟线上数据的区别。
k折交叉验证
在上图中,将训练集分为两部分后,对于单个模型只进行一次实验验证,可能会存在误差。因此可以进行多个实验,取平均值可能更好地进行评估,如下图所示。
将所有训练局等分为k份,将其中一份作为验证集,其余为测试集,就可以形成k中训练集和验证集。对于单个模型,分别进行k次试验,取平均值作为最终的验证效果。
参考
https://www.mathworks.com/help/stats/crossval.html
https://www.mathworks.com/help/stats/cvpartition.html
https://www.mathworks.com/help/bioinfo/ref/crossvalind.html
https://www.cnblogs.com/MrPan/p/9484033.html
评估并改善模型的预测性能相关推荐
- 如何评估模型的预测性能?
you can refer to 如何评估模型的预测性能? 一.模型评估简介 http://www2.mccombs.utexas.edu/faculty/Maytal.Saar-Tsechansky ...
- 阿里巴巴开源大规模稀疏模型训练/预测引擎DeepRec
简介:经历6年时间,在各团队的努力下,阿里巴巴集团大规模稀疏模型训练/预测引擎DeepRec正式对外开源,助力开发者提升稀疏模型训练性能和效果. 作者 | 烟秋 来源 | 阿里技术公众号 经历6年时间 ...
- 使用折外预测(oof)评估模型的泛化性能和构建集成模型
机器学习算法通常使用例如 kFold等的交叉验证技术来提高模型的准确度.在交叉验证过程中,预测是通过拆分出来的不用于模型训练的测试集进行的.这些预测被称为折外预测(out-of-fold predic ...
- R语言机器学习Caret包(Caret包是分类和回归训练的简称)、数据划分、数据预处理、模型构建、模型调优、模型评估、多模型对比、模型预测推理
R语言机器学习Caret包(Caret包是分类和回归训练的简称).数据划分.数据预处理.模型构建.模型调优.模型评估.多模型对比.模型预测推理 目录
- R语言构建logistic回归模型并评估模型:模型预测结果抽样、可视化模型分类预测的概率分布情况、使用WVPlots包绘制ROC曲线并计算AUC值
R语言构建logistic回归模型并评估模型:模型预测结果抽样.可视化模型分类预测的概率分布情况.使用WVPlots包绘制ROC曲线并计算AUC值 目录
- ML之回归预测:利用九大类机器学习算法对无人驾驶系统参数(2018年的data,18+2)进行回归预测+评估九种模型性能
ML之回归预测:利用九大类机器学习算法对无人驾驶系统参数(2018年的data,18+2)进行回归预测+评估九种模型性能 相关文章 ML之回归预测:利用九大类机器学习算法对自动驾驶系统参数(2018年 ...
- Python机器学习实战:掌握这四个特征选择方法,提升模型预测性能
机器学习实战:这里没有艰深晦涩的数学理论,我们将用简单的案例和大量的示例代码,向大家介绍机器学习的核心概念.我们的目标是教会大家用Python构建机器学习模型,解决现实世界的难题. 当数据集包含很多特 ...
- R语言使用xgboost包拟合xgboost回归模型、使用predict函数和训练好的模型进行预测推理、计算回归模型的评估指标MAE、MSE、RMSE
R语言使用xgboost包拟合xgboost回归模型.使用predict函数和训练好的模型进行预测推理.计算回归模型的评估指标MAE.MSE.RMSE 目录
- 如何评估随机森林模型以及重要预测变量的显著性
如何评估随机森林模型以及重要预测变量的显著性 说到随机森林(random forest,RF),想必很多同学都不陌生了,毕竟这些机器学习方法目前非常流(fàn)行(làn)--白鱼同学也曾分别分享过& ...
- R语言使用lm函数拟合多项式回归模型:使用predict函数和训练好的模型进行预测推理、计算回归模型的评估指标MAE、MSE、RMSE、R方等指标
R语言使用lm函数拟合多项式回归模型:使用predict函数和训练好的模型进行预测推理.计算回归模型的评估指标MAE.MSE.RMSE.R方等指标 目录
最新文章
- 洛谷—— P1118 [USACO06FEB]数字三角形Backward Digit Su…
- jar打包命令-指定主类一次搞定!
- 数据切分——Mysql分区表的管理与维护
- php 图片生成vr_PHP 使用Krpano 生成全景图
- console java_Java Console writer()方法与示例
- Eclipse export导出war包报错(Module name is invalid.)
- 快速入门ECS快照功能,助力大数据容灾保护
- Command NetWork(POJ-3164)
- 大数据-HDFS文件系统是什么
- 新书《Ext JS 4.2 实战》终于出炉了
- MAC编译库的路径问题rpath/install_name
- php请求传感器数据流通道号,一汽大众发动机数据流与通道号 匹配设定数据
- 一键式代购服务让,省时省力省心
- 【软件测试】如何测试人工智能软件?
- Gmail,google.com等谷歌英文网站被封解决办法
- 3dmax如何拆分模型_3dmax模型怎么分割
- uniapp-无缝轮播
- Ceph分布式存储系列(二):ceph-deploy方式部署三节点ceph集群
- java 日历控件_java swing 日历控件怎么实现 最好是源码
- 更多推薦:蔡崇信、曾鳴、秦朔、闌夕、虞鋒、田溯寧