最近在自学图灵教材《Python机器学习基础教程》,在csdn以博客的形式做些笔记。

对于回归问题,线性模型预测的一般公式如下:

ŷ = w[0] * x[0] + w[1] * x[1] + … + w[p] * x[p] + b

这里 x[0] 到 x[p] 表示单个数据点的特征(本例中特征个数为 p+1),w 和 b 是学习模型的 参数,ŷ 是模型的预测结果。

岭回归

岭回归也是一种用于回归的线性模型,因此它的预测公式与普通最小二乘法相同。但在岭 回归中,对系数(w)的选择不仅要在训练数据上得到好的预测结果,而且还要拟合附加约束。我们还希望系数尽量小。换句话说,w 的所有元素都应接近于0。直观上来看,这意味着每个特征对输出的影响应尽可能小(即斜率很小),同时仍给出很好的预测结果。 这种约束是所谓正则化(regularization)的一个例子。正则化是指对模型做显式约束,以避免过拟合。岭回归用到的这种被称为 L2 正则化。(摘自书中)

接下来让我们看看岭回归在波士顿房价(书中给的数据集,506 个样本和 105 个导出特征)上的预测效果(如果要用该数据集,请先导入mglearn库)

from sklearn.linear_model import Ridge
X, y = mglearn.datasets.load_extended_boston()
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)
ridge = Ridge().fit(X_train, y_train)
print("Training set score: {:.2f}".format(ridge.score(X_train, y_train)))
print("Test set score: {:.2f}".format(ridge.score(X_test, y_test)))

对比我们的线性回归模型(见上篇文章)

岭回归在训练集上的分数要低于线性回归,但在测试集上的分数更高。由于林回归的约束性更强,因此不容易出现过拟合;复杂度更小的模型意味着在训练集上的性能更差,但泛化性能更好。由于我们只对泛化性能感兴趣,所以应该选择岭回归模型而不是线性回归模型。

alpha 参数:岭回归具有参数alpha;作用是为了调节简单性(系数w都接近于 0)和训练 集性能二者对于模型的重要程度,如果不设置则默认alpha=1.0(如上述代码);alpha具体为多少取决于数据,在此不做讨论。增大 alpha 会使得系数更加趋向于 0,从而降低训练集性能, 但可能会提高泛化性能;减小 alpha 可以让系数受到的限制更小。

接下来我们来通过固定 alpha 值,但改变训练数据量来理解岭回归的正则化:

对波士顿房价数据集做二次抽样,并在数据量逐渐增加的子数据集上分 别对 LinearRegression 和 Ridge(alpha=1) 两个模型进行评估(将模型性能作为数据集大小 的函数进行绘图,这样的图像叫作学习曲线):

由于岭回归是正则化的,因此它的训练集分数要整体低于线性回归的训练集分数。但岭回归的测试分数要更高,特别是对较小的子数据集。如果少于 400 个数据点,线性回归学不到任何内容。随着模型可用的数据越来越多,两个模型的性能都在提升,最终线性回归的性能追上了岭回归。这里要记住的是,如果有足够多的训练数据,正则化变得不那么重要,并且岭回归和线性回归将具有相同的性能。

lasso回归

与岭回归相同,使用 lasso 也是约束系数使其接近于 0,但用到的方法不同,叫作 L1 正则化。L1 正则化的结果是,使用 lasso 时 某些系数刚好为 0。这说明某些特征被模型完全忽略。这可以看作是一种自动化的特征选择。某些系数刚好为 0,这样模型更容易解释,也可以呈现模型最重要的特征。

我们继续将lasso回归呈现于波士顿房价的数据集上

from sklearn.linear_model import Lasso
lasso = Lasso().fit(X_train, y_train)
print("Training set score: {:.2f}".format(lasso.score(X_train, y_train)))
print("Test set score: {:.2f}".format(lasso.score(X_test, y_test)))
print("Number of features used: {}".format(np.sum(lasso.coef_ != 0)))

可以发现,lasso回归的分数无论是在测试集还是训练集上都非常的差;这说明存在欠拟合,通过最后一行代码我们可以知道模型只用到了105个特征中的 4 个。与 岭回归类似,Lasso 也有一个正则化参数 alpha,可以控 制系数趋向于 0 的强度。在上一个例子中,我们用的是默认值 alpha=1.0。为了降低欠拟合,我们尝试减小 alpha。这么做的同时,我们还需要增加 max_iter 的值(运行迭代的最大次数)

lasso001 = Lasso(alpha=0.01, max_iter=100000).fit(X_train, y_train)
print("Training set score: {:.2f}".format(lasso001.score(X_train, y_train)))
print("Test set score: {:.2f}".format(lasso001.score(X_test, y_test)))
print("Number of features used: {}".format(np.sum(lasso001.coef_ != 0)))

alpha 值变小,我们可以拟合一个更复杂的模型,在训练集和测试集上的表现也更好。模 型性能比使用 Ridge 时略好一点,而且我们只用到了 105 个特征中的 33 个。这样模型可能 更容易理解。 但如果把 alpha 设得太小,那么就会消除正则化的效果,并出现过拟合:

lasso002 = Lasso(alpha=0.0001, max_iter=100000).fit(X_train, y_train)
print("Training set score: {:.2f}".format(lasso002.score(X_train, y_train)))
print("Test set score: {:.2f}".format(lasso002.score(X_test, y_test)))
print("Number of features used: {}".format(np.sum(lasso002.coef_ != 0)))

