点击上方“蓝字”带你去看小星星

模型选择,是指利用统计方法,从众多自变量中,选择显著的、最能解释因变量变化的那一部分自变量参与建模。在统计建模中,模型选择是重要的也是核心的步骤之一。

模型选择方法通常可分为三类:一是传统的子集选择法(subset selection),包括最优子集法(best subset)和逐步选择法(stepwise);二是基于压缩估计(shrinkage estimation)的模型选择方法,又称为正则化(regularization)方法;三是降维法(dimension reduction),最典型的降维法是主成分分析法(principal component analysis)。前两类方法在本质上是一致的,都是从原始变量集合中选择一个合理的子集来达到降维的目的,只不过子集选择法是将选择和判别分开,每一个子集便是一个选择,最后通过相应的判别准则来决定选择哪一个最佳的子集;而正则化方法则是将选择和判别融为一个过程,在全变量的目标函数中加入惩罚约束,以达到系数估计和模型选择的一个权衡;降维法与前两类方法的不同之处在于,它不是直接使用原始变量,而是对原始变量进行投影转换为新的综合变量,通过选取少数的综合变量就可以解释原始变量的大部分信息。

本章将主要介绍前两类模型选择方法,降维法将在第12章中进行介绍。

8.1 问题的提出

银行在审核客户的信用卡申请资料时,由于填入的信息繁多而全面,往往有个人信息如性别,年龄,学历,职业,婚姻状况,家庭成员数等等,又有经济状况如个人月年收入,基本生活支出,服务业支出,教育支出等,同时还可能出现诸如已有信用卡数量,信用不良记录等历史信用信息,因此若建立一个包含所有指标的Logistic模型预测客户是否有违约风险,那么模型的自变量维度将很大,待估参数非常多。而且这其中不乏对分类影响十分微小的变量,将其加入模型并不会带来显著的预测效果。此外,指标之间共线性问题也常常存在,例如收入和支出,可能存在一定的正相关关系,对于这些高度相关的指标,是否只需选择其中的代表进入模型即可?如何更加有效地解决这些问题?

8.2 子集选择法

子集选择法是通过从个预测变量中挑选出与因变量相关的变量形成子集,再用缩减后的变量集合来拟合模型。常见的子集选择法有最优子集法和逐步选择法。

8.2.1 最优子集法

最优子集法运用了穷举的思想,对个预测变量的所有可能组合逐一进行拟合,找到最优的模型,这个过程可以概括为算法8.1。

算法8.1 最优子集法

1.记不含预测变量的零模型为

2.对

(a)拟合个包含个预测变量的模型;

(b)在上述个模型中,选择RSS最小或最大的模型作为最优模型,记为

3.对于得到的个模型,进一步根据交叉验证法、、AIC、BIC或调整的选出一个最优模型,即为最后得到的最优模型。

在算法8.1中,我们总共需要拟合个模型,另外需要注意的是,在步骤2中,对变量个数相同的模型我们是根据RSS或来选择最优模型,而在步骤3中,对变量个数不同的模型我们需要用交叉验证法、AIC、BIC或调整的来选择最优模型。这样做的原因将在8.2.3节中解释。

最优子集法的优点是思想简单,而且肯定能找到最优模型。但是它的可操作性不强,原因在于计算量太大,随着自变量的增加计算量成指数级增长,比如自变量仅仅为10个时,备选模型就达到了个。所以说该方法过于贪婪,在实际中的应用并不多。

8.2.2 逐步选择法

最优子集法的计算效率较低,不适用于维数很大的情况。除此之外,最优子集法还存在的一个问题是,当搜索空间增大时,通过此法得到的模型虽然能很好地拟合训练数据,但往往对新数据的预测效果并不理想,即会存在过拟合和系数估计方差高的问题。接下来要介绍的逐步选择法则限制了搜索空间,大大减少了搜索计算量。

(一)向前逐步选择

向前逐步选择法是以一个不包含任何预测变量的零模型为起点,依次往模型中添加变量,每次只将能够最大限度地提升模型效果的变量加入模型中,直到所有的预测变量都包含在模型中。详见算法8.2。

算法8.2 向前逐步选择法

1.记不含预测变量的零模型为。2.对:(a)拟合个模型,每个模型都是在的基础上只增加一个变量;(b)在上述个模型中,选择RSS最小或最大的模型作为最优模型,记为。3.对于得到的个模型,进一步根据交叉验证法、、AIC、BIC或调整的选出一个最优模型,即为最后得到的最优模型。

