交叉验证应用

article/2025/8/18 20:45:40

交叉验证

另一种常用的模型选择方法是交叉验证( cross validation)。
如果给定的样本数据充足,进行模型选择的一种简单方法是随机地将数据集切分成三部分,分别为训练集(training set)、验证集(validation set)和测试集(testset)。训练集用来训练模型,验证集用于模型的选择,而测试集用于最终对学习方法的评估。在学习到的不同复杂度的模型中,选择对验证集有最小预测误差的模型。由于验证集有足够多的数据,用它对模型进行选择也是有效的。
但是,在许多实际应用中数据是不充足的。为了选择好的模型,可以采用交叉验证方法。交叉验证的基本想法是重复地使用数据;把给定的数据进行切分,将切分的数据集组合为训练集与测试集,在此基础上反复地进行训练、测试以及模型选择。
1.简单交叉验证
简单交叉验证方法是:首先随机地将已给数据分为两部分,一部分作为训练集,另一部分作为测试集(例如,70%的数据为训练集,30%的数据为测试集);然后用训练集在各种条件下(例如,不同的参数个数)训练模型,从而得到不同的模型
在测试
集上评价各个模型的测试误差,选出测试误差最小的模型。
2.S折交叉验证
应用最多的是S折交叉验证(S-fold cross validation),方法如下:首先随机地将已给数据切分为S个互不相交、大小相同的子集;然后利用S-1个子集的数据训练模型,利用余下的子集测试模型;将这一过程对可能的S种选择重复进行;最后选出S次评测中平均测试误差最小的模型。
3.留一交叉验证
S折交叉验证的特殊情形是S =N,称为留一交叉验证(leave-one
out crOss
validation),往往在数据缺乏的情况下使用。这里,N是给定数据集的容量
在这里插入图片描述

1.将拆分和评估合并执行

from sklearn import model_selection
from sklearn.datasets import load_boston
boston=load_boston()
from sklearn.linear_model import LinearRegression
reg=LinearRegression()
from sklearn.model_selection import cross_val_score
scores=cross_val_score(reg,boston.data,boston.target,cv=10)#boston.data,boston.target,x和y  ,cv拆分几次
scores
array([ 0.73376082,  0.4730725 , -1.00631454,  0.64113984,  0.54766046,0.73640292,  0.37828386, -0.12922703, -0.76843243,  0.4189435 ])
scores.mean(),scores.std()
(0.20252899006056194, 0.5952960169512286)
scores=cross_val_score(reg,boston.data,boston.target,scoring='explained_variance',cv=10)
scores
array([ 0.74784412,  0.5381936 , -0.80757662,  0.66844779,  0.5586898 ,0.74128804,  0.41981565, -0.11666214, -0.44561819,  0.42197365])
scores.mean(),scores.std()
(0.27263956979413645, 0.5131020457665374)

2.保证案例顺序的随机性

在这里插入图片描述

#对数据进行随机重排,保证拆分的均匀性
import numpy as np
X,y=boston.data,boston.target
indices=np.arange(y.shape[0])
np.random.shuffle(indices)
X,y=X[indices],y[indices]
from sklearn.linear_model import LinearRegression
reg=LinearRegression()
from sklearn.model_selection import cross_val_score
scores=cross_val_score(reg,X,y,cv=10)
scores
array([0.66242457, 0.74213001, 0.73590188, 0.79634624, 0.56973987,0.69967033, 0.69324636, 0.57360763, 0.70584966, 0.8325531 ])
scores.mean(),scores.std()
(0.7011469635197446, 0.08021111886104514)

3.同时使用多个评价指标

在这里插入图片描述