总结

在实践中,在两个模型中一般首选岭回归。但如果特征很多,你认为只有其中几个是重要 的,那么选择 Lasso 可能更好。同样,如果你想要一个容易解释的模型,Lasso 可以给出 更容易理解的模型,因为它只选择了一部分输入特征。

岭回归(Ridge)和Lasso 回归(笔记)相关推荐

  1. 【读书笔记】数据出现多重共线性情况:岭回归,lasso回归,适应性lasso回归,偏最小二乘回归

    # 2.2.3 数据出现多重共线性情况:岭回归,lasso回归,适应性lasso回归,偏最小二乘回归 # 有一些关于多重共线性的度量,其中之一是容忍度(tolerance)或(等价的)方差膨胀因子(v ...

  2. 岭回归(ridge回归)、lasso回归、ElasticNet回归

    作者:离散梦 欢迎大家给出宝贵的建议! 岭回归(ridge回归).lasso回归.ElasticNet回归 为了防止过拟合的现象出现,引入以上优化方法.(正则化) 岭回归就是引入L2正则化项 lass ...

  3. 岭回归和lasso回归_正则化(2):与岭回归相似的 Lasso 回归

    Lasso回归与ridge回归有很多相似之处,但是二者之间有一些显著的区别.如果你不太清楚岭回归,请参考前一章节推文:通俗易懂的岭回归. 1 lasso回归 与 ridge 回归的相同点 1.1 la ...

  4. Ridge和Lasso回归代码实现--Tensorflow部分

    Ridge和Lasso回归代码实现–Tensorflow部分–潘登同学的机器学习笔记 python版本–3.6 ; Tensorflow版本–1.15.0 ;编辑器–Pycharm 文章目录 Ridg ...

  5. R语言(三)——多重共线性情况(岭回归、[适应性]lasso回归、偏最小二乘回归)

    目录 一.数据 二.共线性检查 三.岭回归 四.lasso回归 五.适应性lasso回归 六.偏最小二乘回归 一.数据 糖尿病数据(diabetes.csv)包含在R程序包的lars中,是关于糖尿病的 ...

  6. Ridge和Lasso回归

    上周看了看回归方面的知识,顺便复(xue)习一下Ridge(岭回归)和Lasso回归(套索回归).瞅到了一篇英文博客讲得不错,翻译一下 本文翻译自 Ridge and Lasso Regression ...

  7. 机器学习概念总结笔记(一)——机器学习算法分类、最小二乘回归、岭回归、LASSO回归

    原文:https://cloud.tencent.com/community/article/137341 机器学习概念总结 1,机器学习算法分类 1)监督学习: 有train set,train s ...

  8. 基于Python的岭回归与LASSO回归模型介绍及实践

    基于Python的岭回归与LASSO回归模型介绍及实践 这是一篇学习的总结笔记 参考自<从零开始学数据分析与挖掘> [中]刘顺祥 著 完整代码及实践所用数据集等资料放置于:Github 岭 ...

  9. 线性回归与岭回归以及LASSO回归结果比较

    文章目录 多重共线性检验 线性回归(linear regression) 岭回归(ridge regression) LASSO回归 综合比较 为了能够比较直观地了解到三种回归方法的区别,本文基于李子 ...

  10. [机器学习-原理篇]学习之线性回归、岭回归、Lasso回归

    线性回归.岭回归.Lasso回归 前言 一,线性回归--最小二乘 二,Lasso回归 三,岭回归 四, Lasso回归和岭回归的同和异 五, 为什么 lasso 更容易使部分权重变为 0 而 ridg ...

最新文章

  1. PYTHON1.day01
  2. .NET Core 构建跨平台的桌面应用
  3. Bash shell - 2
  4. 获取WPF的DataGrid控件中,是否存在没有通过错误验证的Cell
  5. 字符串编辑距离(转载)
  6. 计算机图形学是指使用计算机通过,【填空题】计算机图形学是指使用计算机通过()在显示设备上构造出图形来。...
  7. Angular5--viewChild/viewChildren、contentChild/contentChildren使用规则小结
  8. echarts社区网址
  9. C-COT目标跟踪-----连续卷积算子
  10. 图片鉴黄的原理和应用
  11. 【虚拟机数据恢复】VMware ESX SERVER数据恢复案例
  12. 基于AR眼镜有哪类功能可实现?
  13. C++面向对象程序设计(侯捷)笔记
  14. HDU - 6070 Dirt Ratio (二分 + 线段树)
  15. [洛谷P3975][TJOI2015]弦论
  16. JAVA性能优化,从此不再重启tomcat服务
  17. latex 公式换行、对齐
  18. 【算法leetcode每日一练】266. 访问所有点的最小时间
  19. 处理器与安装内存显示不可用
  20. 第十三届蓝桥杯JavaB组国赛H题——修路 (AC)

热门文章

  1. UI福利包——160多个android开源代码汇总
  2. 3C低头族 小心飞蚊症找上你
  3. 搭建NTP时间同步服务器
  4. redis map 过期时间_redis 过期时间
  5. 美国散户从90降到6他们是如何被消灭的
  6. 在C++中,函数名前的const和函数名后的const的区别
  7. Rake Tutorial
  8. 5G PDCCH时频资源之CORESET概要
  9. 计算机课程教研教改课题,(学校教研教改课题一览表.doc
  10. 使用TortoiseGit导出GIT分支差异文件