向前逐步选择法需要拟合的模型个数为,所以当较大时,它与最优子集法相比较,在运算效率上具有很大的优势。不过,向前逐步选择法存在的一个问题是,它无法保证找到的模型是个模型中最优的。例如,给定包含三个变量的数据集,其中,最优的单变量模型是只包含的模型 ,最优的双变量模型是包含的模型,则对于该数据集,通过向前逐步选择法是无法找到最优的双变量模型的,因为包含了,故只能包含和另一个变量,即,如表8-1所示。

表8-1 向前逐步法和最优子集法结果比较

(二)向后逐步选择

向后逐步选择法从含有所有变量的模型开始,依次剔除不显著的变量。详见算法8.3。

算法8.3 向后逐步选择法

1.记包含全部个预测变量的全模型为

2.对

(a)拟合个模型,每个模型都是在的基础上只减少一个变量;

(b)在上述个模型中,选择RSS最小或最大的模型作为最优模型,记为

3.对于得到的个模型,进一步根据交叉验证法、、AIC、BIC或调整的选出一个最优模型,即为最后得到的最优模型。

与向前逐步选择法类似,向后逐步选择法需要拟合的模型个数同样为,大大少于最优子集法,并且向后逐步选择法也无法保证找到的模型是个模型中最优的。

不过,向后选择方法还需要满足的条件,这样才能保证全模型是可以拟合的,而向前逐步选择法则不需要这个条件限制。因此,当非常大时,应选择向前逐步选择法。

(三)向前向后选择法

还有一种将向前逐步选择法和向后逐步选择法相结合的方法。该方法也是逐次将变量加入模型中,不同的是,在引入新变量的同时,也剔除不能提升模型拟合效果的变量。这种方法在试图达到最优子集法效果的同时也保留了向前和向后逐步选择法在计算上的优势。

8.2.3 模型选择

在算法8.1~8.3中,步骤2和3都需要选择最优模型,其中传统的RSS和可以用于步骤2中对具有相同变量个数的模型进行选择,但不适用于步骤3中对变量个数不同的模型进行选择。这是由于随着模型中变量数的增加,RSS会不断减小,会不断增大,所以包含所有预测变量的模型总能具有最小的RSS和最大的,因为它们只与训练误差有关。而实际中,我们希望找到的测试误差小的模型,即泛化能力好的模型。所以,对于包含不同变量数的模型评价就不能用RSS和。一种方法是对于训练误差进行适当调整,间接估计测试误差,比如、AIC、BIC和调整的(adjusted);另一种方法就是第7章介绍的交叉验证法,直接估计测试误差。

(1)

若采用最小二乘法拟合一个包含个预测变量的模型,则的值为:

其中,是各个因变量观测误差的方差的估计值。通常而言,测试误差较低的模型其取值也更小,因而在模型选择时,应选择取值最小的模型。

(2)AIC

AIC准则适用于许多使用极大似然法进行拟合的模型,它的一般公式为:

其中,等号右边第一项为负对数似然函数,第二项是对模型参数个数(模型复杂度)的惩罚。实际应用中,我们也应选取AIC取值最小的模型。

另外,对于标准的线性回归模型而言,极大似然估计和最小二乘估计是等价的,此时,模型的AIC值为:

可以看出,对于最小二乘而言,和AIC是成比例的。

(3)BIC

BIC准则是从贝叶斯的角度推导出来的,与AIC准则相似,都是用于最大化似然函数的拟合。对于包含个预测变量的模型,BIC的一般公式为:

可以看出BIC与AIC非常相似,只是把AIC中的2换成了。所以,当时,BIC对复杂模型的惩罚更大,故更倾向于选取简单的模型。同样类似于,测试误差较低的模型BIC的取值也较低,故通常选择具有最低BIC值的模型最为最优模型。并且对于最小二乘估计,BIC可写成:

(4)调整的

对于包含个变量的最小二乘估计,其调整的可由下式计算得到:

调整的

其中是因变量的总平方和。

与前面介绍的三个准则不同,调整的越大,模型的测试误差越低。其中,随着模型包含的变量个数的增大,RSS逐渐减小,不过可能增大也可能减小,故不存在随着模型包含的变量个数越多,调整的就越大的问题。

8.3  基于压缩估计的逐个变量选择

传统的子集选择法虽然思想十分简单,但是存在许多缺陷。首先,子集选择法是一个离散而不稳定的过程,模型选择会因数据集的微小变化而变化;其次,模型选择和参数估计分两步进行,后续的参数估计没有考虑模型选择产生的偏误,从而会低估实际方差;最后,子集选择法的计算量相对比较大。

