机器学习:模型泛化(LASSO 回归)
一、基础理解
- 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() 对应的正则化的程度已经比较高了;
正则化的程度:拟合曲线的上下抖动幅度;
- 现实机器学习的过程中,就是在完全不进行模型正则化和过度模型正则化之间选择一个程度最好的一情况;
四、比较 Ridge Regression 和 LASSO Regression
1)使用 Ridge 改进的多项式回归算法,随着 α 的改变,拟合曲线始终是各曲线,直到最后变成一条几乎水平的直线;也就是说,使用 Ridge 改造的多项式回归算法,得到的模型变量前还是有系数,因此很难得到一天斜的直线;
2)而使用 Lasso 改进的多项式回归算法,随着 α 的改变,拟合曲线会很快变成一条斜的直线,最后慢慢变成一条几乎水平的直线;模型更倾向于一条直线。
五、其它
- LASSO 的特点:趋向于使得一部分 θ 值变为 0,也就是说 LASSO 认为与 θ = 0 对应的特征是完全没有用的,而剩下与 θ 不为 0 所对应的特征是有用的,所以 LASSO 可作为特征选择用;
- 在作为特征选择用时,LASSO 也可能将一些有用的特征的系数 θ 变为 0,会导致信息不准确;相比较来说,还是 Ridge 更准确。
- 但是如果样本特征非常的大,如使用多项式回归时 degree = 100,此种情况下使用 LASSO 可以使样本特征变小;
机器学习:模型泛化(LASSO 回归)的更多相关文章
- 机器学习中模型泛化能力和过拟合现象(overfitting)的矛盾、以及其主要缓解方法正则化技术原理初探
1. 偏差与方差 - 机器学习算法泛化性能分析 在一个项目中,我们通过设计和训练得到了一个model,该model的泛化可能很好,也可能不尽如人意,其背后的决定因素是什么呢?或者说我们可以从哪些方面去 ...
- 热门数据挖掘模型应用入门(一): LASSO回归
热门数据挖掘模型应用入门(一): LASSO回归 2016-10-10 20:46 作者简介: 侯澄钧,毕业于俄亥俄州立大学运筹学博士项目, 目前在美国从事个人保险产品(Personal Line)相 ...
- 【笔记】模型泛化与岭回归与LASSO
模型泛化与岭回归与LASSO 模型正则化 模型正则化,简单来说就是限制参数大小 模型正则化是用什么思路来解决先前过拟合的由于过于拟合导致的曲线抖动(线性方程前的系数都很大) 线性回归的目标就是求一个最 ...
- 机器学习:模型泛化(L1、L2 和弹性网络)
一.岭回归和 LASSO 回归的推导过程 1)岭回归和LASSO回归都是解决模型训练过程中的过拟合问题 具体操作:在原始的损失函数后添加正则项,来尽量的减小模型学习到的 θ 的大小,使得模型的泛化能力 ...
- 【机器学习】正则化的线性回归 —— 岭回归与Lasso回归
注:正则化是用来防止过拟合的方法.在最开始学习机器学习的课程时,只是觉得这个方法就像某种魔法一样非常神奇的改变了模型的参数.但是一直也无法对其基本原理有一个透彻.直观的理解.直到最近再次接触到这个概念 ...
- 机器学习-正则化(岭回归、lasso)和前向逐步回归
机器学习-正则化(岭回归.lasso)和前向逐步回归 本文代码均来自于<机器学习实战> 这三种要处理的是同样的问题,也就是数据的特征数量大于样本数量的情况.这个时候会出现矩阵不可逆的情况, ...
- 机器学习之五 正则化的线性回归-岭回归与Lasso回归
机器学习之五 正则化的线性回归-岭回归与Lasso回归 注:正则化是用来防止过拟合的方法.在最开始学习机器学习的课程时,只是觉得这个方法就像某种魔法一样非常神奇的改变了模型的参数.但是一直也无法对其基 ...
- 多元线性回归模型的特征压缩:岭回归和Lasso回归
多元线性回归模型中,如果所有特征一起上,容易造成过拟合使测试数据误差方差过大:因此减少不必要的特征,简化模型是减小方差的一个重要步骤.除了直接对特征筛选,来也可以进行特征压缩,减少某些不重要的特征系数 ...
- 机器学习--Lasso回归和岭回归
之前我们介绍了多元线性回归的原理, 又通过一个案例对多元线性回归模型进一步了解, 其中谈到自变量之间存在高度相关, 容易产生多重共线性问题, 对于多重共线性问题的解决方法有: 删除自变量, 改变数据形 ...
随机推荐
- DBUtiles中的简单使用(QueryRunner和ResultSetHandler的手动实现)
DBUtiles是一个很好的处理JDBC的工具类.(DbUtils is a small set of classes designed to make working with JDBC easie ...
- maven创建web工程Spring配置文件找不到
使用maven创建web工程,将Spring配置文件applicationContext.xml放在src/resource下,用eclipse编译时提示class path resource [ap ...
- 在shell中使用sendmail发送邮件
cat > sendmymail.sh #!/bin/bash/usr/sbin/sendmail -t <<EOFFrom: Mail testing <abc@gmail. ...
- springboot - web项目
一:使用Thymeleaf:参考http://blog.csdn.net/u012702547/article/details/53784992#t0 1.1 引入相应的包 1.2 thymelea ...
- monkey参数应用
1.指定seed值 adb shell monkey -v -p package -s 100 100 2.touch事件(参数后都跟百分比) 3.设定动作百分比 4.轨迹球 5.基本导航事件 输入 ...
- How to use the ZooKeeper driver for ServiceGroup in OpenStack Nova
ServiceGroup APIs Nova会从ServiceGroup API 中查询节点的存活信息. ServiceGroup API 工作流程是: 当一个compute worker (runn ...
- ajax_基础
ajax 请求过程 1.准备发送请求 2.填写请求地址和数据 3.请请求到服务器 4.等待服务器处理数据. 5.接受服务器返回信息 --------------------------------- ...
- dp2--合并石子(一)
dp2--合并石子(一) 一.心得 二.题目 石子合并(一) 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 有N堆石子排成一排,每堆石子有一定的数量.现要将 ...
- UGUI加载图片优化方法之一:打包成图集
打包后的: 直接改变sprite中的packing tag,相同的packing tag就是同一张图集中的.改完运行会自动帮你打包
- Oracle删除步骤
1.Oracle卸载要求比较严格,不能简单的卸载就完事了:当然Oracle卸载也没有那么难,只是步骤比较多.Oracle10g还是Oracle11g卸载步骤都是一样的.下边详细介绍一下. 找到Orac ...