文章目录

  • L1和L2
    • L2正则化、岭回归
    • L1正则化、Lasso回归
    • 弹性网络
  • 提前停止

正则化是处理模拟过拟合最常用的方式之一。本部分我们介绍常见的正则化方法。

L1和L2

Lasso回归的一个重要特点是它倾向于完全消除掉最不重要特征的权重(也就是将它们设置为零)因为所有高阶多项式的特征权重都等于零。换句话说,Lasso回归会自动执行特征选择并输出一个稀疏模型(即只有很少的特征有非零权重)。

你可以通过查下图来了解为什么会这样:轴代表两个模型参数,背景轮廓代表不同的损失函数。在左上图中,轮廓线代表1损失(|θ1|+|θ2|),当你靠近任何轴时,该损失呈线性下降。例如,如果将模型参数初始化为θ1=2和θ2=0.5,运行梯度下降会使两个参数均等地递减(如黄色虚线所示)。因此θ2将首先达到0(因为开始时接近0)。之后,梯度下降将沿山谷滚动直到其达到θ1=0(有一点反弹,因为1的梯度永远不会接近0:对于每个参数,它们都是1或1)。在右上方的图中,轮廓线代表Lasso的成本函数(即MSE成本函数加L1损失)。白色的小圆圈显示了梯度下降优化某些模型参数的路径,这些参数在θ1=0.25和θ2=1附近初始化:再次注意该路径如何快速到达θ2=0,然后向下滚动并最终在全局最优值附近反弹(由红色正方形表示)。如果增加α,则全局最优值将沿黄色虚线向左移动;如果减少α,则全局最优值将向右移动(在此示例中,非正则化的MSE的最优参数为θ1=2和θ2=0.5)。

底部的两个图显示了相同的内容,但惩罚为L2。在左下图中,你可以看到L2损失随距原点的距离而减小,因此梯度下降沿该点直走。在右下图中,轮廓线代表岭回归的成本函数(即MSE成本函数加L2损失)。Lasso有两个主要区别。首先,随着参数接近全局最优值,梯度会变小,因此,梯度下降自然会减慢,这有助于收敛(因为周围没有反弹)。其次,当你增加α时,最佳参数(用红色正方形表示)越来越接近原点,但是它们从未被完全被消除。

L2正则化、岭回归

本部分介绍了sklearn中岭回归的实现方式。

sklearn提供了一个Ridge的线性领回归的实现,但更常用的方式是在其它模型中加入penalty='l2’的参数。我们先看一下Rideg类的使用:

X = np.random.rand(1000, 1)
y = 2 * X + 1from sklearn.linear_model import Ridge
ridge_reg = Ridge(alpha=1, solver='cholesky')
ridge_reg.fit(X, y)
print(ridge_reg.coef_, ridge_reg.intercept_)
[[1.97643979]] [1.01167015]

我们再看一下使用其它模型+penalty参数的方式:

X = np.random.rand(1000, 1)
y = 2 * X + 1from sklearn.linear_model import SGDRegressor
sgd_reg = SGDRegressor(penalty='l2')
sgd_reg.fit(X, y.ravel())
print(ridge_reg.coef_, ridge_reg.intercept_)
[[1.97643979]] [1.01167015]

L1正则化、Lasso回归

与L2类似,L1也有Lasso和penalty2种实现方式:

X = np.random.rand(100, 1) * 10
y = 12 * X + 256from sklearn.linear_model import Lasso
lasso_reg = Lasso()
lasso_reg.fit(X, y)
print(lasso_reg.coef_, lasso_reg.intercept_)
[11.88574327] [256.58076116]
from sklearn.linear_model import SGDRegressor
sgd_reg = SGDRegressor(penalty='l1')
sgd_reg.fit(X, y.ravel())
print(sgd_reg.coef_, sgd_reg.intercept_)
[12.05735998] [255.60450449]

弹性网络

弹性网络ElasticNet同时使用L1和L2。

X = np.random.rand(100, 1) * 10
y = 12 * X + 256from sklearn.linear_model import ElasticNet
en_reg = ElasticNet(alpha=0.1, l1_ratio=0.5)
en_reg.fit(X,y)
print(en_reg.coef_, en_reg.intercept_)
[11.91128824] [256.42500209]
from sklearn.linear_model import SGDRegressor
sgd_reg = SGDRegressor(penalty='elasticnet')
sgd_reg.fit(X, y.ravel())
print(sgd_reg.coef_, sgd_reg.intercept_)
[12.06448304] [255.59790417]

提前停止

为了避免过拟合,也为了记录训练过程中的最优模型,我们经常需要用到提前停止。

from copy import deepcopy
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScalerpoly_scaler = Pipeline([("poly_features", PolynomialFeatures(degree=90, include_bias=False)),("std_scaler", StandardScaler())])X_train_poly_scaled = poly_scaler.fit_transform(X_train)
X_val_poly_scaled = poly_scaler.transform(X_val)sgd_reg = SGDRegressor(max_iter=1, tol=-np.infty, warm_start=True,penalty=None, learning_rate="constant", eta0=0.0005, random_state=42)minimum_val_error = float("inf")
best_epoch = None
best_model = None
for epoch in range(1000):sgd_reg.fit(X_train_poly_scaled, y_train)  # continues where it left offy_val_predict = sgd_reg.predict(X_val_poly_scaled)val_error = mean_squared_error(y_val, y_val_predict)if val_error < minimum_val_error:minimum_val_error = val_errorbest_epoch = epochbest_model = deepcopy(sgd_reg)

