CV岭参数的选择

  • 0引言
  • 1、代码
    • 1.1 获取数据函数
    • 1.2 岭估计函数
    • 1.3 岭估计CV预测精度
    • 1.4 优化调用
  • 2、总结

0引言

《R语言入门——多元回归交叉验证的实现》中介绍了使用交叉验证的思想使用RMSE衡量一个模型的预测精度,本文使用同样的思想确定岭回归的岭参数。具体的估计如下:
β^=(XTX+λE)−1XTY.\hat{\beta} = (X^TX + \lambda E)^{-1}X^TY.β^​=(XTX+λE)−1XTY.
本文就在于选择一个合适λ\lambdaλ是的交叉验证后的RMSE最小,具体代码如下。

1、代码

1.1 获取数据函数

输入参数:
– p:变量的维数,一般取正整数,默认3维.(数值)
– n: 大于p的一个整数,默认值为200.(数值)
– Beta: 回归数据的真实参数,每个分量默认为1.(长度为p的向量)
输出参数:
– Data: n∗(p+1)n*(p+1)n∗(p+1)的数据框,第一列为yyy值,第二到p+1p+1p+1列为p为自变量.

getData <- function(n = 200, p = 3, Beta = rep(1, p)){library(MASS)x <- mvrnorm(n, rep(0, p), diag(rep(1, p)))names(x) <- paste0('x', 1:p)y <- x %*% Beta + rnorm(n, 0, 0.5)Data <- data.frame(y = y, x)Data
}

1.2 岭估计函数

输入参数:
– data: n∗(p+1)n*(p+1)n∗(p+1)的数据框,第一列为yyy值,第二到p+1p+1p+1列为p为自变量.
– lambda: 岭回归的惩罚参数,默认值为0.1.(数值)
输出参数:
– beta:输出岭回归的参数估计.(p∗1p*1p∗1的矩阵)

rlm <- function(data = getData(20,3), lambda = 0.1){library(MASS)x <- as.matrix(cbind(1, data[,-1]))y <- data[,1]n <- nrow(x); p = ncol(x)beta <- ginv(t(x) %*% x + lambda*diag(p)) %*% t(x) %*% yreturn(beta)
}

1.3 岭估计CV预测精度

输入参数:
– data: n∗(p+1)n*(p+1)n∗(p+1)的数据框,第一列为yyy值,第二到p+1p+1p+1列为p为自变量.(数据框)
– lambda: 岭回归的惩罚参数,默认值为0.1.(数值)
– k: 交叉验证的折数,默认值为5.(数值)
输出参数:(列表)
– yhat:输出岭回归的预测值.(列表中的第一个元素,为一个长度为n的向量)
– RMSE:输出岭回归的RMSE值.(列表中的第二个元素,为一个长度为1的向量)

CV.rlm <- function(data = getData(20,3), lambda = 0.1, k = 5, p = rep(1, k)/k){n <- nrow(data)e <- n - sum(round(n*p))ngroup <- round(n*p)if(e != 0){for(i in 1:e){ngroup[i] <- ngroup[i] + 1}} start <- c(1, cumsum(ngroup)[1:(k-1)]+1)end <- cumsum(ngroup)ind <- sample(1:n)yhats <- c()for(i in 1:k){testdata <- data[ind[start[i]:end[i]],]traindata <- data[-ind[start[i]:end[i]],]testx <- as.matrix(cbind(1, testdata[, -1]))beta <- rlm(data = traindata, lambda = lambda)yhat <- testx %*% betayhats <- c(yhats, yhat)}erro <- yhats - data$y[ind]RMSE <- sqrt((t(erro) %*% erro)/nrow(data))out <- list(yhat = yhats, RMSE = RMSE)return(out)
}

1.4 优化调用

> nlminb
function (start, objective, gradient = NULL, hessian = NULL, ..., scale = 1, control = list(), lower = -Inf, upper = Inf)
> CV.rlm(data = getData(20,3), lambda = 0.1)
$yhat[1]  2.5900983  2.7405474 -1.1402619 -0.5300552 -0.1751282  1.6769301[7]  0.3326216 -2.2282021  0.4628716  0.1187324  0.8532815 -0.5505310
[13]  1.1872715 -0.2164008 -0.2094051 -1.4429908  0.4309090  0.8978614
[19] -0.1471460  1.7677643$RMSE[,1]
[1,] 0.6613792> nlminb(1, function(x) CV.rlm(data = getData(20,3), lambda = x)$RMSE)
$par  # 结果
[1] 1.015625$objective
[1] 0.4249641$convergence
[1] 1$iterations
[1] 2$evaluations
function gradient 21        2 $message
[1] "false convergence (8)"

