通俗易懂–岭回归(L2)、lasso回归(L1)、ElasticNet讲解(算法+案例)

通俗易懂–岭回归(L2)、lasso回归(L1)、ElasticNet讲解(算法+案例)

1.L2正则化(岭回归)

1.1问题

想要理解什么是正则化,首先我们先来了解上图的方程式。当训练的特征和数据很少时,往往会造成欠拟合的情况,对应的是左边的坐标;而我们想要达到的目的往往是中间的坐标,适当的特征和数据用来训练;但往往现实生活中影响结果的因素是很多的,也就是说会有很多个特征值,所以训练模型的时候往往会造成过拟合的情况,如右边的坐标所示。

1.2公式

以图中的公式为例,往往我们得到的模型是:\theta_0+\theta_1x+\theta_2x^2+\theta_3x^3+\theta_4x^4,为了能够得到中间坐标的图形,肯定是希望\theta_3\theta_4越小越好,因为这两项越小就越接近于0,就可以得到中间的图形了。

对应的损失函数也加上这个惩罚项(为了惩罚\theta):假设\lambda=1000

  • min(\frac{1}{2m}[\sum_{i=1}^{m}(h_\theta(x^i)-y^i)^2+1000\theta_3^2+1000\theta_4^2])

为了求得最小值,使\theta值趋近于0,这就达到了我们的目的,得到中间坐标的方程。

把以上公式通用化得:

  • min(\frac{1}{2m}[\sum_{i=1}^{m}(h_\theta(x^i)-y^i)^2+\lambda\sum_{j=1}^{n}\theta_j^2])

相当于在原始损失函数中加上了一个惩罚项(\lambda项)

这就是防止过拟合的一个方法,通常叫做L2正则化,也叫作岭回归。

1.3对应图形

我们可以简化L2正则化的方程:

  • J=J_0+\lambda\sum_{w}w^2

J_0表示原始的损失函数,咱们假设正则化项为:L=\lambda(w_1^2+w_2^2)

我们不妨回忆一下圆形的方程:(x-a)^2+(y-b)^2=r^2

其中(a,b)为圆心坐标,r为半径。那么经过坐标原点的单位元可以写成:x^2+y^2=1

正和L2正则化项一样,同时,机器学习的任务就是要通过一些方法(比如梯度下降)求出损失函数的最小值。

此时我们的任务变成在L约束下求出J_0取最小值的解。

求解J_o的过程可以画出等值线。同时L2正则化的函数L也可以在w_1 w_2的二维平面上画出来。如下图:

L表示为图中的黑色圆形,随着梯度下降法的不断逼近,与圆第一次产生交点,而这个交点很难出现在坐标轴上。

这就说明了L2正则化不容易得到稀疏矩阵,同时为了求出损失函数的最小值,使得w1和w2无限接近于0,达到防止过拟合的问题。

1.4使用场景

只要数据线性相关,用LinearRegression拟合的不是很好,需要正则化,可以考虑使用岭回归(L2), 如何输入特征的维度很高,而且是稀疏线性关系的话, 岭回归就不太合适,考虑使用Lasso回归。

1.5代码实现

GitHub代码–L2正则化

2.L1正则化(lasso回归)

2.1公式

L1正则化与L2正则化的区别在于惩罚项的不同:

  • min(\frac{1}{2m}[\sum_{i=1}^{m}(h_\theta(x^i)-y^i)^2+\lambda\sum_{j=1}^{n}|\theta|])

L1正则化表现的是\theta的绝对值,变化为上面提到的w1和w2可以表示为:

  • J=J_0+\lambda(|w_1|+|w_2|)

2.2对应图形

求解J_o的过程可以画出等值线。同时L1正则化的函数也可以在w_1 w_2的二维平面上画出来。如下图:

惩罚项表示为图中的黑色棱形,随着梯度下降法的不断逼近,与棱形第一次产生交点,而这个交点很容易出现在坐标轴上。这就说明了L1正则化容易得到稀疏矩阵。

2.3使用场景

