统计学习:正则化与交叉验证

1. 正则化

模型选择的经典方法是正则化(regularization)正规化是结构风险最小化策略的实现,是在经验风险上加一个正则化项(regularizer)或罚项(penalty term)正则化一般是模型复杂度的单调递增函数,模型越复杂,正则化值就越大。比如,正则化项可以是模型参数向量的范数。正则化一般具有如下形式

minfϵΓ1Ni=1NL(yi,f(xi))+ΛJ(f)

其中,第一项是经验风险,第二项是正则化项 Λ0 为调整两者之间关系的系数。正则化项可以取不同的形式。例如。回归问题中,损失函数是平方损失,正则化项可以是参数向量的 L2 范数:

L(w)=1Ni=1N(f(xi,w)y)2+Λ2w2


这里, w 表示参数向量w的 L2 范数。
正则化项也可以是参数向量的
L1 范数:
L(w)=1Ni=1N(f(xi,w)y)2+Λ2w1

w1 表示参数向量 w L1 第一项的经验风险较小的模型可能较复杂(有多个非零参数),这时第二项的模型复杂度会较大。正则化的作用是选择经验风险与模型复杂度同时较小的模型。

在所有可能选择的模型中,能够很好地解释已知数据并且十分简单才是最好的模型,也就是应该选择的模型。从贝叶斯估计的角度来看,正则化项对应于模型的先验概率。可以假设复杂的模型有较小的先验概率,简单的模型有较大的先验概率。

 正则化项符合奥卡姆剃刀原理。奥卡姆剃刀原理应用于模型选择时变为一下想法:在所有可能选择的模型中,能够很好地解释已知数据并且十分简单才是好模型。从贝叶斯估计的角度来看,正则化项对应于模型的先验概率,可以假设复杂的模型有较小的先验概率,简单的模型有较大的先验概率。正则化的本质就是,给优化参数一定约束。

 可能还是对为什么正则化搞不清楚?举个不是很恰当的例子:商家制作雨伞,我喜欢的是雨伞上有斑点狗团,材料要丝绸的,带蕾丝边的,还希望雨伞上能播放点小电影。。。。但是!!!我这个需求太特殊化了,除非我有钱请一个私人厂家为我量身定制。因为如果厂家把这样的雨伞制作出来,别人估计不会买(对测试集未知数据没有很好地误差),这就叫过拟合。并且我的这些个性需求越多,那么雨伞造价就越高。厂家要制作的是满足大众需求的,具有普遍共性的雨伞。这就是姆剃刀原理,保证了大众需求的同时他又很简单。正则化就是就好比加入了成本控制项目,它是个性需求复杂度的函数。


L0,L1,L2正则化(重点)

  L0范数:向量中非0元素的个数。如果用L0范数来规则化一个参数矩阵W的话,那么我们希望W的元素大部分都是0。让参数是稀疏的。L0范数的最小化问题在实际应用中是NP问题,所以在实际中不会应用。


  L1范数是向量中各个元素绝对值之和,有个美称“稀疏规则算子”,为什么L1会使权值稀疏?L1范数是L0范数的最优凸近似。既然L0可以实现稀疏,为什么不用L0,而要用L1呢?个人理解一是因为L0范数很难优化求解(NP难问题),二是L1范数是L0范数的最优凸近似,而且它比L0范数要容易优化求解。所以大家才把目光和万千宠爱转于L1范数。L1范数和L0范数可以实现稀疏,L1因具有比L0更好的优化求解特性而被广泛应用。


  参数稀疏的好处是什么?

  (1)对稀疏趋之若鹜的一个关键原因就是它能实现特征的自动选择。一般来说,样本X的大部分内容(大部分特征)都是和最终的输出y无关的或者不提供任何信息。在经验风险最小化的时候,考虑这些特征,虽然可以提高训练误差,但是在预测新的样本时,这些没用的信息反而会被考虑,从而干扰了正确的预测。稀疏规则算子就是为了完场特征自动选择的光荣使命。它会将没用的特征去掉,将这些特征对应的权重设置为0.

  (2)模型可解释性强


  L2范数是指向量各元素的平方和然后求平方根。在回归里面,把有L2 范数的回归称为岭回归,有人也称它为权值衰减。我们让L2范数的规则项最小,可以使得W的每个元素都很小,都接近于0,但与L1范数不同,它不会让它等于0,而是接近于0,这里是有很大的区别的。而越小的参数说明模型越简单,越简单的模型则越不容易产生过拟合现象。实际上L2范数就是限制了权重参数的增长。

在经验风险最小化的基础上,加入了正则化项,相当于是加了约束条件,变成了有约束条件的最优化问题。


上面这幅图很好的解释了L1范数与L2范数

L1范数:。L1的输出图像如上左图所示,发现L1图像在和每个坐标轴相交的地方都有角出现,而目标函数的等值线除非摆的非常好,否则大部分的时候都会在有角的地方相交。而在有角的地方相交会产生稀疏性。

相比之下,L2没有L1范数这样的性质,因为没有角,所以第一次相交的地方出现在具有稀疏性的地方可能性比较小。

即采用L1范数正则化项等值线与经验风险等值线的交点常常出现自坐标轴上,即W1或者W2等于0,这样就相当于减少了参数的数量。采用L2范数的时候,交点一般出现在某个象限内,即W1,W2均不为0,。换言之L1范数更易于得到稀疏解。

W取得稀疏解意味着初始的d歌特征中仅仅对应的权重w不为0的特征才会出现在最终模型中,于是求解L1范数正则化的结果是得到了仅采用一部分初始特征的模型。L1范数的求解可以采用近端梯度下降PGD。

2. 交叉验证

另一种常用的模型选择方法是交叉验证(cross validation)
如果给定的样本数据充足,进行模型选择的一种简单方法是随机的降数据集分成:训练集(training set)、验证集(validation set)、测试集(test set)训练集用来训练模型,验证集用来选择模型,测试集用于最终对学习方法的评估。在学习到的不同复杂度的模型中,选择对验证集有最小预测误差的模型。由于验证集有足够多的数据,用它对模型进行选择也是有效的。

但是在实际应用中数据时不充足的。为了选择好的模型,可以采用交叉验证方法。交叉验证的基本思想:重复的使用数据;把给定的数据进行切分,将切分的数据集组合为训练集与测试集,在此基础上反复的进行训练、测试及模型选择。

  1. 简单交叉验证
    方法:首先随机的将已给数据分为两部分,一部分作为训练集,另一部分作为测试集(例如70%作为训练,30%作为测试),然后用训练集在各种条件下(不同的参数个数)训练模型,从而得到不同的模型;在训练集上评价各个模型的测试误差,选出测试误差最小的模型。
  2. S折交叉验证( 应用最多)
    方法:首先随机的将已给数据切分为S个互不相交的大小相同的自己;然后利用S-1个自己的数据训练模型,利用余下的子集测试模型;将这一过程对可能的S种选择重复进行;最后选出S次评测中平均测试误差最小的模型。
  3. 留一交叉验证 S折交叉验证的特殊情形是S=N,称为留一交叉验证(leave-one-out cross validation),往往在数据缺乏的情况下使用。这里,N是给定数据集的容量。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 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