一种改进方法就是基于惩罚函数(penalty function)的压缩估计法, 其思想是通过惩罚函数约束模型的回归系数,同步实现变量选择和系数估计,模型估计是一个连续的过程,因而稳健性高。惩罚函数法根据变量间的结构,主要分为三类,分别是逐个变量选择(individual variable selection),整组变量选择(group variable selection)和双层变量选择(bi-level variable selection)。

惩罚函数法和最小二乘法或者最大似然估计类似,也是求解优化问题。假设自变量为,因变量记为,回归系数记为,截距项为。目标函数的一般形式为

         (8.1)

其中是损失函数,不同模型的损失函数形式不同,通常有最小二乘函数、似然函数的负向变换。其中,线性回归模型的损失函数常用最小二乘函数,即

        (8.2)

而对于Logistic回归,它的损失函数为极大似然函数的负向变换,比如

(8.3)

其中为Logistic回归的极大似然函数,

式(8.1)第二部分叫惩罚函数,是惩罚变量选择方法的核心部分。该函数是关于都递增的非负函数, ()为调整参数(tuning parameter)。平衡式(8.1)两部分的值数,越大,目标函数(8.1)中第二部分所占比重越高,这样不利于总体达到最小,因此必须压缩的值以降低所占比重,实现总目标函数最小化。由此可知当大到一定程度时,回归系数可能被压缩为0,就出现了变量选择的结果。而当接近0时,惩罚函数所占比例很小,估计值会接近于损失函数的最小解(比如MLE或者OLS)。因此,的选择是非常重要的,通过选择合适的值,得到最优解并实现变量选择。如何选择最优的我们将在8.3.4小节中详细介绍。惩罚函数的形式很多,我们主要介绍三种最常用的方法,分别为LASSO、SCAD和MCP。

8.4  R语言实现

接下来,我们将介绍前文提到的方法R语言的实现。在8.6.1节当中,我们使用ISLR包中的College(大学)数据集介绍子集选择法的R语言实现,在8.6.2~8.6.4节的正则化方法部分,我们将对每一种方法都分为线性回归和Logistic回归两种情形进行介绍。

8.4.1 子集选择法

首先载入数据,将College数据集中的Apps(申请人数)作为因变量,其他变量作为预测。

> library ( ISLR )> data ( College )> names ( College ) [1] "Private"  "Apps"  "Accept"  "Enroll"  "Top10perc"  "Top25perc"  

"F.Undergrad"  [8] "P.Undergrad"  "Outstate"  "Room.Board"  "Books"  "Personal"  "PhD"  

"Terminal"[15] "S.F.Ratio"  "perc.alumni"  "Expend"  "Grad.Rate"  > dim ( College )[1] 777  18

(一)最优子集法

R语言的leaps包中的regsubset()函数可以用于实现最优预测变量子集的筛选。regsubset()函数的语法与lm()类似,也同样可以用summary()查看模型输出的相关信息。

> library ( leaps )> subset.full > summary ( subset.full )Subset selection objectCall: regsubsets.formula ( Apps ~ . , College )17 Variables  (and intercept)# 限于篇幅,此处省略1 subsets of each size up to 8Selection Algorithm: exhaustive         PrivateYes Accept Enroll Top10perc Top25perc F.Undergrad P.Undergrad 

Outstate1  ( 1 ) " "        "*"    " "    " "       " "       " "         " "         " " 

2  ( 1 ) " "        "*"    " "    "*"       " "       " "         " "         " " 

3  ( 1 ) " "        "*"    " "    "*"       " "       " "         " "         " " 

4  ( 1 ) " "        "*"    " "    "*"       " "       " "         " "         "*" 

5  ( 1 ) " "        "*"    "*"    "*"       " "       " "         " "         "*" 

6  ( 1 ) " "        "*"    "*"    "*"       " "       " "         " "         "*" 

7  ( 1 ) " "        "*"    "*"    "*"       "*"       " "         " "         "*" 

8  ( 1 ) "*"        "*"    "*"    "*"       " "       " "         " "         "*" 

         Room.Board Books Personal PhD Terminal S.F.Ratio perc.alumni Expend 

Grad.Rate1  ( 1 ) " "        " "   " "      " " " "      " "       " "         " "    " "  

2  ( 1 ) " "        " "   " "      " " " "      " "       " "         " "    " "  

3  ( 1 ) " "        " "   " "      " " " "      " "       " "         "*"    " "  

4  ( 1 ) " "        " "   " "      " " " "      " "       " "         "*"    " "  

5  ( 1 ) " "        " "   " "      " " " "      " "       " "         "*"    " "  

6  ( 1 ) "*"        " "   " "      " " " "      " "       " "         "*"    " "  

