一、基础理解

  • LASSO 回归(Least Absolute Shrinkage and Selection Operator Regression)是模型正则化的一定方式;
  • 功能:与岭回归一样,解决过拟合或者模型含有的巨大的方差误差的问题;

二、LASSO 回归

  • 以线性回归为例

 1)对于岭回归

  • 任务:让最小化的损失函数对应的 θ 值尽量的小;
  • 操作:在损失函数中添加了一项:;希望在最小化损失函数时通过添加的此项代数式来控制参数 θ 的大小,并且为了平衡新的损失函数中的两项代数式对损失函数的影响,在添加的代数式中加入了新的参数 α;

 2)对于 LASSO 回归

  • LASSO 回归的原理和岭回归是一样的,只是添加的代数式不同;

三、模拟数据使用 LASSO 回归

 1)模拟数据集

  • 模拟并绘制数据集
    import numpy as np
    import matplotlib.pyplot as plt np.random.seed(42)
    x = np.random.uniform(-3.0, 3.0, size=100)
    X = x.reshape(-1, 1)
    y = 0.5 * x + 3. + np.random.normal(0, 1, size=100) plt.scatter(x, y)
    plt.show()

  • 分割数据集
    from sklearn.model_selection import train_test_split
    
    np.random.seed(666)
    X_train, X_test, y_train, y_test = train_test_split(X, y)

 2)使用多项式回归拟合数据

  • 管道
    from sklearn.pipeline import Pipeline
    from sklearn.preprocessing import PolynomialFeatures
    from sklearn.preprocessing import StandardScaler
    from sklearn.linear_model import LinearRegression def PolynomialRegression(degree):
    return Pipeline([
    ('poly', PolynomialFeatures(degree=degree)),
    ('std_scaler', StandardScaler()),
    ('lin_reg', LinearRegression())
    ])
  • 封装绘制代码
    def plot_model(model):
    X_plot = np.linspace(-3, 3, 100).reshape(100, 1)
    y_plot = model.predict(X_plot) plt.scatter(x, y)
    plt.plot(X_plot[:, 0], model.predict(X_plot), color='r')
    plt.axis([-3, 3, 0, 6])
    plt.show()
  • 多项式回归并绘图
    from sklearn.metrics import mean_squared_error
    
    poly_reg = PolynomialRegression(degree=20)
    poly_reg.fit(X_train, y_train) y_poly_predict = poly_reg.predict(X_test)
    mean_squared_error(y_test, y_poly_predict)
    # 输出:167.9401086729357(均方误差) plot_model(poly_reg)

 3)使用 LASSO Regression 改进算法模型

  • 管道
    from sklearn.linear_model import Lasso
    
    # 以管道的方式,使用 LASSO 回归的方法改进多项式回归的算法
    def LassoRegression(degree, alpha):
    return Pipeline([
    ('poly', PolynomialFeatures(degree=degree)),
    ('std_scaler', StandardScaler()),
    ('lasso_reg', Lasso(alpha=alpha))
    ])
  • degree = 20、α = 0.01
    lasso1_reg = LassoRegression(20, 0.01)
    lasso1_reg.fit(X_train, y_train) y1_predict = lasso1_reg.predict(X_test)
    mean_squared_error(y_test, y1_predict)
    # 输出:1.149608084325997(均方误差) plot_model(lasso1_reg)

  • degree = 20、α = 0.1
    lasso2_reg = LassoRegression(20, 0.1)
    lasso2_reg.fit(X_train, y_train) y2_predict = lasso2_reg.predict(X_test)
    mean_squared_error(y_test, y2_predict)
    # 输出:1.1213911351818648(均方误差) plot_model(lasso2_reg)

  • degree = 20、α = 1
    lasso3_reg = LassoRegression(20, 1)
    lasso3_reg.fit(X_train, y_train) y3_predict = lasso3_reg.predict(X_test)
    mean_squared_error(y_test, y3_predict)
    # 输出:1.8408939659515595(均方误差) plot_model(lasso3_reg)

 4)分析

  • α = 0.01,比岭回归中的第一个 α 的取值大很多,因为对于 RidgeRegression(),正则化的那一项中是 θ^2,平方后的结果会比较大,所以需要让 α 值很小来调节正则项的大小;而对于LassoRegression(),正则化的那一项中是 |θ|,比岭回归中的正则化项小很多,所以在 LassoRegression() 中 α 的取值可以相对大一些;
  • # 在具体进行机器学习算法的过程中,需要不断的试验不断的看结果,慢慢的形成经验,用各种不同的方法在调参时,对于不同的参数大概知道参数在哪个范围内进行选择会相应的比较好;
  • 当 α = 1 时,LassoRegression() 对应的正则化的程度已经比较高了;
  1. 正则化的程度:拟合曲线的上下抖动幅度;

  • 现实机器学习的过程中,就是在完全不进行模型正则化和过度模型正则化之间选择一个程度最好的一情况;

四、比较 Ridge Regression 和 LASSO Regression

 1)使用 Ridge 改进的多项式回归算法,随着 α 的改变,拟合曲线始终是各曲线,直到最后变成一条几乎水平的直线;也就是说,使用 Ridge 改造的多项式回归算法,得到的模型变量前还是有系数,因此很难得到一天斜的直线;

 2)而使用 Lasso 改进的多项式回归算法,随着 α 的改变,拟合曲线会很快变成一条斜的直线,最后慢慢变成一条几乎水平的直线;模型更倾向于一条直线。

