R语言深度学习-3-过拟合问题(无监督正则化/Lasso回归/岭回归/集成和平均算法)

本教程参考《RDeepLearningEssential》

我们从上一个教程看到,我们看到在我们训练迭代或者训练更大神经网络的时候,往往会产生过拟合,而且越来越严重,它可能会把训练它的数据拟合的很好,但是未必能把新数据做的很好。

因此本次介绍一下提升模型泛化能力而防止模型过拟合的方法,称为无监督正则化,通常训练是减少训练误差来优化模型,但是正则化是关注减少测试或训练误差,使得模型在新数据上的效果和训练数据上一样好。


3.1 L1罚函数

3.1.1 Lasso概念

L1罚函数,又称最小绝对值收缩和选择算子(Least Absolute Shrinkage and Selection Operator)是我们熟知的Lasso算法,基本思想是把权重向0收缩,最好淘汰一些不重要的系数,比如一个八元一次方程,描述多种生活习惯对寿命的影响,其中有一个每天刷牙应该属于被去掉的项。

除了防止过拟合之外,它还可以作为一种 变量选择的方法。惩罚的力度是由一个超参数λ所控制的,它乘以权重绝对值的和, 可以被预先设定,或者就像其他超参数那样,使用交叉验证或者一些类似的方法来优化。

首先,很明显惩罚的影响依赖于权重的大小,而权重的大小依赖于数据的规模。因此,我们通常先把数据标准化为带有单位方差(或者起码是每个变量的方差相等)的形式。

我们用 X 表示输入,Y 表示输出或者因变量,B 是参数,F 是为了求出 B 而要优化的目标函数。特别地有:F(B;X,Y)。在 神经网络中,参数可以是偏差或者偏移(本质上是来自回归的截距)以及权重。L1 罚函数把目标函数修正为其中 w 仅代表权重(就是说,偏移通常是被忽略的)。考 虑梯度,我们可以将这个增加的惩罚项表示为

F(B;X,Y)+\lambda ||\omega ||1

3.1.2 Lasso代码示例

我们通过一个模拟线性回归问题来看一下L1罚函数的工作原理:

我们创建一个具有特定均值和相关性的多元正态分布数据集X,然后根据这些数据和给定的线性模型参数生成了一个响应变量y。

library("glmnet")
library("MASS")
set.seed(1234)
X <- mvrnorm(n = 200, mu = c(0, 0, 0, 0, 0),Sigma = matrix(c(1, .9999, .99, .99, .10,.9999, 1, .99, .99, .10,.99, .99, 1, .99, .10,.99, .99, .99, 1, .10,.10, .10, .10, .10, 1), ncol = 5))
y <- rnorm(200, 3 + X %*% matrix(c(1, 1, 1, 1, 0)), .5)

我们通过glmnet包来拟合L1罚函数,其中是L1还是L2由alpha决定,当alpha取1,是Lasso(L1),当alpha取2,则是岭回归(L2)。而且,当我们并不知道应该选取的 lambda 的值,我们能评价一系列的选择并且使用交叉验证自动调出这个超参数,这可以用 cv.glmnet() 函数来实现。

m.ols <- lm(y[1:100] ~ X[1:100, ])
m.lasso.cv <- cv.glmnet(X[1:100, ], y[1:100], alpha = 1)
plot(m.lasso.cv)

我们发现lasso在比较小的λ值情况下,有比较好的效果,但是随着λ增大,交叉验证模型的误差增大,所以lasso究竟是不是一个很好的算法呢,有待讨论。

cbind(OLS = coef(m.ols),Lasso = coef(m.lasso.cv)[,1])

 通过比较拉索得到的系数和线性回归得到的系数,我们发现最后一个系数收缩为0了。

3.2 L2罚函数

3.2.1岭回归概念

 L2罚函数,又称岭回归(ridge regression),许多方面和L1罚函数相似,不过他是基于权重平方和而不是基于权重绝对值的和,因此更大的(正或负)权重导致了更大的惩罚。在神经网络背景下,也称作权重衰减,他的公式是

F(B;X,Y)+\lambda ||\omega ||2

