模型参数优化(四):交叉验证、网格搜索
1.交叉验证
1.1 基本概念
交叉验证的基本思想是将数据集分割成N份,依次使用其中1份作为测试集,其他N1份整合到一起作为训练集,将训练好的模型用于测试集上,以得到模型好坏的判断或估计值,可以得到N个这样的值。交叉验证通常用于估计模型的误差,这里将N个对应的误差求平均作为对模型误差的估计。也可以根据这N个值,选岀拟合效果最好的模型,对应模型的参数也被认为是最优或接近最优的,因此交叉验证可以用来辅助确定参数。
1.2 代码实现
#本函数实现对样本的分割
#df:data.frame对象
#k:分割数量
#return:带有I_kvalue属性的完整数据集
#注意sample函数中的参数默认是“对位”的sample(x=x,size,replace=TRUE,prob=c(0.4,0.6))分别是数据集、尺寸、是否可重复、抽取的概率sampleSplit <- function(df,k)
{df$I_kvalue <- sample(1+((1:dim(df)[1])%%k),dim(df)[1]) # dim(iris):150 5 dim(df)[1]=5return(df)
}
out=sampleSplit(iris,k=10)
table(out$I_kvalue)#table是其中的数出现的次数
##
## 1 2 3 4 5 6 7 8 9 10
## 15 15 15 15 15 15 15 15 15 15# > out
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species I_kvalue
# 1 5.1 3.5 1.4 0.2 setosa 9
# 2 4.9 3.0 1.4 0.2 setosa 1
# 3 4.7 3.2 1.3 0.2 setosa 2
# 4 4.6 3.1 1.5 0.2 setosa 2
# 5 5.0 3.6 1.4 0.2 setosa 8
# 6 5.4 3.9 1.7 0.4 setosa 4
# 7 4.6 3.4 1.4 0.3 setosa 5
# 8 5.0 3.4 1.5 0.2 setosa 3
# 9 4.4 2.9 1.4 0.2 setosa 9# 1、使用交叉验证得到的参数
set.seed(1234)
k=10
out=sampleSplit(iris,k)
#初始化最小均方误差minError
minError=100
#初始化最佳拟合结果finalfit
finalfit=NULL
for(i in 1:k)
{#选择第i个子样本之外的其它所有样本作为训练集trainset=out[out$I_kvalue!=i,1:(dim(out)[2]-2)]#选择第i个子样本作为测试集testset=out[out$I_kvalue==i,1:(dim(out)[2]-2)]#拟合线性回归模型lm.fit=lm(Petal.Width~Sepal.Length+Sepal.Width+Petal.Length,data=trainset)#基于测试集得出预测结果testset$pred=predict(lm.fit,testset)#计算均方误差error=mean((testset$Petal.Width-testset$pred)^2)#判断是否最小均方误差if(error<minError){minError=errorfinalfit=lm.fit}
}
print(minError)
## [1] 0.009822179print(finalfit$coefficients)## (Intercept) Sepal.Length Sepal.Width Petal.Length
## -0.2488242 -0.1977551 0.2176520 0.5157144# 2、使用一般方法得到的参数
lm.fit=lm(Petal.Width~Sepal.Length+Sepal.Width+Petal.Length,data=iris)
print(lm.fit$coefficients)## (Intercept) Sepal.Length Sepal.Width Petal.Length
## -0.2403074 -0.2072661 0.2228285 0.5240831
2. 网格搜索
2.1 基本概念
网格搜索的基本原理是将各参数变量值的区间划分为一系列的小区间,并按顺序计算出对应各参数变量值组合所确定的目标值(通常是误差),并逐一择优,以得到该区间内最小目标值及其对应的最佳参数值。该方法可保证所得的搜索解是全局最优或接近最优的,可避免产生重大的误差。
2.2 代码实现
minMSE=1000
f_a0=NULL
f_b0=NULL
f_c0=NULL
f_d0=NULL
k=55
for(a in 0:k)
{for(b in 0:k){for(c in 0:k){for(d in 0:k){#参数实例化a0<-(-1)+2*a/kb0<-(-1)+2*b/kc0<-(-1)+2*c/kd0<-(-1)+2*d/k#计算均方误差y0<-a0+b0*iris$Sepal.Length+c0*iris$Sepal.Width+d0*iris$Petal.Lengthmse<-mean((iris$Petal.Width-y0)^2)if(mse<minMSE){minMSE<-msef_a0<-a0f_b0<-b0f_c0<-c0f_d0<-d0}}}}
}
print(minMSE)
## [1] 0.03607967print(c(f_a0,f_b0,f_c0,f_d0))
## [1] -0.3454545 -0.2000000 0.2363636 0.5272727
模型参数优化(四):交叉验证、网格搜索相关推荐
- 【大数据专业】机器学习分类模型评估和优化之交叉验证的多种方法
学习目标: 机器学习: 分类评估模型及优化之交叉验证 交叉验证的三种基本方法: 1.将拆分与评价合并执行 sklearn.model_selection.cross_val_score 2.同时使用多 ...
- 机器学习之超参数优化 - 网格优化方法(随机网格搜索)
机器学习之超参数优化 - 网格优化方法(随机网格搜索) 在讲解网格搜索时我们提到,伴随着数据和模型的复杂度提升,网格搜索所需要的时间急剧增加.以随机森林算法为例,如果使用过万的数据,搜索时间则会立刻上 ...
- Python的数据分析中超参数调优方法:网格搜索
[小白从小学Python.C.Java] [Python全国计算机等级考试] [Python数据分析考试必会题] ● 标题与摘要 Python的数据分析中 超参数调优方法:网格搜索 ● 选择题 以下说 ...
- Python为给定模型执行留一法交叉验证实战LOOCV(leave-one-out cross-validation)
Python为给定模型执行留一法交叉验证实战LOOCV(leave-one-out cross-validation) 目录 Python为给定模型执行留一法交叉验证实战LOOCV(leave-one ...
- ML之RF:基于葡萄牙银行机构营销活动数据集(年龄/职业/婚姻/违约等)利用Pipeline框架(两种类型特征并行处理)+RF模型预测(调参+交叉验证评估+模型推理)客户是否购买该银行的产品二分类案例
ML之RF:基于葡萄牙银行机构营销活动数据集(年龄/职业/婚姻/违约等)利用Pipeline框架(两种类型特征并行处理)+RF模型预测(调参+交叉验证评估+模型推理)客户是否购买该银行的产品二分类案例 ...
- python网格搜索优化参数_python - pyspark:在网格搜索为空后获得最佳模型的参数{} - 堆栈内存溢出...
有人可以帮助我从网格搜索中提取性能最佳的模型参数吗? 由于某种原因,它是空白的字典. from pyspark.ml.tuning import ParamGridBuilder, TrainVali ...
- python网格搜索核函数_机器学习笔记——模型调参利器 GridSearchCV(网格搜索)参数的说明...
算法 数据结构 机器学习笔记--模型调参利器 GridSearchCV(网格搜索)参数的说明 GridSearchCV,它存在的意义就是自动调参,只要把参数输进去,就能给出最优化的结果和参数.但是这个 ...
- 新安江遗传算法c语言,基于遗传算法的新安江模型参数优化率定(四)
4.3.1新安江三水源模型 //新安江三水源模型.hios #include 算法 #include 函数 #include 优化 #include spa const intVariableNum ...
- 基于遗传算法的新安江模型参数优化率定(四)
4.3 C++程序代码 4.3.1 新安江三水源模型 //新安江三水源模型.h #include <fstream> #include <iostream> #includ ...
最新文章
- android预置第三方apk,android 内置APK成系统应用
- python跟php如何共用mysql_Python 3 多个函数共用一个mysql连接
- 有关 Form 的一些代码的标准写法
- 表达式求值Spring.Expressions
- java并发编程代码示例_java并发编程之同步器代码示例
- SRA 练习:解释 CRUD 矩阵方法,并从上面 “用于化学品跟踪管理系统的 CRUDL 矩阵示例”图中找出被遗漏的需求,并解释是如何找的?
- 谈一谈,如何在没有实际项目环境下,既能提高科研水平又能锻炼工程能力?...
- 什么是CMPP、SGIP、SMGP三大运营商接口协议
- 在eclipse中安装WindowsBuilder插件
- 关于vc6++编译DDK驱动出现的问题fatal error C1083: Cannot open include file: 'specstrings.h': No such file or dir
- C#多进程文件读写的锁处理
- 现实世界的补丁长什么样? [ICSME 18] A Closer Look at Real-World Patches (结尾附论文阅读反思)
- mc服务器文件夹改皮肤,我的世界皮肤替换教程 老司机教你更换皮肤
- 进程间的相互通讯 C++
- html5画布获取位置,html5画布绘制位置不正确(html5 canvas drawing position not correct)
- 小程序跳到h5页面_小程序如何跳转h5页面
- Android中实现播放背景音乐功能
- 传奇服务器列表文档,MirServer(传奇服务端)
- 顺利通过论文查重检测的小技巧
- java基于微信小程序的停车场自动收费管理系统 uniapp 小程序
热门文章
- Docker网络和服务发现
- 关于springboot-actuator监控的401无权限访问
- SpringBoot:class path resource [xxxx.xml] cannot be opened because it does not exist
- html自动广告业代码,html+javascript实现广告窗自由浮动
- 2021年改造数据中心未来最需要的技能
- 数据中心的未来:一体化无人值守
- 数据中心气流管理的基础:密闭系统的比较
- 大规模数据中心如何重塑整个IT
- 国内的IDC数据中心运营维护前景如何?
- TF之LSTM:利用基于顺序的LSTM回归算法对DIY数据集sin曲线(蓝虚)预测cos(红实)(matplotlib动态演示)—daiding