L0,L1,L2正则化--广义线性模型

特点

正则化项即罚函数,该项对模型向量进行“惩罚”,从而避免单纯最小二乘问题的过拟合问题。训练的目的是最小化目标函数,则C越小,意味着惩罚越小,分类间隔也就越小,分类错误也就越少。

L0范数表示向量中非零元素的个数
L1正则化表示各个参数绝对值之和。
L1正则化使得模型稀疏的权值。

L2正则化标识各个参数的平方的和的开方值。
L2使得模型可以得到平滑的权值,参数更趋近于0,提高泛化能力。

形式与推导

L1 regularization(往0方向靠)

原始的代价函数是:

C0=C0

更新 w
w=wηC0w

而在进行L1正则化处理后,在原始的代价函数后面加上一个L1正则化项,即所有权重w的绝对值的和,乘以λ/n。数学形式:

C=C0+λnw|w|

对上式求导:

Cw=C0w+λnsgn(w)

sgn(w) 是w的符号函数
w 更新 ww :

w=wηC0wηλnsgn(w)

相比没有L1正则化,新的权重比之前的多出 ηλnsgn(w)

当w为正时,更新后的w变小。当w为负时,更新后的w变大。因此它的效果就是让更新后的w不断往0靠,使网络中的权重尽可能为0,也就相当于减小了网络复杂度,防止过拟合。

L2 regularization(权重衰减)
L2正则化就是在代价函数后面再加上一个正则化项( 12 的作用是为了便于求导后不存在2这个数字):

C=C0+λ2nww2

对上式求导:
Cw=C0w+λnw

Cpartialb=C0b

可见,L2的正则化对于 b 的更新无影响,w进行如下更新:

w=wηC0wηλnw

=(1ηλnwηC0w)

在不使用L2正则化时,求导结果中w前系数为1,现在 w 前面系数为 1ηλn ,因为 η λ 、n都是正的, 1ηλn 小于1,它的效果是减小w,即权重衰减(weight decay)。

广义线性模型

线性回归的形式:

ŷ(w,x)=w0+w1x1+...+wpxp

其中,向量 w=(w1,,wp) 作为系数, w0 作为截距。

普通最小二乘法(Ordinary Least Squares)

目标函数:

minw||Xwy||22

scikit-learn 实现此模型的方法:
sklearn.linear_model.LinearRegression(fit_intercept=True,normalize=False,copy_X=True,n_jobs=1)

示例:

from sklearn import linear_model
clf = linear_model.LinearRegression()
clf.fit ([[0,0],[1,1],[2,2]],[0,1,2])
LinearRegression(copy_X=True,fit_intercept=True,n_jobs=1,normalize=False)
clf.coef_
#array([ 0.5,0.5])

但是,普通最小二乘法的系数估计依赖模型terms之间的独立性, 当terms是相关的,并且设计的X矩阵的列有近似线性相关,设计的矩阵变得更接近奇异 ,结果是,最小平方估计在观察到的反应对随机误差变得非常敏感,产生较大的反差. 多重共线性的这种情况更加,例如,数据在没有实验性的设计下收集。

岭回归 (Ridge Regression)

岭回归通过使用同系数大小的惩罚函数,解决了部分普通最小二乘法中的问题。岭系数最小化惩罚残差和。

minw||Xwy||22+α||w||22

α0 是一个控制收缩总量的复杂参数: α 越大,收缩总量越大,因此系数对于共线性变得更加稳健 。

原理同上面推到的 L2 正则化。

sklearn.linear_model.Ridge(alpha=1.0,fit_intercept=True,max_iter=None,tol=0.001,solver='auto',random_state=None)
from sklearn import linear_model
clf = linear_model.Ridge (alpha = .5)
clf.fit ([[0,[0,1]],.1,1]) 
Ridge(alpha=0.5,copy_X=True,max_iter=None,normalize=False,random_state=None,tol=0.001)
clf.coef_
#array([ 0.34545455,0.34545455])
clf.intercept_ 
#0.13636...

Lasso

套索算法是一个估计稀疏系数的线性模型。由于它倾向于解决较少的参数值,它在某些情况下时有效的,有效地较少解决方法说依赖的变量数 。正是由于这个原因,Lasso以及它的变体是压缩感知领域的基础. 在特定的情况下,它能复原确定的非0权值数集(查看压缩感知: tomography reconstruction with L1 prior (Lasso)).
在数学上,它包含了一个线性模型,训练 1 (L1)优先值作为正则化. 目标函数是最小化:

minw12nsamples||Xwy||22+α||w||1
sklearn.linear_model.Lasso(alpha=1.0,precompute=False,max_iter=1000,tol=0.0001,warm_start=False,positive=False,random_state=None,selection='cyclic')
from sklearn import linear_model
clf = linear_model.Lasso(alpha = 0.1)
clf.fit([[0,1])
Lasso(alpha=0.1,positive=False,precompute=False,selection='cyclic',warm_start=False)
clf.predict([[1,1]])
#array([ 0.8])

Elastic Net

ElasticNet 是一个线性回归模型,训练以 L1,L2正则化作为正则项。 这种组合使得学习一个较少
权值像Lasso是非0稀疏模型,同时保持着Ridge的正则化属性。通过使用l1_ratio参数来控制L1和L2的凸组合.
Elastic-net 在多重与另外一个特征相关联的特征时是很有效果的。 Lasso只能实现其中一种特点,但elastic-net更容易拥有以上两个特点。
一个实际关于 Lass和Ridge取舍的优点是,它能让Elastic-Net 继承某些 Ridge在循环下的稳定性。
在这种情况下,目标函数是最小化:

minw12nsamples||Xwy||22+αρ||w||1+α(1ρ)2||w||22
sklearn.linear_model.ElasticNet(alpha=1.0,l1_ratio=0.5,selection='cyclic')[source]

参考文章:
L0,L1,L2正则化浅析
http://www.jb51.cc/article/p-ghjzqxtq-ban.html

怎么理解在模型中使用L1+L2正则化
https://www.zhihu.com/question/38081976

正则化方法:L1和L2 regularization、数据集扩增、dropout
http://www.jb51.cc/article/p-wuohknap-bq.html

机器学习:L1与L2正则化项
http://www.jb51.cc/article/p-zuvvujdp-bcg.html

Generalized Linear Models
http://scikit-learn.org/stable/modules/linear_model.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


jquery.validate使用攻略(表单校验) 目录 jquery.validate使用攻略1 第一章 jquery.validate使用攻略1 第二章 jQuery.validate.js API7 Custom selectors7 Utilities8 Validato
/\s+/g和/\s/g的区别 正则表达式/\s+/g和/\s/g,目的均是找出目标字符串中的所有空白字符,但两者到底有什么区别呢? 我们先来看下面一个例子: let name = 'ye wen jun';let ans = name.replace(/\s/g, '&#3
自整理几个jquery.Validate验证正则: 1. 只能输入数字和字母 /^[0-9a-zA-Z]*$/g jQuery.validator.addMethod("letters", function (value, element) { return this.optio
this.optional(element)的用法 this.optional(element)是jquery.validator.js表单验证框架中的一个函数,用于表单控件的值不为空时才触发验证。 简单来说,就是当表单控件值为空的时候不会进行表单校验,此函数会返回true,表示校验通过,当表单控件
jQuery.validate 表单动态验证 实际上jQuery.validate提供了动态校验的方法。而动态拼JSON串的方式是不支持动态校验的。牺牲jQuery.validate的性能优化可以实现(jQuery.validate的性能优化见图1.2 jQuery.validate源码 )。 也可
自定义验证之这能输入数字(包括小数 负数 ) <script type="text/javascript"> function onlyNumber(obj){ //得到第一个字符是否为负号 var t = obj.value.charAt(0); //先把非数字的都
// 引入了外部的验证规则 import { validateAccountNumber } from "@/utils/validate"; validator.js /*是否合法IP地址*/ export function validateIP(rule, value,cal
VUE开发--表单验证(六十三) 一、常用验证方式 vue 中表单字段验证的写法和方式有多种,常用的验证方式有3种: data 中验证 表单内容: <!-- 表单 --> <el-form ref="rulesForm" :rules="formRul
正则表达式 座机的: 例子: 座机有效写法: 0316-8418331 (010)-67433539 (010)67433539 010-67433539 (0316)-8418331 (0316)8418331 正则表达式写法 0\d{2,3}-\d{7,8}|\(?0\d{2,3}[)-]?\d
var reg = /^0\.[1-9]{0,2}$/;var linka = 0.1;console.log (reg.test (linka)); 0到1两位小数正则 ^(0\.(0[1-9]|[1-9]{1,2}|[1-9]0)$)|^1$ 不含0、0.0、0.00 // 验证是否是[1-10
input最大长度限制问题 <input type="text" maxlength="5" /> //可以 <input type="number" maxlength="5" /> //没有效
js输入验证是否为空、是否为null、是否都是空格 目录 1.截头去尾 trim 2.截头去尾 会去掉开始和结束的空格,类似于trim 3.会去掉所有的空格,包括开始,结束,中间 1.截头去尾 trim str=str.trim(); // 强烈推荐 最常用、最实用 or $.trim(str);
正则表达式语法大全 字符串.match(正则):返回符合的字符串,若不满足返回null 字符串.search(正则):返回搜索到的位置,若非一个字符,则返回第一个字母的下标,若不匹配则返回-1 字符串.replace(正则,新的字符串):找到符合正则的内容并替换 正则.test(字符串):在字符串中
正整数正则表达式正数的正则表达式(包括0,小数保留两位): ^((0{1}.\d{1,2})|([1-9]\d.{1}\d{1,2})|([1-9]+\d)|0)$正数的正则表达式(不包括0,小数保留两位): ^((0{1}.\d{1,2})|([1-9]\d.{1}\d{1,2})|([1-9]+
JS 正则验证 test() /*用途:检查输入手机号码是否正确输入:s:字符串返回:如果通过验证返回true,否则返回false /function checkMobile(s){var regu =/[1][3][0-9]{9}$/;var re = new RegExp(regu);if (r
请输入保留两位小数的销售价的正则: /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/ 1.只能输入英文 <input type="text" onkeyup="value
判断价格的正则表达式 价格的正则表达式 /(^[1-9]\d*(\.\d{1,2})?$)|(^0(\.\d{1,2})?$)/; 1 解析:价格符合两种格式 ^ [1-9]\d*(.\d{1,2})?$ : 1-9 开头,后跟是 0-9,可以跟小数点,但小数点后要带上 1-2 位小数,类似 2,2
文章浏览阅读106次。这篇文章主要介绍了最实用的正则表达式整理,比如校验邮箱的正则,号码相关,数字相关等等,本文给大家列举的比较多,需要的朋友可以参考下。_/^(?:[1-9]d*)$/ 手机号
文章浏览阅读1.2k次。4、匹配中的==、an==、== an9、i9 == "9i"和99p==请注意下面这部分的作用,它在匹配中间内容的时候排除了说明:当html字符串如下时,可以匹配到两处,表示匹配的字符串不包含and且不包含空白字符。说明:在上面的正则表达式中,_gvim正则表达式匹配不包含某个字符串
文章浏览阅读897次。【代码】正则表达式匹配a标签的href。_auto.js 正则匹配herf