from sklearn.model_selection import cross_validate
scoring=["r2",'explained_variance']
scores=cross_validate(reg,X,y,cv=10,scoring=scoring,return_train_score=False)
scores
{'fit_time': array([0.00225925, 0.00149512, 0.00085235, 0.00100565, 0.        ,0.00107932, 0.00061202, 0.00142884, 0.        , 0.        ]),'score_time': array([0.00052142, 0.        , 0.00120974, 0.00099659, 0.00137043,0.00175881, 0.        , 0.        , 0.00099969, 0.00099397]),'test_r2': array([0.66242457, 0.74213001, 0.73590188, 0.79634624, 0.56973987,0.69967033, 0.69324636, 0.57360763, 0.70584966, 0.8325531 ]),'test_explained_variance': array([0.66401786, 0.75721853, 0.73863241, 0.79800809, 0.61098039,0.70935696, 0.71851602, 0.5946434 , 0.70776645, 0.83265924])}
from sklearn.model_selection import cross_validate
scoring=["r2",'explained_variance']
scores=cross_validate(reg,X,y,cv=10,scoring=scoring,return_train_score=True)
scores
{'fit_time': array([0.00160408, 0.00049663, 0.00055194, 0.00099707, 0.00105953,0.0012486 , 0.        , 0.00099659, 0.00099707, 0.00099683]),'score_time': array([0.00094795, 0.0010004 , 0.        , 0.00099659, 0.00122499,0.00109267, 0.00099659, 0.00099683, 0.        , 0.        ]),'test_r2': array([0.66242457, 0.74213001, 0.73590188, 0.79634624, 0.56973987,0.69967033, 0.69324636, 0.57360763, 0.70584966, 0.8325531 ]),'train_r2': array([0.74675463, 0.73829966, 0.7393989 , 0.7289949 , 0.76099556,0.74509271, 0.74245879, 0.74721245, 0.74307661, 0.72665402]),'test_explained_variance': array([0.66401786, 0.75721853, 0.73863241, 0.79800809, 0.61098039,0.70935696, 0.71851602, 0.5946434 , 0.70776645, 0.83265924]),'train_explained_variance': array([0.74675463, 0.73829966, 0.7393989 , 0.7289949 , 0.76099556,0.74509271, 0.74245879, 0.74721245, 0.74307661, 0.72665402])}
scores['test_r2'].mean()
0.7011469635197446

4.使用交叉验证的模型进行预测

在这里插入图片描述

from sklearn.model_selection import cross_val_predict
pred =cross_val_predict(reg,X,y,cv=10)
pred[:10]
array([18.3620206 , 12.14422565, 25.59073795, 20.73126557, 23.17191087,14.50564224, 20.58260498, 18.95012499, 36.99725954, 13.52825238])
from sklearn.metrics import r2_score
r2_score(y,pred)
0.7148847512596024

http://chatgpt.dhexx.cn/article/e6nt91sP.shtml

相关文章

肝!交叉验证

概述Holdout 交叉验证K-Fold 交叉验证Leave-P-Out 交叉验证总结 概述 交叉验证是在机器学习建立模型和验证模型参数时常用的办法。 顾名思义,就是重复的使用数据,把得到的样本数据进行切分,组合为不同的训练集和测试集。 用训练集来训练模型&…

深度学习:交叉验证(Cross Validation)

首先,交叉验证的目的是为了让被评估的模型达到最优的泛化性能,找到使得模型泛化性能最优的超参值。在全部训练集上重新训练模型,并使用独立测试集对模型性能做出最终评价。 目前在一些论文里倒是没有特别强调这样的操作,很多研究使…

【笔记】【机器学习基础】交叉验证

(一)交叉验证 交叉验证(cross-validation)是一种评估泛化性能的统计学方法,它比单次划分训练集和测试集的方法更加稳定、全面。在交叉验证中,数据被多次划分,并且需要训练多个模型。 最常用的…

入坑codewars

前几天做LeetCode上的大数乘法,代码没错,可就是提交不成功,显示SyntaxError: Unexpected token var我把所有代码都注释掉,只留下return 1,依然报同样的错误。。。感觉LeetCode对JSer不是特别友好刚刚在node社区看到有人…

CodeWars 我二了

昨天刷题,不经意间刷出来一个小彩蛋👇 今天醒来便发现, 卧槽,自己出现在解答列表第二,这lima,我一个小辣鸡也上榜了?🐂 话不多说,看键 警告,长文劝退,不是我啰嗦,是这题目一直在bibi赖赖 Simple Fun #345: The Original Numbers Task Some players are playin…

codewars题目

