预测分析:R语言实现2.7 正则化

2.7 正则化


变量选择是一个重要的过程,因为它试图通过去除与输出无关的变量,让模型解释更简单、训练更容易,并且没有虚假的关联。这是处理过拟合问题的一种可能的方法。总体而言,我们并不期望一个模型能完全拟合训练数据。实际上,过拟合问题通常意味着,如果过分拟合训练数据,对我们在未知数据上的预测模型精确度反而是有害的。在关于正则化(regularization)的这一节,我们要学习一种减少变量数以处理过拟合的替代方法。正则化实质上是在训练程序中引入刻意的偏误或约束条件,以此防止系数取值过大的一个过程。因为这是一个尝试缩小系数的过程,所以我们要观察的这种方法也称为收缩方法(shrinkage method)。

2.7.1 岭回归

当参数的数量非常大的时候,尤其是和能获得的观测数据的数量相比很大时,线性回归往往会表现出非常高的方差。这也就是说,在一些观测数据中的微小变化会导致系数的显著变化。岭回归(ridge regression)是一种通过其约束条件引入偏误但能有效地减小模型的方差的方法。岭回归试图把残差平方和(RSS)加上系数的平方和乘以一个用希腊字母表示的常数构成的项(∑2)的累加和最小化。对于一个带有k个参数的模型(不包括常数项0)以及带有n条观测数据的数据集,岭回归会使下列数量最小化:

 

在这里,我们还是想把RSS最小化,但第二个项是惩罚项,当任何系数很大时它也会很大。因此,在最小化的时候,我们就会有效地把系数压缩到更小的值。参数被称为元参数(meta parameter),它是我们需要选择或调优的。一个非常大的值会掩盖RSS项并把系数压缩到0。过小的值对于过拟合就没什么效果,而一个等于0的参数则只是进行普通的线性回归。

当进行岭回归时,经常需要通过把所有特征值除以它们的方差来进行比例缩放。这对于普通线性回归不适用,因为如果某个特征用一个等于10的因子进行缩放,那么系数也会被一个等于1/10的因子进行缩放来补偿。在岭回归里,特征的缩放则是通过惩罚项来影响所有其他特征的计算的。

2.7.2 最小绝对值收缩和选择算子

最小绝对值收缩和选择算子(lasso)是岭回归的一种替代正则化方法。它们之间的差别只是体现在惩罚项里,它最小化的是系数的绝对值之和。

 

其实,惩罚项里的这个差别是非常显著的,由于lasso会把某些系数完全收缩到0,所以它兼具了收缩和选择的功能,而这对于岭回归是不具备的。即便如此,在这两种模型之间并没有明确的赢家。依赖于输入特征的某个子集的模型往往用lasso表现更好;很多不同变量的系数具有较大分散度的模型则往往在岭回归下有更好的表现。两者通常都是值得尝试的。

岭回归里的惩罚项经常被称为l2惩罚项,而lasso里的惩罚项被称为l1惩罚项。这是来自向量的范数(norm)的数学概念。向量的范数是一个函数,它会给该向量分配一个代表其长度或大小的正数。l1和l2范数都是一类被称为p范数(p-norm)的范数

中的范例,对于具有n个分量的向量v,p范数具有下面的一般形式:

2.7.3 在R语言里实现正则化

有很多不同的函数和扩展包都实现了岭回归,例如MASS包里的lm.ridge()函数和genridge包里的ridge()函数。对于lasso来说,也有lars包可用。在本章,我们会采用来自glmnet包的glmnet()函数,这是因为它具有一致且友好的接口。正则化处理的关键是确定采用一个适当的值。glmnet()函数采用的方法是利用一组不同的值,并针对每个值训练一个回归模型。然后,你既可以手工挑出一个值,也可以利用某个技术来估算最佳的值。我们可以通过lambda参数指定要尝试的值序列;否则,函数会采用默认的100个值的序列。给glmnet()函数的第一个参数必须是一个特征矩阵,它可以利用model.matrix()函数来构建。

第二个参数是一个带有输出变量的向量。最后,alpha参数是岭回归(参数取值为0)和lasso(参数取值为1)之间的切换开关。我们现在准备用二手车数据集来训练一些模型:

 

因为提供了250个值的序列,所以我们实际上训练了250个岭回归模型和另外250个lasso模型。可以对第100个模型来查看glmnet()函数产生的对象的lambda属性里的值,并对该对象调用coef()函数来获得对应的系数,如下所示:

 