五、其它

  •  LASSO 的特点:趋向于使得一部分 θ 值变为 0,也就是说 LASSO 认为与 θ = 0 对应的特征是完全没有用的,而剩下与 θ 不为 0 所对应的特征是有用的,所以 LASSO 可作为特征选择用;
  • 在作为特征选择用时,LASSO 也可能将一些有用的特征的系数 θ 变为 0,会导致信息不准确;相比较来说,还是 Ridge 更准确。
  1. 但是如果样本特征非常的大,如使用多项式回归时 degree = 100,此种情况下使用 LASSO 可以使样本特征变小;

机器学习:模型泛化(LASSO 回归)的更多相关文章

  1. 机器学习中模型泛化能力和过拟合现象(overfitting)的矛盾、以及其主要缓解方法正则化技术原理初探

    1. 偏差与方差 - 机器学习算法泛化性能分析 在一个项目中,我们通过设计和训练得到了一个model,该model的泛化可能很好,也可能不尽如人意,其背后的决定因素是什么呢?或者说我们可以从哪些方面去 ...

  2. 热门数据挖掘模型应用入门(一): LASSO回归

    热门数据挖掘模型应用入门(一): LASSO回归 2016-10-10 20:46 作者简介: 侯澄钧,毕业于俄亥俄州立大学运筹学博士项目, 目前在美国从事个人保险产品(Personal Line)相 ...

  3. 【笔记】模型泛化与岭回归与LASSO

    模型泛化与岭回归与LASSO 模型正则化 模型正则化,简单来说就是限制参数大小 模型正则化是用什么思路来解决先前过拟合的由于过于拟合导致的曲线抖动(线性方程前的系数都很大) 线性回归的目标就是求一个最 ...

  4. 机器学习:模型泛化(L1、L2 和弹性网络)

    一.岭回归和 LASSO 回归的推导过程 1)岭回归和LASSO回归都是解决模型训练过程中的过拟合问题 具体操作:在原始的损失函数后添加正则项,来尽量的减小模型学习到的 θ 的大小,使得模型的泛化能力 ...

  5. 【机器学习】正则化的线性回归 —— 岭回归与Lasso回归

    注:正则化是用来防止过拟合的方法.在最开始学习机器学习的课程时,只是觉得这个方法就像某种魔法一样非常神奇的改变了模型的参数.但是一直也无法对其基本原理有一个透彻.直观的理解.直到最近再次接触到这个概念 ...

  6. 机器学习-正则化(岭回归、lasso)和前向逐步回归

    机器学习-正则化(岭回归.lasso)和前向逐步回归 本文代码均来自于<机器学习实战> 这三种要处理的是同样的问题,也就是数据的特征数量大于样本数量的情况.这个时候会出现矩阵不可逆的情况, ...

  7. 机器学习之五 正则化的线性回归-岭回归与Lasso回归

    机器学习之五 正则化的线性回归-岭回归与Lasso回归 注:正则化是用来防止过拟合的方法.在最开始学习机器学习的课程时,只是觉得这个方法就像某种魔法一样非常神奇的改变了模型的参数.但是一直也无法对其基 ...

  8. 多元线性回归模型的特征压缩:岭回归和Lasso回归

    多元线性回归模型中,如果所有特征一起上,容易造成过拟合使测试数据误差方差过大:因此减少不必要的特征,简化模型是减小方差的一个重要步骤.除了直接对特征筛选,来也可以进行特征压缩,减少某些不重要的特征系数 ...

  9. 机器学习--Lasso回归和岭回归

    之前我们介绍了多元线性回归的原理, 又通过一个案例对多元线性回归模型进一步了解, 其中谈到自变量之间存在高度相关, 容易产生多重共线性问题, 对于多重共线性问题的解决方法有: 删除自变量, 改变数据形 ...

随机推荐

  1. Windows10提示“没有权限使用网络资源”的解决方案

    1.点击“开始→运行”,在“运行”对话框中输入“GPEDIT.MSC”,打开组策略编辑器 2.依次选择“计算机配置→Windows设置→安全设置→本地策略→用户权利分配” 3.双击“拒绝从网络访问这台 ...

  2. Java Comparator方法 和 Comparable接口

    默认的排序方法: 让类继承Comparable接口,重写compareTo方法. 示例代码: package com.imooc.collection; import java.util.HashSe ...

  3. oracle 字典表查询

    1.oracle 字典表查询 /*显示当前用户*/ show user 在sql plus中可用,在pl sql中不可用 /*查看所有用户名*/ select username,user_id,cre ...

  4. mybatis 一对多和多对一

      在学习MyBatis3的过程中,文档上面一直在强调一个id的东西!在做这个实验的时候,也因为没有理解清楚id含义而导致一对多的“多”中也只有一条数据.id和result的唯一不同是id表示的结果将 ...

  5. LeetCode——palindrome-partitioning

    Question Given a string s, partition s such that every substring of the partition is a palindrome. R ...

  6. Maven——安装配置

    MAVEN 一.介绍:(待填) 二.下载:http://maven.apache.org/download.cgi(官网下载) 选择二进制的zip文件,这种的可直接使用. 三.环境配置 1.前提条件: ...

  7. Dom4j quick start guide

    Parsing XML Using Iterators Powerful Navigation with XPath Fast Looping Creating a new XML document ...

  8. ubuntu安装Qt5

    1.ubuntu 10.04 desktop amd64 问题: 1.1. 没有GLIBCXX_3.4.15版本,或是更高的版本 http://blog.chinaunix.net/uid-91530 ...

  9. 0.00-050613_zc

    1. ROM bios --> 启动盘第一个扇区(此处内容为boot) 加载到 内存位置0x7C00(31KB) --> 执行权转移(也就相当于跳转) boot程序主要功能:把 软盘/映像 ...

  10. 添加语句<tx:annotation-driven transaction-manager="txManager"/>报错

    在添加<tx:annotation-driven transaction-manager="txManager"/>程序之前,applicationContext.xm ...