百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

机器学习模型优化之正则化

toyiye 2024-04-27 03:47 35 浏览 0 评论

在上一篇文章中的岭回归模型,有网友提出说岭回归中模型的权重不会趋于0,在这里首先要感谢一下这位网友的提醒。以后,如果大家有什么建议或者疑问或者文章的描述有什么不对的地方,还望大家提出来,谢谢大家。这里我就详细的介绍一下,为什么岭回归中模型的权重不会趋于0,也是对正则化学习笔记的总结。

一、方差和偏差

在介绍正则化之前,我们先来了解两个在训练模型的时候,经常用到的两个衡量模型好坏的参数方差和偏差。

1、方差

方差(variance)是在概率论和统计方差衡量随机变量或一组数据时离散程度的度量。概率论中方差用来度量随机变量和其数学期望(平均值)之间的偏离程度。统计中的方差(样本方差)是每个样本与全体样本值的平均数之差的平方值的平均数。方差是衡量源数据和期望值相差的度量值。

2、偏差

偏差又被称为表现误差,是指个别测定值与测定的平均值之差,它可以用来衡量测定结果的精密度高低。在统计学中,偏差可以用于两个不同的概念,即有偏采样与有偏估计。一个有偏采样是对总样本集非平等采样,而一个有偏估计则是高估或低估要估计的量。偏差不一定有害,尽管一个有偏采样会难以分析或引起不准确甚至错误的推断,但是有偏估计在某些情况下也有一些好的特性,可能会有较小的方差。

上面介绍了方差和偏差的概念,下面讨论一下偏差和方差在机器学习中的应用。在机器学习中,偏差应用于模型对于训练集数据的评估,而方差这是模型对于验证数据(测试数据)的评估。下面用一个图来说明一下

训练模型常见的三种情况

上面的图是用于可视化,一般实际在训练模型的时候,特征都是非常多的,可能无法将模型进行可视化。我们可以通过模型在训练集和验证集上的表现(错误率)来判断,模型的方差和偏差情况。如果,模型在训练集上的错误率为2%,而在验证集上的错误率为20%的话,很明显我们所训练出来的模型是属于过拟合的也就是高方差。当方差和偏差都比较高的情况下,也许你应该考虑换一种方法来训练模型或者更深的神经网络来训练你的模型。

二、正则化

当我们训练好一个模型,首先应该评估,模型在训练集和验证集上的表现,以便我们对模型做出进一步的调整。如果,偏差比较小而方差比较大的情况下,我们一般有两种解决方式,增加训练的数据可以减少方差而有的时候我们无法获取更多的数据的情况下,我们可以通过使用正则化来减少方差防止模型的过拟合问题。通过使用正则化,我们可以训练更深的神经网络而不用过多的去考虑过拟合的问题。

1、L2正则化

损失函数

不带正则项的损失函数

L2正则化的损失函数

带正则项的损失函数

其中α||w||^2 = α*(ω1^2 + ω2^2....)

下面用一张图片来展示一下,ω的更新过程,第一个是不带正则项的更新过程,第二个是带正则项的更新过程,其中的α准确的说应该是2α,下面简写了。

L2正则化更新过程

通过上面公式的对比可以发现,其实加入正则化的损失函数,相对于没加入正则化的损失函数而言,ω减少为原来的

(1-αβ) > 0因为是小于αβ < 1的。所以,L2正则化也被称为权重衰减。下面通过两个程序来让大家感受一下L2正则化的权重衰减。

import numpy as np
import matplotlib.pyplot as plt
from sklearn import linear_model
if __name__ == "__main__":
 #创建一个10*10的希尔伯特矩阵,其元素A(i,j)=1/(i+j-1),i,j分别为其行标和列标
 #希尔伯特矩阵是一个共线性的矩阵
 x = 1./(np.arange(1,11) + np.arange(0,10)[:,np.newaxis])
 #创建一个全为1的10维的矩阵
 y = np.ones(10)
 #创建模型,没有截距
 ridge = linear_model.RidgeCV(alphas=[0.1,1.0,10],fit_intercept=False)
 #训练模型
 ridge.fit(x,y)
 #获取α
 print(ridge.alpha_) #0.1
 #获取权重
 print(ridge.coef_)
 '''
 [-0.51403981 0.69295249 0.98202683 1.05770151 1.06060295 1.03505966
 0.99826875 0.9576934 0.91676531 0.87708431]
 '''
 #使用最小二乘法
 liner = linear_model.LinearRegression(fit_intercept=False)
 liner.fit(x,y)
 print(liner.coef_)
 '''
 [ -9.99828937e+00 9.89853083e+02 -2.37568861e+04 2.40211807e+05
 -1.26112598e+06 3.78341267e+06 -6.72611884e+06 7.00070032e+06
 -3.93791626e+06 9.23713318e+05]
 '''

2、L1正则化

L1正则化

L1正则化权重更新过程

L1正则化权重更新过程

