出现过拟合时,使用正则化可以将模型的拟合程度降低一点点,使曲线变得缓和。

L1正则化(LASSO)

正则项是所有参数的绝对值的和。正则化不包含theta0,因为他只是偏置,而不影响曲线的摆动幅度。

\[J(\theta)=\operatorname{MSE}(y, \hat{y})+\alpha \sum_{i=1}^{n}\left|\theta_{i}\right|
\]
  1. # 使用pipeline进行封装
  2. from sklearn.linear_model import Lasso
  3. # 使用管道封装lasso
  4. def LassoRegssion(degree, alpha):
  5. return Pipeline([
  6. ("poly", PolynomialFeatures(degree = degree)),
  7. ("std_scaler", StandardScaler()),
  8. ("lasso", Lasso(alpha=alpha))
  9. ])

使用\(\alpha=0.01\) 的正则化拟合20阶多项式

  1. lasso_reg = LassoRegssion(20, 0.01)
  2. lasso_reg.fit(X_train, y_train)
  3. y_predict = lasso_reg.predict(X_test)
  4. plot_model(lasso_reg)

MSE 1.149608084325997

\(\alpha=0.1\)

MSE 1.1213911351818648

\(\alpha=1\) 时,均方误差又变大了,正则化过度了。模型变成了直线,所有参数都接近0了。因为没有对\(\theta_0\)进行正则化,所以偏置的值没有变化

1.8408939659515595

L2正则化(岭回归)

1/2可加可不加,因为方便求导。对J()求最小值时,也将\(\theta\)的值变小。当\(\alpha\)越大,右边受到的影响就越大,\(\theta\)的值就越小

\[J(\theta)=\operatorname{MSE}(y, \hat{y})+\alpha \frac{1}{2} \sum_{i=1}^{n} \theta_{i}^{2}
\]

使用pipeline封装Ridge

  1. from sklearn.linear_model import Ridge
  2. # 使用管道封装岭回归
  3. def RidgeRegression(degree, alpha):
  4. return Pipeline([
  5. ("poly", PolynomialFeatures(degree = degree)),
  6. ("std_scaler", StandardScaler()),
  7. ("ridge_reg", Ridge(alpha = alpha))
  8. ])

使用20阶多项式拟合,\(\alpha=0\)即没有正则化。

  1. ridge_reg100 = RidgeRegression(20, 0)
  2. ridge_reg100.fit(X_train, y_train)
  3. y_predict = ridge_reg100.predict(X_test)
  4. plot_model(ridge_reg100)
  5. # MSE 167.94010860994555

\(\alpha=0.0001\)

  1. ridge_reg100 = RidgeRegression(20, 0.0001)
  2. # MSE 1.3233492754136291

\(\alpha=10\)

  1. ridge_reg100 = RidgeRegression(20, 10)
  2. # MSE 1.1451272194878865

\(\alpha=1000\)

  1. ridge_reg100 = RidgeRegression(20, 10000)
  2. # MSE 1.7967435583384

对比

  • LASSO更趋向于将一部分参数变为0,更容易得到直线。Ridge更容易得到曲线。
  • \(\alpha\)越大,正则化的效果越明显

两个正则化的不同仅仅在于正则化项的不同:

\[J(\theta)=\operatorname{MSE}(y, \hat{y})+\alpha \sum_{i=1}^{n}\left|\theta_{i}\right|
\]
\[J(\theta)=\operatorname{MSE}(y, \hat{y})+\alpha \frac{1}{2} \sum_{i=1}^{n} \theta_{i}^{2}
\]

常见的对比还有:

MSE 和 MAE :

\[MSE ==> \frac{1}{n} \sum_{i=1}^{n}\left(y_{i}-\hat{y}_{i}\right)^{2}
\]
\[MAE ==> \frac{1}{n} \sum_{i=1}^{n}\left|y_{i}-\hat{y}_{i}\right|
\]

欧拉距离和曼哈顿距离:

\[\sqrt{\sum_{i=1}^{n}\left(x_{i}^{(1)}-x_{i}^{(2)}\right)^{2}} 和 \sum_{i=1}^{n}\left|x_{i}^{(1)}-x_{i}^{(2)}\right|
\]

还有明可夫斯基距离:

\[\left[\sum_{i=1}^{n}\left|X_{i}^{(a)}-X_{i}^{(b)}\right|^{p}\right]^{\frac{1}{p}}
\]

弹性网(待定)

就是将两个范式进行结合。

\[J(\theta)=\operatorname{MSE}(y, \hat{y})+r \alpha \sum_{i=1}^{n}\left|\theta_{i}\right|+\frac{1-r}{2} \alpha \sum_{i=1}^{n} \theta_{i}^{2}
\]