7  ( 1 ) "*"        " "   " "      " " " "      " "       " "         "*"    " "  

8  ( 1 ) "*"        " "   " "      "*" " "      " "       " "         "*"    " "  

输出结果中的“*”表示列对应的变量包含于行对应的模型当中。例如,在上述输出结果中,最优的两变量模型是仅包含Accept和Top10perc两个变量的模型。regsubsets()函数默认只输出截至最优八变量模型的筛选结果,若想要改变输出的预测变量个数,可通过函数中的参数nvmax来进行更改。例如,我们想要输出截至最优17个变量的模型:

> subset.full 17 )> full.summary 

另外,summary()函数还返回了相应模型的、RSS、调整的、BIC等指标。我们可以通过比较这些统计指标来筛选出整体上最优的模型。例如,当模型中只含一个变量时约为89.0%,当模型中包含所有变量时增大到92.9%。从这里就可以看出,随着模型中引入变量个数的增多是逐渐递增的。

> names ( full.summary )[1] "which"  "rsq"  "rss"  "adjr2"  "cp"  "bic"  "outmat"  "obj"   > full.summary $ rsq [1] 0.8900990 0.9157839 0.9183356 0.9212640 0.9237599 0.9247464 0.9257649 [8] 0.9268725 0.9276780 0.9283103 0.9288011 0.9289945 0.9291223 0.9291632[15] 0.9291878 0.9291885 0.9291887

我们还可以画出一些图像来帮助我们选择最优的模型。which.min()和which.max()函数用于识别一个向量中最大值和最小值对应点的位置,points()用于将某个点加在已有图像上。

> par ( mfrow = c ( 1 , 3 ) )# CP> which.min ( full.summary $ cp )[1] 12> plot ( full.summary $ cp , xlab = "Number of Variables" , ylab = "CP" , type = 

"b" )> points ( 12 , full.summary $ cp [ 12 ] , col = "red" , cex = 2 , pch = 20 )# BIC> which.min ( full.summary $ bic )[1] 10> plot ( full.summary $ bic , xlab = "Number of Variables" , ylab = "BIC" , type 

= "b" )> points ( 10 , full.summary $ bic [ 10 ] , col = "red" , cex = 2 , pch = 20 )# Adjust Rsq> which.max ( full.summary $ adjr2 )[1] 13> plot ( full.summary $ adjr2 , xlab = "Number of Variables" , ylab = "Adjusted RSq" , type = "b" )> points ( 13 , full.summary $ adjr2 [ 13 ] , col = "red" , cex = 2 , pch = 20 )

图8-4 模型选取的变量个数与不同统计指标的关系

还可以用coef()提取该模型的参数估计值,例如,要提取含有10个变量的最优模型。

> coef ( subset.full , 10 )  (Intercept)      PrivateYes     Accept     Enroll     Top10perc    Top25perc -100.51668243  -575.07060789  1.58421887  -0.56220848  49.13908916  -13.86531103    Outstate     Room.Board     PhD      Expend      Grad.Rate   -0.09466457  0.16373674  -10.01608705  0.07273776  7.33268904 

(二)向前逐步选择法和向后逐步选择法

向前逐步选择法和向后逐步选择法也可以通过regsubsets()函数来实现,只需要设置参数为method = "forward"或method = "backward"。

# 向前逐步选择法> subset.fwd 17 , method = "forward" 

)> summary ( subset.fwd )# 限于篇幅,此处省略# 向后逐步选择法> subset.bwd 17 , method = 

"backward" )> summary ( subset.bwd )# 限于篇幅,此处省略

对这个数据集而言,使用最优子集法和向前逐步选择法选择的最优单变量模型到最优六变量模型的结果是完全一致的,但是从最优七变量模型开始,三种方法所得的结果就是完全不一样的了。

基于压缩估计模型选择方法等更多内容请见《数据科学》一书!

注:由于微信排版限制,部分公式未对齐,书籍中均正常。

▼往期精彩回顾▼第1讲:数据科学导论第2讲:R语言数据读写第3讲:数据清洗与预处理第4讲:数据可视化第5讲:线性回归第6讲:线性分类第7讲:重抽样

作者简介

方匡南,厦门大学经济学院教授、博士生导师、耶鲁大学博士后、厦门大学数据挖掘研究中心副主任。入选国家“万人计划”青年拔尖人才,国际统计学会推选会士(ISI Elected member),全国工业统计学会常务理事、数据科学与商业智能学会常务理事,中国青年统计学家协会常务理事等。主要研究方向为 数据科学,机器学习,应用统计。先后与华为、华星光电、厦门国际银行、南方电网、普益标准、北京诺信创联等众多企业有联合研究,先后为联通、华星光电、建设银行、农业银行、国元集团等众多企业提供培训。