L1和L2两者之间的主要区别在于:
(1)稀疏性:L1正则化倾向于产生稀疏解,即许多参数最终变为零,而L2正则化不会产生这样的效果。
(2)连续性和平滑性:L2正则化保持了权重的连续性,使得学习到的权重更容易解释;而L1正则化可能导致不连续的权重,使得模型的解释性变差。
(3)抗噪声能力:L2正则化对于噪声更鲁棒,因为它对每个参数施加了相同的惩罚,而L1正则化可能对一些异常值敏感。
(4)计算复杂性:L1正则化通常比L2正则化计算起来更复杂,因为L1正则化涉及到绝对值的计算,这在数值优化中可能导致一些问题。
在实际应用中,选择哪种正则化方法取决于具体问题和数据的特性。例如,当特征数量远大于样本数量时,L1正则化可以帮助进行特征选择;而在特征数量与样本数量相近的情况下,L2正则化可能更适合。

3.2.2岭回归代码示例

m.ridge.cv <- cv.glmnet(X[1:100, ], y[1:100], alpha = 0)
plot(m.ridge.cv)
cbind(OLS = coef(m.ols),Lasso = coef(m.lasso.cv)[,1],Ridge = coef(m.ridge.cv)[,1])

 尽管Ridge并没有把系数收缩到0,但是比起单纯的线性回归,也降低了重要的参数

 3.3权重衰减-神经网络使用L2罚函数

我们在上一篇中已经小试牛刀,使用caret包和nnet包训练的神经网络使用了0.01的权重衰减,我们现在通过交叉验证的方式来进一步探究权重衰减对神经网络的影响。数据请看上一篇:

R语言深度学习-2-训练预测模型-CSDN博客

dig_train <- read.csv("C:\\Users\\Huzhuocheng\\Desktop\\digit-recognizer\\train.csv")
dim(dig_train) #数据维度查看
dig_train$label <- factor(dig_train$label, levels = 0:9)
i <- 1:6000
dig_X <- dig_train[i, -1]
dig_Y <- dig_train[i, 1]
#比较不同的权重衰减
set.seed(1234)
dig_m1 <- lapply(c(100,150), function(its) {train(dig_X, dig_Y,method = 'nnet',tuneGrid = expand.grid(.size = c(10),.decay = c(0, .1)),trControl = trainControl(method = 'cv', number = 5,repeats = 1),MaxNWts = 10000,maxit = its)
})

我们发现正则化的准确度并没有非正则化的表现好,这是在100次迭代的情况下,那我们再看一下更多次的迭代后的情况:

这时我们发现,在比较高的迭代次数下,我们正则化的表现比非正则化的要好很多,所以正则化在相对更复杂,更大的拟合模型中有较好的表现。

3.4集成和模型平均 

 这个的想法是我们实现一次拟合会采用不同的算法,那么有的算法可能会过高,有的算法可能会过低,那我们将个别算法的结果组合起来,可以相互抵消。我们举个例子:

set.seed(1234)
d <- data.frame(x = rnorm(400))
d$y <- with(d, rnorm(400, 2 + ifelse(x < 0, x + x^2, x + x^2.5),1))
d.train <- d[1:200, ]
d.test <- d[201:400, ]
## three different models
m1 <- lm(y ~ x, data = d.train)
m2 <- lm(y ~ I(x^2), data = d.train)
m3 <- lm(y ~ pmax(x, 0) + pmin(x, 0), data = d.train)
cbind(M1 = summary(m1)$r.squared,M2 = summary(m2)$r.squared,M3 = summary(m3)$r.squared)

我们构建一个满足正态分布的分段函数,然后分别用简单线性回归(m1),非线性回归(m2),分段函数回归(m3)进行拟合,然后我们看三种建模的拟合效果:是相差很大的

我们再看一下每种模型的拟合相关性,可以得到模型预测间有多大重叠。

cor(cbind(M1 = fitted(m1),M2 = fitted(m2),M3 = fitted(m3)
))

我们进行我们的思路,集成和模型平均:

d.test$yhat1 <- predict(m1, newdata = d.test)
d.test$yhat2 <- predict(m2, newdata = d.test)
d.test$yhat3 <- predict(m3, newdata = d.test)
d.test$yhatavg <- rowMeans(d.test[, paste0("yhat", 1:3)])cor(d.test)