ML-L1、L2 正则化的更多相关文章

  1. ML-线性模型 泛化优化 之 L1 L2 正则化

    认识 L1, L2 从效果上来看, 正则化通过, 对ML的算法的任意修改, 达到减少泛化错误, 但不减少训练误差的方式的统称 训练误差 这个就损失函数什么的, 很好理解. 泛化错误 假设 我们知道 预 ...

  2. 防止过拟合:L1/L2正则化

    正则化方法:防止过拟合,提高泛化能力 在训练数据不够多时,或者overtraining时,常常会导致overfitting(过拟合).其直观的表现如下图所示,随着训练过程的进行,模型复杂度增加,在tr ...

  3. 机器学习中L1,L2正则化项

    搞过机器学习的同学都知道,L1正则就是绝对值的方式,而L2正则是平方和的形式.L1能产生稀疏的特征,这对大规模的机器学习灰常灰常重要.但是L1的求解过程,实在是太过蛋疼.所以即使L1能产生稀疏特征,不 ...

  4. L0,L1,L2正则化浅析

    在机器学习的概念中,我们经常听到L0,L1,L2正则化,本文对这几种正则化做简单总结. 1.概念 L0正则化的值是模型参数中非零参数的个数. L1正则化表示各个参数绝对值之和. L2正则化标识各个参数 ...

  5. L1,L2正则化代码

    # L1正则 import numpy as np from sklearn.linear_model import Lasso from sklearn.linear_model import SG ...

  6. L1和L2正则化(转载)

    [深度学习]L1正则化和L2正则化 在机器学习中,我们非常关心模型的预测能力,即模型在新数据上的表现,而不希望过拟合现象的的发生,我们通常使用正则化(regularization)技术来防止过拟合情况 ...

  7. Spark2.0机器学习系列之12: 线性回归及L1、L2正则化区别与稀疏解

    概述 线性回归拟合一个因变量与一个自变量之间的线性关系y=f(x).       Spark中实现了:       (1)普通最小二乘法       (2)岭回归(L2正规化)       (3)La ...

  8. 【深度学习】L1正则化和L2正则化

    在机器学习中,我们非常关心模型的预测能力,即模型在新数据上的表现,而不希望过拟合现象的的发生,我们通常使用正则化(regularization)技术来防止过拟合情况.正则化是机器学习中通过显式的控制模 ...

  9. L1正则化比L2正则化更易获得稀疏解的原因

    我们知道L1正则化和L2正则化都可以用于降低过拟合的风险,但是L1正则化还会带来一个额外的好处:它比L2正则化更容易获得稀疏解,也就是说它求得的w权重向量具有更少的非零分量. 为了理解这一点我们看一个 ...

  10. 4.机器学习——统计学习三要素与最大似然估计、最大后验概率估计及L1、L2正则化

    1.前言 之前我一直对于“最大似然估计”犯迷糊,今天在看了陶轻松.忆臻.nebulaf91等人的博客以及李航老师的<统计学习方法>后,豁然开朗,于是在此记下一些心得体会. “最大似然估计” ...

随机推荐

  1. 全局异常处理及参数校验-SpringBoot 2.7 实战基础 (建议收藏)

    优雅哥 SpringBoot 2.7 实战基础 - 08 - 全局异常处理及参数校验 前后端分离开发非常普遍,后端处理业务,为前端提供接口.服务中总会出现很多运行时异常和业务异常,本文主要讲解在 Sp ...

  2. Canvas 非常重要的三个函数

    beginPath 绘制路径必须添加 beginPath().它标志着一个画笔在画布中哪个地方开始画起.没有它,新起的画笔位置必定与上一次画笔结束的位置相连. // 第一个半圆 ctx.arc(60, ...

  3. Word 的页眉、页脚、页码分别是什么?怎么设置?

    页眉:在 Word 文档中,每个页面的顶部区域为页眉.常用于显示文档的附加信息,可以插入时间.图形.公司微标.文档标题.文件名或作者姓名等. 页脚:页脚与页眉的作用相同,都可以作为显示文档的附加信息, ...

  4. ettercap之dns欺骗攻击

    前言:攻击机(kali)和受害机(win7)需在同一网段下 1.首先创建一个钓鱼克隆网站,这里我就利用CS来弄了 2.对Ettercap的dns文件进行编辑 3.开启ettercap 4.去受害机看看 ...

  5. mybatisplus-sql注入器

    sql注入器 使用mybatisplus只需要继承BaseMapper接口即可使用:但是有新的需求需要扩展BaseMapper里面的功能时可使用sql注入器. 扩展BaseMapper里面的功能 点击 ...

  6. 二叉搜索树TREE(线段树,区间DP)

    前言 线段树+区间DP题,线段树却不是优化DP的,是不是很意外? 题面 二叉搜索树是一种二叉树,每个节点都有一个权值,并且一个点的权值比其左子树里的点权值都大,比起右子树里的点权值都小. 一种朴素的向 ...

  7. 第五十四篇:网络通信Axios

    好家伙,补充知识 1.什么是Axios? Axios可以在浏览器中发送 XMLHttpRequests Axios 是一个基于 promise 的 HTTP 库,简单的讲就是可以发送get.post请 ...

  8. 开源IPTV源服务程序使用教程

    Streaming-Media-Server-Pro 前言 我的目标是将程序打造成属于每个人的直播源服务,且对每个人完全开源免费!可作为家庭影院电视.视频等流媒体的提供商,兼容全平台,只需下载视频播放 ...

  9. zookeeper_mac安装总结

    Zookeeper mac安装总结 1. 执行 brew install zookeeper 可能遇到报错 Error: The following directories are not writa ...

  10. ELK套件部署

    前言 经过两周的不断碰壁,版本的选择 最终选择ELK的7.6.1套餐 因为我所需要的的警报插件sentinl也才跟新到7.6.1 运行环境:centos7 需要开放的端口:5601,9200,514( ...