L1范数与L2范数​

​ L1范数与L2范数在机器学习中,是常用的两个正则项,都可以防止过拟合的现象。L1范数的正则项优化参数具有稀疏特性,可用于特征选择;L2范数正则项优化的参数较小,具有较好的抗干扰能力

1. 防止过拟合

​ L2正则项优化目标函数时,一般倾向于构造构造较小参数,一般认为,参数值较小的模型相对简单,能适应不同的数据集,在一定程度上避免过拟合的现象,参数较小,数据偏移带来的影响也会较小,从而说L2正则项具有较好的抗干扰能力,从而实现防止过拟合的现象。

​ L1正则项也可以防止过拟合现象,主要是利用了L1正则项优化参数的稀疏特性。一个简单的模型,配置参数越少,复杂度越小,而稀疏化的参数,模型的的很多参数都变为0,达到减少参数的目的,从而实现防止过拟合的现象。

例子1:

​ 假设有数据点10个数据点,分别为:(0, -2), (10, 18), (20, 15), (30, 35), (40, 42), (50, 50), (60, 66), (70, 76), (80, 77), (90, 85),如图1(见代码1)。

图1 样例数据点

​ 假设该模型为线性模型,即 \(y=ax+b\) 。通过均方误差(MSE)的方式,求解参数\(a\)和\(b\)的值,设上面的10个点分别表示为 \((x_1,y_1),...,(x_{10},y_{10})\) ,目标函数表示为:

\[\begin{align}
L &= \sum\limits_{i = 1}^{10} {{{\left( {{y_i} - \left( {a{x_i} + b} \right)} \right)}^2}}
\nonumber\\
&= \left( {Y - AX} \right){\left( {Y - AX} \right)^T}
\end{align}
\]

其中,\(Y = \left( {{y_1},...,{y_N}} \right) \in {R^{1 \times N}}​\),\(A = \left( {a,b} \right) \in {R^{1 \times 2}}​\),\(X = \left( {\begin{array}{*{20}{c}}
{{x_1}}& \cdots &{{x_N}}\\
1& \cdots &1
\end{array}} \right) \in {R^{1 \times N}}​\)。

求解:

\[\frac{{\partial L}}{{\partial A}} = 2\left( {Y{X^T} - AX{X^T}} \right) = 0
\\ A = Y{X^T}{\left( {X{X^T}} \right)^{ - 1}}
\\ A = \left( {\begin{array}{*{20}{c}}
{0.971}&{{\rm{2}}{\rm{.509}}}
\end{array}} \right)
\]

(结果见代码1)。

添加L2正则项,

\[L = \left( {Y - AX} \right){\left( {Y - AX} \right)^T} + {\left\| A \right\|^2}
\]

求解得到

\[A = Y{X^T}{\left( {I + X{X^T}} \right)^{ - 1}}
\\ A = \left( {\begin{array}{*{20}{c}}
{{\rm{0}}{\rm{.985}}}&{{\rm{1}}{\rm{.623}}}
\end{array}} \right)
\]

(结果见代码2)。

# 代码1
import numpy as np
import matplotlib.pyplot as plt
from numpy.linalg import inv
if __name__ == '__main__':
x = np.arange(0, 100, 10)
np.random.seed(2019)
y = x + np.random.randint(-10, 11, 10)
data = list(zip(x, y))
print(data)
# [(0, -2), (10, 18), (20, 15), (30, 35), (40, 42), (50, 50), (60, 66),
# (70, 76), (80, 77), (90, 85)]
plt.plot(x, y, '-*')
plt.xlabel('x')
plt.ylabel('y')
plt.show()
X = np.vstack((np.array(x), np.ones(len(x))))
Y = np.array(y)
A = Y.dot(X.T).dot(inv(X.dot(X.T)))
print(A) # [0.97090909 2.50909091]

2. L1正则化的稀疏解释

首先阐述一下为什么需要稀疏。

假设有样本\(x \in R^m\), \(X=(x_1,...,x_N)\)是\(N\)个样本,\(x_i\)是列向量,这\(N\)个样本的类别表示为\(Y=(y_1,...,y_N)\),假设\(m>N\),现有一个线性模型\(Y=\theta X\), \(\theta \in R^m\), 由于\(m>N\),所以$ \theta $ 有无数个解,\(x_i\) 是 \(m\) 维的列向量,可能并不是所有的属性对构建模型都是有效的,此时需要筛选出一些有用的属。这里对于无用的属性,可以使用 $ \theta $ 筛选,在指定位置置零即可,除掉 \(X\) 中无用的属性,此时可能有 \(m_{new} < N\) 该线性模型可能得到唯一解。但是,如何寻找稀疏的 $ \theta $ 呢?

参考:https://vimsky.com/article/3852.html