我们发现得到的y预测中,模型平均得到的预测优于三种中任何一种:

3.5使用丢弃提升样本外模型性能

我们通过随机丢弃神经元的数量来实现模型的稳定,这在几年前是比较新的正则化方法,如图所示

3.6小结 

 随着科学家们的努力,正则化及处理过拟合的方法层出不穷,在我们使用模型的时候,要结合不同的情况选择不同的方法,这就是训练模型的乐趣吧。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/276084.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HSE化工应急安全生产管理平台:衢州某巨大型化工企业的成功应用

在化工行业中&#xff0c;安全生产一直是至关重要的议题。为了提高生产安全性、降低成本并提升企业形象&#xff0c;衢州某巨大型化工企业引入了HSE化工应急安全生产管理平台&#xff0c;取得了显著的改善和获益。 该平台的核心功能包括风险管理和应急预案制定。通过对化工生产…

KubeSphere 社区双周报|2024.02.29-03.14

KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书、新增的讲师证书以及两周内提交过 commit 的贡献者&#xff0c;并对近期重要的 PR 进行解析&#xff0c;同时还包含了线上/线下活动和布道推广等一系列社区动态。 本次双周报涵盖时间为&#xff1a;2024.02.29-03.14…

3D全景:为各行业提供更真实的交互体验

近年来&#xff0c;随着科技的不断发展&#xff0c;3D全景技术逐渐融入到了我们的日常生活中来。3D全景技术的应用落地&#xff0c;为广大用户提供了全新的视觉体验&#xff0c;让人们能够更加真实、直观地感受各行业的场景。 3D全景的优势就在于真实感和互动性&#xff0c;可以…

<JavaEE> 了解网络层协议 -- IP协议

目录 初识IP协议 什么是IP协议&#xff1f; IP协议中的基础概念 IP协议格式 图示 4bit版本号&#xff08;version&#xff09; 4bit头部长度&#xff08;headerlength&#xff09; 8bit服务类型&#xff08;TypeOfService&#xff09; 16bit总长度&#xff08;total l…

jenkins+maven+gitlab自动化构建打包、部署

Jenkins自动化部署实现原理 环境准备 1、jenkins已经安装好 docker安装jenkins 2、gitlab已经安装好 docker安装gitlab 一、Jenkins系统配置 1.Global Tool Configuration 任务构建所用到的编译环境等配置&#xff0c;配置参考&#xff1a; jdk配置&#xff08;jenkins自带…

多维时序 | MATLAB实现BiTCN-selfAttention自注意力机制结合双向时间卷积神经网络多变量时间序列预测

多维时序 | MATLAB实现BiTCN-selfAttention自注意力机制结合双向时间卷积神经网络多变量时间序列预测 目录 多维时序 | MATLAB实现BiTCN-selfAttention自注意力机制结合双向时间卷积神经网络多变量时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.M…

SpringCloud(22)之Sentinel实战应用

一、Sentinel核心库 sentinel主页&#xff1a;主页 alibaba/Sentinel Wiki GitHub 1.1 Sentinel介绍 随着微服务的流行&#xff0c;服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件&#xff0c;主要以流量为切入点&…

C# wpf 使用GDI实现截屏

wpf截屏系列 第一章 使用GDI实现截屏&#xff08;本章&#xff09; 第二章 使用GDI实现截屏 第三章 使用DockPanel制作截屏框 第四章 实现截屏框热键截屏 第五章 实现截屏框实时截屏 第六章 使用ffmpeg命令行实现录屏 文章目录 wpf截屏系列前言一、导入gdi32方法一、NuGet获取…

88. 合并两个有序数组 (Swift版本)

题目 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2&#xff0c;另有两个整数 m 和 n &#xff0c;分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中&#xff0c;使合并后的数组同样按 非递减顺序 排列。 注意&#xff1a;最终&#xff0c;合并…

Python数据分析-5

1.时间序列 2.pandas重采样 重采样&#xff1a;指的是将时间序列从一个频率转化为另一个频率进行处理的过程&#xff0c;将高频率数据转化为低频率数据为降采样&#xff0c;低频率转 化为高频率为升采样。 统计出911数据中不同月份电话次数的变化情况&#xff1a…