L1正则化(Lasso回归)可以使得一些特征的系数变小,甚至还使一些绝对值较小的系数直接变为0,从而增强模型的泛化能力 。对于高纬的特征数据,尤其是线性关系是稀疏的,就采用L1正则化(Lasso回归),或者是要在一堆特征里面找出主要的特征,那么L1正则化(Lasso回归)更是首选了。

2.4代码实现

GitHub代码–L1正则化

3.ElasticNet回归

3.1公式

ElasticNet综合了L1正则化项和L2正则化项,以下是它的公式:

  • min(\frac{1}{2m}[\sum_{i=1}^{m}(h_\theta(x^i)-y^i)^2+\lambda\sum_{j=1}^{n}\theta_j^2]+\lambda\sum_{j=1}^{n}|\theta|)

3.2使用场景

ElasticNet在我们发现用Lasso回归太过(太多特征被稀疏为0),而岭回归也正则化的不够(回归系数衰减太慢)的时候,可以考虑使用ElasticNet回归来综合,得到比较好的结果。

3.3代码实现

from sklearn import linear_model  
#得到拟合模型,其中x_train,y_train为训练集 
ENSTest = linear_model.ElasticNetCV(alphas=[0.0001, 0.0005, 0.001, 0.01, 0.1, 1, 10], l1_ratio=[.01, .1, .5, .9, .99],  max_iter=5000).fit(x_train, y_train)  
#利用模型预测,x_test为测试集特征变量 
y_prediction = ENSTest.predict(x_test)
复制代码
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/101191.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • freeswitch之呼叫中心acd模块开发

    freeswitch之呼叫中心acd模块开发一、定义:ACD(AutomaticCallDistributor)自动呼叫分配,也叫智能选择座席。它是呼叫中心整个前台接入系统逻辑功能的描述:把接入的呼叫转接到正确的座席员桌前。ACD是现代呼叫中心有别于一般的热线电话系统和自动应答系统的重要标志,其性能的优劣直接影响到呼叫中心的效率和顾客的满意度。二、ACD包含的功能点:1、程控交换功能ACD在本质上也是交换机的一种类型,必须具有程控交换最基本的话务交换功能。2、排队功能ACD必须具有话务排队的功能,所谓排队是指在内线都

  • 免费域名和空间搭建个人网站——服务器篇

    免费域名和空间搭建个人网站——服务器篇免费域名和空间搭建个人网站服务器篇网上有很多免费的服务器,但是免费的都不好用,只能凑合一下啦~~当然你也可以购买一些像腾讯,阿里云或者国外的虚拟主机。我用的是国内的主机屋点击免费空间,选择立即开通,然后登陆,注册成功后,点击立即开通,就可以了开通之后,进入控制台,点击一键初始化网站然后初始化FTP密码,初始化Mysql数据库密码,接下来需要解析域名,选择常规功能,点击域

  • c#操作xml文件

    c#操作xml文件

  • 【织梦插件】xenu软件-网站url和死链提取工具免费下载[通俗易懂]

    【织梦插件】xenu软件-网站url和死链提取工具免费下载[通俗易懂]软件名称 xenu 软件作用 网站网址提取工具 适宜人群 SEO 网址 http://www.jingdouwang.cn/zygx/wzcj/278.html 软件简介:  XenuLinkSleuth可能是你所见功能最强大的网站死链接查询的软件了。使用方法简单,仅需要输入网站URL就可以完成死链查询。用户可直接查看死链和火炼,…

  • python基础(9)增强型赋值与使用普通赋值的区别[通俗易懂]

    python基础(9)增强型赋值与使用普通赋值的区别[通俗易懂]前言增强型赋值语句是经常被使用到的,因为从各种学习渠道中,我们能够得知i+=1的效率往往要比i=i+1更高一些(这里以+=为例,实际上增强型赋值语句不仅限于此)。所以我们会乐此不

  • js 截取字符串的三种方法「建议收藏」

    js 截取字符串的三种方法「建议收藏」方法1:substring()方法string.substring(from,to)方法从from位置截取到to位置,to可选,没有设置时默认到末尾。<!DOCTYPEhtml><html><body><script>varstr="www.runoob.com!";document.write(str.subst…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号