也可以调用plot()函数来获得一个绘图,显示系数的值是如何随着值的对数变化而变化的。把岭回归和 lasso 的对应绘图并排显示是非常有帮助的:

 

这两幅图的关键差异在于,lasso会强制把很多系数减小到正好为0,而在岭回归里,系数往往是平滑地减小,只有当取极端值时才会全部一起变为0。这个规律可以进一步从两幅图的上部水平轴上的数值看出来,它显示的是当取不同值时非零系数的个数。从这个意义上说,lasso在两个方面具有明显优势:它经常可以用来进行特征选择(因为系数为0的特征实际上是不包含在模型中的),以及为了把过拟合问题最小化而进行正则化。我们可以通过改变赋予xvar参数的值来获得其他有用的绘图。它取值为norm时会在x轴绘制系数的l1范数,取值为dev时则会绘制该模型所解释的偏差(deviance)的百分比。我们会在下一章学习有关偏差的内容。

 

为了处理给找到一个合适值的问题,glmnet包提供了cv.glmnet()函数。它对训练数据运用了一种称为交叉验证(cross-validation)的技术(我们会在第5章中学习到它),从而找到能够最小化均方差(MSE)的合适的值。

 

如果我们绘制cv.glmnet()函数产生的结果,可以看到MSE是如何随着的不同取值而变化的:

 

每个点上下的竖条是为每个的绘制值而显示的MSE估计值上下的标准差的误差条。绘图还显示了两条垂直的虚线。第一条垂直线对应的是lambda.min的值,它是交叉验证提出的优化值。右侧的第二条垂直线是lambda.1se属性的值。它对应了距离lambda. min一个标准误(standard error)的值,并产生了一个更为正则化的模型。

在glmnet包里也有一个predict()函数,它现在可以在多种不同的背景下执行。例如,可以针对某个不在原始清单里的值求得模型的系数。例如,进行如下操作:

 

注意,貌似lasso在这个示例中并没有把任何系数强制为0,这说明根据MSE的情况,不建议去除二手车数据集里的任何系数。最后,我们可以再次调用predict()函数,通过newx参数为要进行预测的观测数据提供一个特征矩阵,从而用一个正则化的模型来作出预测:

 

在测试数据上,lasso模型的效果最好,且略好于普通模型,而不像岭回归在这个示例中的表现那么不理想。

时间: 2024-09-02 15:55:50

预测分析:R语言实现2.7 正则化的相关文章

R 语言 用途 与优势

(1)R 语言主要用来 对 数据进行统计分析 (2)R语言可以针对数据 进行绘图 其高级功能如下 R语言饼图图表R语言条形图(柱状图)R语言箱线图R语言柱状图R语言线型图R语言散点图R语言均值,中位数和模式R语言线性回归R语言多元回归R语言逻辑回归R语言正态分布R语言二项分布R语言泊松回归R语言协方差分析R语言时间序列分析R语言非线性最小二乘R语言决策树R语言随机森林R语言生存分析R语言卡方检验 绘图 R编程语言在数字分析与机器学习领域已经成为一款重要的工具.随着机器逐步成为愈发核心的数据生成器

预测分析:R语言实现.

数据科学与工程技术丛书 预测分析:R语言实现 Mastering Predictive Analytics with R [希] 鲁伊·米格尔·福特(Rui Miguel Forte) 著 吴今朝 译 图书在版编目(CIP)数据 预测分析:R语言实现/(希)鲁伊·米格尔·福特(Rui Miguel Forte)著:吴今朝译. -北京:机械工业出版社,2016.10 (数据科学与工程技术丛书) 书名原文:Mastering Predictive Analytics with R ISBN 978-

预测分析:R语言实现导读

前 言 预测分析以及更一般意义上的数据科学当前正处于被追捧的热潮中,因为像垃圾邮件过滤.单词补全和推荐引擎这样的预测性技术已经被广泛运用于日常生活.这些技术现在不仅越来越被我们所熟悉,还赢得了我们的信任.在计算机处理能力和软件方面(例如R语言及其大量专用的扩展包)的发展产生了这样的局面:用户经过培训就可以使用这些工具,而无需具备统计学的高级学位,也不需要使用公司或大学实验室专用的硬件.技术的成熟度和基础软硬件的可用性结合起来,让很多该领域的从业者倍感兴奋,他们感到可以为自己的领域和业务设计一些能