L1正则化相对于L2来说,不是减少为原来的(1-αβ),而是之间减去了αβ,因为L2正则化w是二次方的,而L1正则化的ω是一次方的。经过L1正则化之后的w可能会变成稀疏矩阵,也就是说可能某一部分的权重会为0。正则化除了L1和L2正则化还有两个结合一起用的,还有dropout正则化。

3、为什么正则化可以防止过拟合

从直观的角度来理解,当我们训练的模型已经是过拟合的,当L2正则化的α参数过大时导致ω为0(实际不会出现这种情况),那么模型就会变成欠拟合状态,我们可以通过调整合适的α参数来使得模型处于合适的状态。在训练模型的时候,我们通常会使用激活函数,假设使用的激活函数是tanh,通过图其实我们可以观察,如果参数是在-1~1之间的话,其实也是可以被看成为线性函数的,也就是说如果ω小到一定程度话,模型就会从过拟合退化成欠拟合的状态,而我们可以通过调整α参数,来寻找合适模型。

tanh激活函数

相关推荐

全网第N篇SIP协议之GB28181注册 JAVA版本

鉴于网上大部分关于SIP注册服务器编写都是C/C++/python,故开此贴,JAVA实现也贴出分享GB28181定义了了基于SIP架构的视频监控互联规范,而对于多数私有协议实现的监控系统...

「linux专栏」top命令用法详解,再也不怕看不懂top了

在linux系统中,我们经常使用到的一个命令就是top,它主要是用来显示系统运行中所有的进程和进程对应资源的使用等信息,所有的用户都可以使用top命令。top命令内容量丰富,可令使用者头疼的是无法全部...

Linux 中借助 perf 对 php 程序模拟CPU高的案例分析

导语本文是一篇Linux借助工具分析CPU高的优化案例,没有任何干货内容,很详细的展示了优化CPU高的具体步骤,非常适合初中级读者阅读!...

centos漏洞处理方法(centos podman)

centos服务器最近有诸多漏洞,修复命令及对应的漏洞整理后,分享给大家RHSA-2020:1176-低危:avahi安全更新yumupdateavahi-libsRHSA-2017:326...

Linux上的free命令详解(Buffer和Cache)

解释一下Linux上free命令的输出。下面是free的运行结果,一共有4行。为了方便说明,我加上了列号。这样可以把free的输出看成一个二维数组FO(FreeOutput)。例如:FO[2][1]...

linux 命令行之你真的会用吗?--free 基本用法篇

free命令行统计内存使用率及swap交换分区的使用率数据。是由sourceforge负责维护的,在ubuntu上其包名为procps,这个源码包中,除了free还有ps,top,vmstat,ki...

kong api gateway 初体验(konga github)

kongapigateway初体验(firstsight?)。Kong是一个可扩展的开源API层(也称为API网关或API中间件)。Kong运行在任何RESTfulAPI的前面,并通过插件...

在Ubuntu下开启IP转发的方法(ubuntu20 ip)

IP地址分为公有ip地址和私有ip地址,PublicAddress是由INIC(internetnetworkinformationcenter)负责的,这些IP地址分配给了注册并向INIC提...

基于 Kubernetes 的 Serverless PaaS 稳定性建设万字总结

作者:许成铭(竞霄)数字经济的今天,云计算俨然已经作为基础设施融入到人们的日常生活中,稳定性作为云产品的基本要求,研发人员的技术底线,其不仅仅是文档里承诺的几个九的SLA数字,更是与客户切身利益乃...

跟老韩学Ubuntu Linux系列-sysctl 帮助文档

sysctl一般用于基于内核级别的系统调优,man帮助手册如下。...

如何在 Linux/Unix/Windows 中发现隐藏的进程和端口

unhide是一个小巧的网络取证工具,能够发现那些借助rootkit、LKM及其它技术隐藏的进程和TCP/UDP端口。这个工具在Linux、UNIX类、MS-Windows等操作系统下都...

跟老韩学Ubuntu Server 2204-Linux性能管理-uptime指令帮助手册

uptime指令是每个从事Linux系统工作的相关同学必知必会的指令之一,如下是uptime指令的帮助手册。UPTIME(1)...

Openwrt+Rclone+emby+KODI搭建完美家庭影音服务器

特别声明:本篇内容参考了波仔分享,在此表示感谢!上一篇《Openwrt+emby+KODI搭建家庭影音服务器》只适用影音下载到本地的情形,不能播放云盘中的影音,内容较少,缺少了趣味性,也不直观。...

Linux Shell脚本经典案例(linux shell脚本例子)

编写Shell过程中注意事项:开头加解释器:#!/bin/bash语法缩进,使用四个空格;多加注释说明。命名建议规则:变量名大写、局部变量小写,函数名小写,名字体现出实际作用。默认变量是全局的,在函数...

解决 Linux 性能瓶颈的黄金 60 秒

如果你的Linux服务器突然负载暴增,告警短信快发爆你的手机,如何在最短时间内找出Linux性能问题所在?来看Netflix性能工程团队的这篇博文,看它们通过十条命令在一分钟内对机器性能问题进行诊断。...

取消回复欢迎 发表评论:

请填写验证码