2、总结

最后希望可以帮助大家提高R水平。水平有限发现错误还望及时评论区指正,您的意见和批评是我不断前进的动力。

R语言入门——CV岭参数的选择相关推荐

  1. R语言入门——常用函数50个

    R语言函数入门50个基本函数 0引言 1.入门准备操作及函数 1.1R版本介绍以及IDE的选择 1.2IDE及其常用的快捷键 2.空间操作以及纠错函数 2.1 ? .??.help.demo.exam ...

  2. r语言x c(-1 -2),【软件】R语言入门之向量

    "R语言入门开篇,向量(vector)相关知识的介绍" R语言是一款优秀统计学编程语言,本文介绍R语言的几个重要命令,以及R语言中非常重要的一种数据结构-向量(Vector)的相关 ...

  3. R语言入门4---R语言流程控制

    ​ 流程控制语句在任何语言中都是非常重要的,通过流程控制语句编程者能够根据业务逻辑在程序中设计合理的循环.分支,实现程序各种各样强大的功能.一般实现任一算法的控制结构都可以分为顺序结构.分支结构.循环 ...

  4. Mac版R语言入门(一)R语言入门操作

    文章更新于2023年1月29日: 视频教程--微信公众号:R语言数据分析与实践                      bilibili: R语言数据分析与实践 CSDN:ZhenniLi 第一集: ...

  5. (一)R语言入门指南——数据分析的第一步

    注:本博客旨在分享个人学习心得,有不规范之处请多多包涵! 目录 R语言 数值与逻辑运算符 变量类型与赋值 逻辑判定与循环 结束语 R语言 简单来说,R语言是一个免费开源.数据分析和可视化功能强大的编程 ...

  6. 【万字长文】R语言入门学习路线与资源汇总

    本篇推文就不介绍为什么需要学R了,你能打开这篇文章,说明你有学习R的想法或者正在学习R的路上. 今天简单介绍下R语言的学习路线以及R学习资源汇总. 下面涉及到的R语言书籍我打包了PDF文件,有需要的在 ...

  7. R语言入门之Hello world

    R语言入门之Hello world 作者:雨水/家辉,日期:2016-12-20,CSDN博客:http://blog.csdn.net/gobitan 摘要:R语言被称为统计语言.在数据分析上用得很 ...

  8. 01 R语言入门——一些介绍

    01 R语言入门--简介 1.1 学习目标 安装R语言平台 www.r-project.org 熟悉R界面 掌握Help帮助功能 1.2 简介 R语言是从S统计绘图语言演变而来,可看作S的" ...

  9. R语言入门学习——Rstudio的安装与学习

    R语言入门学习--Rstudio的安装与学习 1.Rstudio下载 2.Rstudio安装 3.Rstudio功能和简单程序 1.Rstudio下载 下载地址:https://rstudio.com ...

最新文章

  1. 越南一难倒博士的趣味数学题
  2. spring_在Spring MVC中使用多个属性文件
  3. ASP.NET 数据绑定控件(转)
  4. C++指针地址内存,数据结构,文件操控
  5. 也分享自己做的JS扫雷小游戏
  6. 做移动互联网App,你的测试用例足够吗?
  7. Python __call__()方法
  8. 华为交换机默认vlan都是通的吗_【思唯网络学院】华为交换机常用的三种vlan划分方法...
  9. 美次债危机负面效应正扩大到消费市场
  10. ML、DL、CNN学习记录6
  11. win7连接linux系统怎么样,win7系统连接linux的操作方法
  12. 使用 Keras搭建一个深度卷积神经网络来识别 c验证码
  13. Codeforces 600E. Lomsat gelral(Dsu on tree学习)
  14. 高光谱图像分析:分类 I
  15. Redis-事务(集成SpringBoot工程)
  16. C# Winform鼠标样式设置方法
  17. F1DC2706双模数据透传蓝牙模块AT指令使用介绍
  18. 检测报告上CNAS、CMA资质含义及联系
  19. 惠头条全行业开户竞价推广投放怎么避免无效点击
  20. 爬虫-大众点评评论信息(思路)

热门文章

  1. 那些高级技术岗位,需要哪些具备能力?
  2. Linux提权枚举工具包0xsp-Mongoose
  3. 一个三本软件工程毕业生4年来的路程
  4. 程序员会不会成为一个高危行业?
  5. Android实战——保存账号与密码
  6. 牛客网华为云服务器,【华为云】-搭建私有云盘心得体会
  7. 京东e卡回收源码分享
  8. PTA---高速公路超速处罚 (15 分)
  9. 正式上任!特斯拉中国区总裁朱晓彤接管欧美业务,跻身全球管理层
  10. vulnhub View2akill