预测分析:R语言实现1.1 模型

1.1 模型 模型是预测分析学的核心,因此,本书一开始会讨论各种模型及其形式.简而言之,模型是我们要理解和分析的状态.流程或系统的一种表现形式.我们创建模型的目的是根据它得出推论以及(在本书中对我们更为重要的一点)对世界进行预测.模型的格式和风格有很多种,我们在本书中会探讨这种多样性中的一部分.模型可以是和我们能够观察或测量的数量值相关的一些方程,也可以是一套规则.我们大部分人在学校都熟悉的一个简单模型是牛顿第二运动定律.该定律表明,一个物体受到的合力会使之在合力作用的方向加速,加速度和合力大小

预测分析:R语言实现1.4 性能衡量指标

1.4 性能衡量指标 在上一节讨论预测建模过程的时候,我们讨论了利用训练集和测试集对被训练模型的性能进行评估的重要性.在本节,我们要审视在描述不同模型的预测精确度时常遇见的某些性能衡量指标.其实,根据问题的不同类型,会需要使用略有差异的性能评估方式.由于本书讨论的重点是有监督的模型,所以我们会审视如何评估回归模型和分类模型.对于分类模型,我们还会讨论二元分类任务这样一个非常重要且经常遇到各类问题的模型所采用的某些额外的衡量指标. 1.4.1 评估回归模型 在一个回归的场景里,让我们回顾一下,通过

预测分析:R语言实现1.3 预测建模的过程

1.3 预测建模的过程 通过观察模型的某些不同特征,我们已经对预测建模过程的各种步骤有所了解.在本节,我们要顺序讲解这些步骤,并理解每个步骤是如何对该任务的整体成功起作用的. 1.3.1 定义模型的目标 简而言之,每个项目的第一步是准确找出期望的结果是什么,因为这样有助于引导我们在项目的进展过程中做出正确的决定.在一个预测分析学项目里,这个问题包括深入研究我们要进行的预测的类型,以及从细节上去理解任务.例如,假定我们要尝试创建一个模型来预测某公司的雇员流失.我们首先需要准确定义这个任务,同时尽量

预测分析:R语言实现2.3 多元线性回归

2.3 多元线性回归 只要有多于一个输入特征,并且要构建一个线性回归模型,我们就处于多元线性回归的领域了.具有k个输入特征的多元线性回归模型的一般方程如下所示: y=kxk+k-1xk-1+-+1x1+0+ 关于模型和误差分量的假设还是和简单线性回归的一样,记住,因为现在有了超过1个的输入特征,我们假设它们是相互独立的.我们在讲解多元线性回归时不会再使用模拟数据,而是要分析两套实际环境下的数据集. 2.3.1 预测CPU性能 我们的第一个实际环境下的数据集由研究者Dennis F. Kibler

预测分析:R语言实现2.2 简单线性回归

2.2 简单线性回归 在着眼于某些真实环境的数据集之前,尝试在人造数据上训练模型是非常有帮助的.在这样的人造场景里,我们事先就知道了实际输出函数是什么,而这对于真实环境的数据来说通常是不成立的.进行这种练习的好处是,它会让我们对自己的模型在所有假设都完全成立的理想场景下的工作情况有清楚的了解,而且它有助于对具备理想的线性拟合时发生的情况进行可视化.我们先模拟一个简单线性回归模型.后面的R语言代码片段会为下面这个只有1个输入特征的线性模型创建一个带有100条模拟观测数据的数据框: y=1.67x1

预测分析:R语言实现2.6 特征选择

2.6 特征选择 我们的CPU模型只有6个特征.通常,我们遇到实际环境的数据集会具有来自多种不同观测数据的非常大量的特征.另外,我们会在不太确定哪些特征在影响输出变量方面比较重要的情况下,不得不采用大量的特征.除此之外,我们还有会遇到可能要分很多水平的分类变量,对它们我们只能创建大量的新指示变量,正如在第1章里所看到的那样.当面对的场景涉及大量特征时,我们经常会发现输出只依赖于它们的一个子集.给定k个输入特征,可以形成2k个不同的子集,因此即使对于中等数量的特征,子集的空间也会大到无法通过逐个子