sklearn中的正则化相关推荐

  1. sklearn中的xgboost_xgboost来了

    一.xgboost前奏 1,介绍一下啥是xgboost XGBoost全称是eXtreme Gradient Boosting,即极限梯度提升算法.它由陈天奇所设计,致力于让提升树突破自身的计算极限, ...

  2. 深度学习中的正则化技术(附Python代码)

    作者:SHUBHAM JAIN 翻译:和中华 校对:丁楠雅 本文约3500字,建议阅读20分钟. 本文简单介绍了什么是正则化以及在深度学习任务中可以采用哪些正则化技术,并以keras代码具体讲解了一个 ...

  3. sklearn 中的线性回归、岭回归、Lasso回归参数配置及示例

    文章目录 线性回归 引入 重要参数 重要属性 重要方法 例子 岭回归 引入 重要参数 重要属性 重要方法 示例 Lasso 回归 引入 重要参数 重要属性 重要方法 示例 本文主要讲一些sklearn ...

  4. sklearn中eof报错_sklearn中的数据预处理和特征工程

    小伙伴们大家好~o( ̄▽ ̄)ブ,今天我们看一下Sklearn中的数据预处理和特征工程,老规矩还是先强调一下,我的开发环境是Jupyter lab,所用的库和版本大家参考: Python 3.7.1(你 ...

  5. sklearn中的逻辑回归

    复习一下sklearn中的这些用法 给定一堆数据,并设置一个随机种子,让大家都能复现: import numpy as np import matplotlib.pyplot as pltnp.ran ...

  6. sklearn中的支持向量机SVM(下)

    1 二分类SVC的进阶 1.1 SVC用于二分类的原理复习 sklearn中的支持向量机SVM(上) 1.2 参数C的理解进阶 有一些数据,可能是线性可分的,但在线性可分状况下训练准确率不能达到100 ...

  7. SVM 支持向量机简介和sklearn中参数设置详解

    1.SVM简介 SVM方法建立在统计学VC维和结构风险最小化原则上,既可以用于分类(二/多分类).也可用于回归和异常值检测.SVM具有良好的鲁棒性,对未知数据拥有很强的泛化能力,特别是在数据量较少的情 ...

  8. sklearn中的支持向量机SVM(上)

    1 概述 支持向量机(SVM,也称为支持向量网络),是机器学习中获得关注最多的算法.它源于统计学习理论,是除了集成学习算法之外,接触到的第一个强学习器. 从算法的功能来看,SVM囊括了很多其他算法的功 ...

  9. sklearn中一些参数

    转载:http://www.cnblogs.com/chenyaling/p/7826229.html 1.监督学习 1.1.广义线性模型 1.1.1.普通最小二乘法  class sklearn.l ...

最新文章

  1. 大厂面试官必问的Mysql锁机制
  2. OpenGL画图设备上下文与MFC设备上下文的对应
  3. JSF –渴望的CDI bean
  4. 精妙的SQL语句收藏
  5. ant design form表单的时间处理
  6. SPOJ Problem 22:Triangle From Centroid
  7. 蔡先生论道大数据之八: 让他在看小说的时候, 看到喜欢的汽车
  8. python qt gui与数据可视化编程 pdf_《Python Qt GUI与数据可视化编程》第13章
  9. Windows 8 Directx 开发学习笔记(十一)地形纹理贴图
  10. 索佳电子水准数据传输软件_索佳全站仪数据传输软件
  11. Medieval Rampage
  12. GeoTools操作Shape格式文件
  13. 网易云音乐歌单解析下载源码
  14. GoLand 连接远程代码库
  15. 聊聊SEO与生意的关系,顺带说说百度快照功能下线原因及影响有哪些?
  16. python代码雨_教你用200行Python代码“换脸”
  17. 【Linux】gcc编译器下载与手动安装
  18. WinRAR文件分卷压缩具体使用方法图文教程
  19. 2019暑假集训总结与记录
  20. 游戏思考15:全区全服和分区分服的思考

热门文章

  1. 【解题报告】Leecode 700. 二叉搜索树中的搜索——Leecode每日一题
  2. 【测试点分析】1081 检查密码 (15分)
  3. 18行代码解决:(C语言)L1-046 整除光棍 (20分)
  4. 【GIF动画+完整可运行源代码】C++实现 希尔排序——十大经典排序算法之四
  5. Python数据结构学习笔记——搜索与排序算法
  6. eclipse中的WEB项目打包部署到tomcat .
  7. python通过ip池爬_Python爬虫 | IP池的使用
  8. led显示屏服务器怎么设置,led显示屏怎么改字幕 led显示屏改字幕方法
  9. java怎么注销cookie_java web中cookie的永久创建与撤销
  10. 西交计算机组成原理第四章,17春西交《计算机组成原理》在线作业.doc