PlantUML Integration 编写短信服务类图

PlantUML Integration 写一个类图&#xff0c;主要功能为 1、编写一个serviceSms短信服务类&#xff1b; 2、需要用到短信的地方统一调用基建层的服务即可&#xff1b; 3、可以随意切换、增加短信厂商&#xff0c;不需要更改场景代码&#xff0c;只需要更改application.yml 里面…

边缘计算与物联网的核心 —— 低功耗芯片

一、低功耗芯片 在边缘计算与物联网&#xff08;IoT&#xff09;中&#xff0c;低功耗芯片扮演了至关重要的角色&#xff0c;主要体现在以下几个方面&#xff1a; 延长设备寿命&#xff1a;物联网设备通常需要部署在难以更换电池或不方便进行频繁维护的环境中&#xff0c;比如…

学习使用postman软件上传文件发起api接口请求

学习使用postman软件上传文件发起api接口请求 设置headers头信息设置body 设置headers头信息 如图设置&#xff1a; KEY&#xff1a;Content-Type VALUE&#xff1a;multipart/form-data 设置body 设置需要上传的key对应的类型为File&#xff0c;上传类型 设置需要上传的文件…

物联网技术助力智慧城市转型升级:智能、高效、可持续

目录 一、物联网技术概述及其在智慧城市中的应用 二、物联网技术助力智慧城市转型升级的路径 1、提升城市基础设施智能化水平 2、推动公共服务智能化升级 3、促进城市治理现代化 三、物联网技术助力智慧城市转型升级的成效与展望 1、成效显著 2、展望未来 四、物联网技…

import gdal 报错

1.下载gdal https://www.lfd.uci.edu/~gohlke/pythonlibs/#gdal 2.安装正确版本 &#xff08;1&#xff09;查看python版本 python -v我的版本Python 3.7.9 建议下载 GDAL-3.4.2-cp37-cp37m-win_amd64.whl &#xff08;2&#xff09;放到Scripts文件夹下 执行 pip install GD…

CVPR2024 | 大核卷积新高度101x101,美团提出PeLK

https://arxiv.org/pdf/2403.07589.pdf 本文概述 最近&#xff0c;一些大核卷积网络以吸引人的性能和效率进行了反击。然而&#xff0c;考虑到卷积的平方复杂度&#xff0c;扩大内核会带来大量的参数&#xff0c;而大量的参数会引发严重的优化问题。由于这些问题&#xff0c;当…

网络编程套接字(4)——Java套接字(TCP协议)

目录 一、Java流套接字通信模型 二、TCP流套接字编程 1、ServerSocket ServerSocket构造方法&#xff1a; ServerSocket方法: 2、Socket Socket构造方法&#xff1a; Socket方法&#xff1a; 三、代码示例&#xff1a;回显服务器 1、服务器代码 代码解析 2、客户端…

机械女生,双非本985硕,目前学了C 基础知识,转嵌入式还是java更好?

作为单片机项目开发的卖课佬&#xff0c;个人建议&#xff0c;先转嵌入式单片机开发方向&#xff0c;哈哈。 java我也学过&#xff0c;还学过oracle、mysql数据库&#xff0c;只是当时没做笔记&#xff0c;找不好充分的装逼证据了。 从实习通过业余时间&#xff0c;学到快正式毕…

AI 大模型赋能手机影像,小米14 Ultra 让真实有层次

2月22日&#xff0c;小米龙年第一场重磅发布会&#xff0c;正式发布专业影像旗舰小米14 Ultra。 此前小米发布的两代 Ultra&#xff0c;在不同维度&#xff0c;引领了移动影像行业的走向。最新的小米14 Ultra 在定义的时候&#xff0c;我们反复在思考&#xff1a;怎么才能把移动…

HBase安装,配置,启动,检查

目录: 一、HBase安装&#xff0c;配置 1、下载HBase安装包 2、解压&#xff0c;配置环境变量并激活 3、hbase 配置 4、将hadoop和zookeeper的配置文件创建软连接放在hbase配置目录 5、配置 regionserver 和 backup-master 二、HBase启动与关闭&#xff0c;安装检验 1、启动关闭…