L1范数与L2范数​的更多相关文章

  1. L1范数与L2范数正则化

    2018-1-26 虽然我们不断追求更好的模型泛化力,但是因为未知数据无法预测,所以又期望模型可以充分利用训练数据,避免欠拟合.这就要求在增加模型复杂度.提高在可观测数据上的性能表现得同时,又需要兼顾 ...

  2. L1范数和L2范数

    给定向量x=(x1,x2,...xn)L1范数:向量各个元素绝对值之和L2范数:向量各个元素的平方求和然后求平方根Lp范数:向量各个元素绝对值的p次方求和然后求1/p次方L∞范数:向量各个元素求绝对值 ...

  3. 正则化的L1范数和L2范数

    范数介绍:https://www.zhihu.com/question/20473040?utm_campaign=rss&utm_medium=rss&utm_source=rss& ...

  4. Lp距离, L1范数, 和L2范数(转载)

    范式可以理解成距离 转载自: https://blog.csdn.net/hanhuili/article/details/52079590 内容如下: 由此可见,L2其实就是欧式距离.工程上,往往不 ...

  5. paper 126:[转载] 机器学习中的范数规则化之(一)L0、L1与L2范数

    机器学习中的范数规则化之(一)L0.L1与L2范数 zouxy09@qq.com http://blog.csdn.net/zouxy09 今天我们聊聊机器学习中出现的非常频繁的问题:过拟合与规则化. ...

  6. 机器学习中的范数规则化之(一)L0、L1与L2范数(转)

    http://blog.csdn.net/zouxy09/article/details/24971995 机器学习中的范数规则化之(一)L0.L1与L2范数 zouxy09@qq.com http: ...

  7. L0/L1/L2范数的联系与区别

    L0/L1/L2范数的联系与区别 标签(空格分隔): 机器学习 最近快被各大公司的笔试题淹没了,其中有一道题是从贝叶斯先验,优化等各个方面比较L0.L1.L2范数的联系与区别. L0范数 L0范数表示 ...

  8. L0、L1与L2范数、核范数(转)

    L0.L1与L2范数.核范数 今天我们聊聊机器学习中出现的非常频繁的问题:过拟合与规则化.我们先简单的来理解下常用的L0.L1.L2和核范数规则化.最后聊下规则化项参数的选择问题.这里因为篇幅比较庞大 ...

  9. 机器学习中的范数规则化之(一)L0、L1与L2范数 非常好,必看

    机器学习中的范数规则化之(一)L0.L1与L2范数 zouxy09@qq.com http://blog.csdn.net/zouxy09 今天我们聊聊机器学习中出现的非常频繁的问题:过拟合与规则化. ...

随机推荐

  1. [Android]使用Spring for Android改善数据交互流程

    如果开发一个和服务端有数据交互android应用,流程通常是这样的:界面收集用户数据之后,将它转换成JSON或者XML格式的字符串,以HTTP的方式提交给服务端,获得返回的文本数据,再将数据解析为ja ...

  2. request.getParameterNames()和request.getParameterValues()

    request.getParameterNames()方法是将发送请求页面中form表单里所有具有name属性的表单对象获取(包括button).返回一个Enumeration类型的枚举. 通过Enu ...

  3. 20175211 2018-2019-2 《Java程序设计》第六周学习总结

    目录 教材学习内容总结 第七章 内部类与异常类 第十章 输入.输出流 教材学习中的问题和解决过程 代码托管 学习进度条 参考资料 教材学习内容总结 第七章 内部类与异常类 第十章 输入.输出流 教材学 ...

  4. django js引入失效问题

    今天将项目中html文件下的自定义scrept代码单独独立,结果js引入无效,没有任何时间效果,在浏览器查看引入文件也正常. 后来发现自己引入的位置不对,js的引入文件应该放在body体内,而我把他们 ...

  5. Oracle创建新undo表空间最佳实践(包含段检查)

    在处理一则ORA-600 [4194]案例时,参考MOS文档:Step by step to resolve ORA-600 4194 4193 4197 on database crash (文档 ...

  6. BigDecimal源码

    1 public BigDecimal(char[] in, int offset, int len, MathContext mc) {// 使用字符数组的构造方法,一般我们推荐使用的是一Strin ...

  7. WebApi接口访问异常问题。尝试创建“testController”类型的控制器时出错。请确保控制器具有无参数公共构造函数

    本来运行的好好的webAPI 接口突然报了个 :“尝试创建“testController”类型的控制器时出错.请确保控制器具有无参数公共构造函数” 错误.耗了半宿最终解决了, 原因: api控制器中引 ...

  8. sql 查询所有作业的详情

    DECLARE @WeekDays TABLE ( freq_interval INT, weekdays ) ) INSERT INTO @WeekDays ,N'星期日 ' UNION ALL , ...

  9. js时间国际化

    d = new Date(); localTime = d.getTime();localOffset = d.getTimezoneOffset() * 60000; utc = localTime ...

  10. 读HashMap 源码(jdk11)的见解

    如果想系统详细的了解HashMap请移步各大佬博客.这篇文章只是个人的一些见解. 数组+链表 或 数组+红黑树.这种说法感觉有迷惑性. 之前看博客都说 HashMap 的存储是数组+链表(jdk6), ...