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

2.6 特征选择

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

要理解为什么可能的特征子集会有2k个,一种简单的方式是这样的:我们可以给每个子集分配一个独立的识别码,这个识别码是k位的二进制数字构成的字符串,如果我们选择在该子集中包含第i个特征(特征可以任意排序),那么第i个位上的数字就是1。例如,如果我们有三个特征,字符串101就对应了只包括第一个和第三个特征的子集。在这种方式下,我们构建了所有可能的二进制字符串,它从由k个0构成的字符串一直排到由k个1构成的字符串,因此我们就得到了从0到2k-1的所有整数,也就是总计2k个子集。

特征选择(feature selection)指在模型中选择一个特征子集以构成一个带有更少特征的新模型的过程。它会去除我们认为和输出变量无关的特征,因而产生一个更易于训练和解释的更简单模型。有很多方法被设计用来进行这项任务,它们一般不会用穷举的方式去搜遍可能的子集空间,而是在该空间进行引导式搜索(guided search)。

这类方法之一是前向选择(forward selection),它是通过一系列步骤进行特征选择的逐步回归(stepwise regression)的一个范例。对于前向选择,它的思路是从一个没有选择特征的空模型起步,接着进行k次(针对每个特征进行一次)简单线性回归并从中选取最好的一个。这里比较的是有相同特征数量的模型,因此可以使用R2统计量来指导我们的选择,虽然我们也可以使用AIC之类的衡量指标。一旦选择了要加入的第一个特征,我们就可以从余下的k-1个特征中选取要加入的另一个特征。因此,现在我们可以针对每个可能的特征配对进行k-1次多元回归,配对中的其中一个特征是在第一步选择的那个特征。我们可以继续按这种方式增加特征,直到我们评价了包含所有特征的模型并结束这个过程。注意,在每一个步骤里,我们都为所有后续的步骤作出了把哪个特征包含进来的艰难选择。例如,在多于一个特征的模型当中,没有包含我们在第一步选择的那个特征的那些模型就永远不需要考虑了。因此,我们并不是穷举式地搜索我们的空间。实际上,如果考虑到我们还评估了空模型,我们就可以计算进行了线性回归的模型总数为:

 

这个计算结果的数量级是在k2的量级上,即使对于比较小的k值而言,也已经明显比2k小多了。在前向选择过程的最后阶段,我们必须从对应每个步骤结束时得到的子集所构成的k+1个模型中进行选择。由于过程的这个最终部分要比较带有不同数量特征的模型,我们通常会使用诸如AIC的准则或调整后的R2来作出模型的最终选择。对于CPU数据集,可以通过运行下列命令来演示这个过程:

 

step()函数实现了前向选择的过程。我们首先给它提供了通过在训练数据上拟合无特征的线性模型而得到的空模型。对于scope参数,我们指定的是要求算法从空模型开始一直逐步处理到包含所有6个特征的完整模型。在R语言里发出这条命令会产生一个输出,它会显示迭代每一步指定了哪个特征子集。为了节省空间,我们在下表呈现这个结果以及每个模型的AIC值。注意,AIC值越小,模型就越好。

步骤 子集里含有的特征 AIC值

0 { } 1839.13

1 {MMAX} 1583.38

2 {MMAX, CACH} 1547.21

3 {MMAX, CACH, MMIN} 1522.06

4 {MMAX, CACH, MMIN, CHMAX} 1484.14

5 {MMAX, CACH, MMIN, CHMAX, MYCT} 1478.36

 

step()函数对前向选择采用了一种替代性的规格,它会在任何一个剩余的特征加入当前特征子集都无法改善总体评分的情况下终止。对于数据集而言,只有一个特征会从最终模型中排除,因为把它加入进来并没有提高总体评分。既有趣又令人放心的是,这个被排除的特征就是CHMIN,它也是唯一具有相对较高p值的变量,说明在有其他特征存在的情况下我们无法确信输出变量和这个特征是相关的。

有人可能会想知道是否可以从相反方向进行变量选择,也就是从一个完整的模型开始,根据去除哪个特征会给模型评分带来最大的改善来逐个去除特征。这样实际上是可以的,这样的过程被称为后向选择(backward selection)或后向淘汰(backward elimination)。在R语言里的做法是利用step()函数,指定direction参数为backward并从完整模型开始。可以用二手车数据集来演示这个过程,并把结果保存到一个新的二手车模型里:

 

在二手车数据集上得到的最终线性回归模型的公式如下:

 

正如我们所见,最终的模型丢弃了Cruise、Sound和Chevy特征。观察我们之前的模型摘要,我们可以看到,这三个特征都具有较高的p值。前面的两种方法是一种贪心算法(greedy algorithm)的示例。这也就是说,一旦作出了是否包含某个变量的选择,它就是最终决定,之后也不能撤销了。为了对它进行弥补,就有了第三种变量选择的方法,它称为混合选择(mixed selection)或双向淘汰(bidirectional elimination),它一开始会表现为前向选择方法,采用的是增加变量的前向步骤,但是在能够改善AIC的情况下也可以包含后向的步骤。不出所料,step()函数在direction参数被指定为both时就是这样做的。

既然有了两个新模型,我们就可以观察它们在测试集上的表现:

 

对于CPU模型,我们在测试数据集上的表现比初始模型略有改善。合适的下一步的工作可以是探索这个缩减后的特征集是否和去除离群值配合起来效果更好,这个问题留给读者作为练习。相比之下,对于二手车模型,作为去除所有这些特征的结果,我们看到测试MSE略有增加。

时间: 2024-09-23 03:57:01

预测分析:R语言实现2.6 特征选择的相关文章

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.3 预测建模的过程

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

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

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

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

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

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

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

预测分析: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