codewars题目解答 1.Calculating with Functions2.Sum of Pairs3.Maximum subarray sum4.Rot135.Calculating with Functions 1.Calculating with Functions 我的解决方案(粗糙的一批) function common(n, val) {var a, b;for (var key in n) {a key;b …

编程刷题平台Codewars初体验-Java

点此欢迎光临我的个人网站【一几文星球】 最近发现了一个很多网友都在推荐的编程刷题平台Codewars,作为一个对啥都好奇(啥都学不深 )的编程菜鸟,我二话不说直接开始注册体验。 网站一进,嘿,全英文&#x…

Codewars | 使用入门

https://jingyan.baidu.com/article/adc81513864eebf723bf73ab.html https://www.codewars.com/trainer/setup 注册以后,大家的编程段位是8段。段位越高,段数越小。 目前笔者的段位是6段。通过解决难度在6段和6段以上的问题可以获得段位的提升。当然&…

梯度提升树(GBDT)

提升树模型 提升树是以分类数或回归树为基本分类器的提升方法。提升方法实际采用加法模型&#xff08;即基函数的线性组合&#xff09;与前向分布算法&#xff0c;以决策树为基函数的提升方法为提升树&#xff08;boosting tree&#xff09;。基本分类器 x < v x<v x<…

机器学习: 提升

文章目录 Github提升的概念理解与随机森林的比较提升算法 GBDT参数设置和正则化 XGBoostAdaboost算法总结 Github 系列文章 pdf 版本已经上传至&#xff1a; https://github.com/anlongstory/awsome-ML-DL-leaning/tree/master/xiaoxiang-notes 欢迎 Star 和下载 ? 提升的概…

多模态深度学习综述:网络结构设计和模态融合方法汇总

点击上方“机器学习与生成对抗网络”&#xff0c;关注"星标" 获取有趣、好玩的前沿干货&#xff01; 作者丨小奚每天都要学习知乎 编辑丨极市平台 来源丨https://zhuanlan.zhihu.com/p/152234745 一、简介 从2010年开始&#xff0c;深度学习方法为语音识别&#xff0…

回归分析(数据拟合---MATLAB和1stopt软件)

回归分析&#xff08;regression analysis)指的是确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法。 回归分析按照涉及的变量的多少&#xff0c;分为一元回归和多元回归分析&#xff1b; 按照因变量的多少&#xff0c;可分为简单回归分析和多重回归分析&#xf…

利用Excel的LINEST计算线性拟合的斜率和截距的不确定性

目录 线性拟合的斜率和截距的不确定性Excel数组函数LINESTLINEST结果的含义LINEST输出的10个统计参数含义如下&#xff1a; 模型预测 y ^ \widehat{y} y ​ m x b mxb mxbReferences 线性拟合的斜率和截距的不确定性 利用熟悉的Excel绘图功能&#xff0c;可以根据距离-高程散…

机器学习算法——Kmeans

1.k-mean算法的原理 1、选取K个点做为初始聚集的簇心 2、分别计算每个样本点到K个簇核心的距离&#xff08;这里的距离一般取欧氏距离或余弦距离)&#xff0c;找到离该点最近的簇核心&#xff0c;将它归属到对应的簇 3、所有点都归属到簇之后&#xff0c;M个点就分为了K个簇…

【时序】Reformer:局部敏感哈希(LSH)实现高效 Transformer 论文笔记

论文名称&#xff1a;Reformer: The Efficient Transformer 论文下载&#xff1a;https://arxiv.org/abs/2001.04451 论文年份&#xff1a;ICLR2020 论文被引&#xff1a;706&#xff08;2020/04/20&#xff09; 论文代码&#xff1a;https://github.com/google/trax/tree/mast…

损失函数MSE和MAE的区别以及如何选择

1、均方误差&#xff08;L2损失&#xff09; 均方误差(MSE)是最常用的回归损失函数&#xff0c;计算方法是求预测值与真实值之间距离的平方和&#xff0c;公式如下&#xff1a; M S E 1 m ∑ m i 1 ( y i − y ^ i ) 2 MSE\frac{1}{m} \sum_{m}^{i1}\left(y_{i}-\hat{y}_{i}…

连载|GBDT如何进行回归和分类

GBDT 在前几年的机器学习竞赛以及工作中&#xff0c;人们使用着各种传统算法进行调参取得性能的提升&#xff0c;突然有一天杀出了一种名为GBDT的算法&#xff0c;改变了当前的格局&#xff0c;该算法在不同的场景中总是能够产生很好的效果&#xff0c;本文就让我们来了解一下…

最小二乘法多项式曲线拟合数学原理及其C++实现

目录 0 前言1 最小二乘法概述2 最小二乘法求解多项式曲线系数向量的数学推导2.1 代数法2.2 矩阵法 3 代码实现4 总结参考 0 前言 自动驾驶开发中经常涉及到多项式曲线拟合&#xff0c;本文详细描述了使用最小二乘法进行多项式曲线拟合的数学原理&#xff0c;通过样本集构造范德…

GB和GBDT 算法流程及分析

1、优化模型的两种策略&#xff1a; 1&#xff09;基于残差的方法 残差其实就是真实值和预测值之间的差值&#xff0c;在学习的过程中&#xff0c;首先学习一颗回归树&#xff0c;然后将“真实值-预测值”得到残差&#xff0c;再把残差作为一个学习目标&#xff0c;学习下一棵回…

机器学习和深度学习性能指标

这里写目录标题 1、声明2、机器学习评估性能指标2.1、回归&#xff08;Regression&#xff09;算法指标2.1.1、平均绝对误差 MAE2.1.2、均方误差 MSE2.1.3、均方根误差 RMSE2.1.4、决定系数R^22.1.5、解决评估指标鲁棒性问题 2.2、分类&#xff08;Classification&#xff09;算…