欢迎选购作者新作《数据科学》

了解更多详情

﹏﹏﹏﹏

京东自营

当当自营

运用高斯核模型进行最小二乘回归_数据科学 | 第8讲:模型选择与正则化相关推荐

  1. 运用高斯核模型进行最小二乘回归_比特币价格与时间存在关系?一文读懂比特币价值的对数增长模型...

    免责声明:本文旨在传递更多市场信息,不构成任何投资建议.文章仅代表作者观点,不代表火星财经官方立场. 小编:记得关注哦

  2. R 多变量数据预处理_数据科学 | 第3讲 数据清洗与预处理

    点击上方蓝字,记得关注我们! 在实际数据挖掘过程中,我们拿到的初始数据,往往存在缺失值.重复值.异常值或者错误值,通常这类数据被称为"脏数据",需要对其进行清洗.另外有时数据的原始 ...

  3. 基于岭回归的数据增强与深度学习模型

    作者:禅与计算机程序设计艺术 <基于岭回归的数据增强与深度学习模型>技术博客文章 <基于岭回归的数据增强与深度学习模型> 引言 随着深度学习技术的快速发展,模型压缩.数据增强成 ...

  4. 大数据谈论热点有_数据科学推文分析–人们在谈论什么工具?

    大数据谈论热点有 By Chris Musselle PhD, Mango UK 克里斯·穆塞尔(Chris Musselle)博士,英国芒果 At ­Mango we use a variety o ...

  5. python 最小二乘回归 高斯核_数据科学中最简单也最重要的算法:线性回归

    全文共1794字,预计学习时长15分钟 线性回归是数据科学中最简单也是最重要的算法.无论面试的工作领域是数据科学.数据分析.机器学习或者是量化研究,都有可能会遇到涉及线性回归的具体问题.要想熟练掌握线 ...

  6. 机器学习结合大数据面试_数据科学面试机器学习

    机器学习结合大数据面试 总览 (Overview) This post will provide a technical guide on machine learning theory within ...

  7. 大数据平台蓝图_数据科学面试蓝图

    大数据平台蓝图 1.组织是关键 (1. Organisation is Key) I've interviewed at Google (and DeepMind), Uber, Facebook, ...

  8. netflix 数据科学家_数据科学和机器学习在Netflix中的应用

    netflix 数据科学家 数据科学 , 机器学习 , 技术 (Data Science, Machine Learning, Technology) Using data science, Netf ...

  9. 无法从套接字中获取更多数据_数据科学中应引起更多关注的一个组成部分

    无法从套接字中获取更多数据 介绍 (Introduction) Data science, machine learning, artificial intelligence, those terms ...

最新文章

  1. 为什么我们批评C++?又爱又恨的垃圾回收机制
  2. [译] 理解编译器 —— 从人类的角度(版本 2)
  3. stl vector 函数_vector :: back()函数以及C ++ STL中的示例
  4. php设置用户头像,PHP针对多用户实现更换头像功能
  5. php 删除 session 文件,如何删除php中的session文件
  6. opencv 图像读写显示、matplotlib 库图像读写显示
  7. c语言散列表的长度为11,2011数据结构C语言模拟试题及答案.doc
  8. Android ndk下载和环境配置
  9. 教师继续教育 计算机知识,教师继续教育管理制度
  10. 微信小程序服务器向客户端发送通知消息,微信小程序消息推送
  11. 深入Scala系列之一组件重用
  12. 老中医根治python编码问题2
  13. Java打印年月日历
  14. APISpace 通用文字识别OCR API
  15. 岁月温柔-2 又住院了,祈祷早日康复
  16. 数据结构与算法太重要了,刷了两月题,终于进入了梦寐以求的大厂,
  17. AP模式(路由器的几种模式)
  18. 计算机网络-详解DNS域名解析全过程
  19. 石油远程《机械设计》第二次在线作业
  20. 成都奔驰加装三色氛围灯 蔚一车改

热门文章

  1. 201671010439-词频统计软件项目报告
  2. Java 集合 之 Set
  3. 互联网测试开发面试题集锦(下)完结篇
  4. wait 和 sleep 区别
  5. NavigationBar的显隐和颜色设置
  6. 12、基于yarn的提交模式
  7. LeetCode:二进制求和【67】
  8. java -UDP通信
  9. TSynDBDataSet内存表
  10. 10分钟学习简略五子棋 源码+注释教学