自动模型选择算法


193

我想实现一种用于自动模型选择的算法。我正在考虑进行逐步回归,但是任何事情都会做(尽管它必须基于线性回归)。

我的问题是我找不到方法论或开源实现(我正在用Java唤醒)。我想到的方法如下:

  1. 计算所有因素的相关矩阵
  2. 选择彼此之间相关性较低的因素
  3. 删除t统计量较低的因素
  4. 添加其他因素(仍基于2中找到的低相关因素)。
  5. 重复几次,直到某个条件(例如AIC)超过某个阈值或无法达到或无法找到更大的值。

我意识到有一个R实现(stepAIC),但是我发现代码很难理解。另外,我还没有找到描述逐步回归的文章。


72
坦率地说,我认为这是一个灾难性的想法,几乎可以肯定会导致许多错误的结论。
gung

4
@gung:虽然我同意盲目地遵循模型选择的结果是一个坏主意,但我认为它可以作为分析的起点。就我而言,我有数百种可用的因素,我想选择5-10个最相关的因素。如果没有自动选择模型(以后将对其进行手动修改),我看不到该怎么做。
S4M 2012年

12
所有模型选择过程都受到我在下面的答案中讨论的问题的约束。此外,您要搜索的可能因素数量越多,这些问题就越极端,并且增加不是线性的。尽管有一些更好的方法(由@Zach讨论),应与交叉验证(由@JackTanner讨论)结合使用,但基于t,r和AIC的选择不在其中。此外,由于有数百个因素,所需的数据量很容易达到数百万。不幸的是,摆在您面前的任务非常艰巨。
gung

7
选择模型的目的是什么?是用于预测/预测模型还是在寻找重要变量?另外,您使用的数据集有多大-多少观测值和多少变量?
概率

6
这里有趣的观点,但我认为对算法模型选择程序的负面看法有些过时。例如,David Hendry最近在计量经济学领域的工作,特别是他在PcGive软件和饱和度方法方面的工作。可以在此处找到概述他的方法的讲座。正如@MichaelChernick指出的那样(亨德利也这样做!),主题知识非常重要。这就是主题专家具有价值的原因-让算法独自行动是错误的。
Graeme Walsh

Answers:


333

我认为这种方法是错误的,但如果我解释原因,可能会更有帮助。想要了解有关大量变量的一些信息的最佳模型是可以理解的。此外,在这种情况下,人们似乎经常发现自己。此外,许多有关回归的教科书(和课程)涵盖逐步选择方法,这意味着它们必须合法。但是不幸的是,事实并非如此,而这种情况和目标的配对很难成功地解决。以下是自动逐步模型选择过程的问题列表(归因于Frank Harrell,并从此处复制):

  1. 它产生的R平方值严重偏高。
  2. 打印输出上每个变量旁边引用的F和卡方检验不具有所要求的分布。
  3. 该方法得出的效果和预测值的置信区间错误地变窄。参见Altman和Andersen(1989)。
  4. 它会产生不具有正确含义的p值,对其进行正确的校正是一个难题。
  5. 它给出需要收缩的有偏回归系数(剩余变量的系数太大;请参见Tibshirani [1996])。
  6. 在共线性的情况下,它具有严重的问题。
  7. 它基于旨在用于检验预定假设的方法(例如,嵌套模型的F检验)。
  8. 增加样本数量没有太大帮助;参见Derksen和Keselman(1992)。
  9. 它使我们不必考虑问题。
  10. 它消耗大量纸张。

问题是,这些程序有什么不好?为什么会出现这些问题?参加过基本回归课程的大多数人都熟悉均值回归的概念,因此这就是我用来解释这些问题的方法。(尽管起初看起来似乎是题外话,但请允许我,我保证它是相关的。)

想象一下,在试训的第一天,一名高中田径教练。三十个孩子出现了。这些孩子具有某种内在能力的内在水平,教练和其他任何人都无法直接使用这些内在能力。结果,教练唯一能做的就是让他们全部跑100m。时间大概是衡量其内在能力的标准,因此被认为是时间。但是,它们是概率性的。某人的表现有多大比例取决于他们的实际能力,而有多少是随机的。想象一下,真实情况如下:

set.seed(59)
intrinsic_ability = runif(30, min=9, max=10)
time = 31 - 2*intrinsic_ability + rnorm(30, mean=0, sd=.5)

下图显示了第一场比赛的结果以及教练对孩子的评论。

首场比赛

请注意,按照比赛时间对孩子进行划分会使他们的内在能力重叠,这一事实至关重要。在赞美某些并大喊大叫之后(教练倾向于这样做),他让他们再次跑步。以下是第二场比赛的结果,教练的反应(根据上述同一模型进行了模拟):

第二场比赛

请注意,它们的内在能力是相同的,但是相对于第一种族而言,时间反弹了。从教练的角度来看,他大喊大叫的人趋于改善,而他称赞的人则趋于恶化(我从Wiki页面上列出的Kahneman引用中改编了这个具体示例),尽管实际上回归均值是一个简单的数学运算教练基于部分随机的测量结果为团队选择运动员这一事实的结果。

现在,这与自动(例如逐步)模型选择技术有什么关系?基于同一数据集开发和确认模型有时被称为数据挖掘。尽管变量之间存在某种潜在的关系,并且期望更强的关系会产生更强的得分(例如,更高的t统计量),但它们是随机变量,并且实现的值包含误差。因此,当您基于具有较高(或较低)的实现值来选择变量时,由于其潜在的真实值,错误或两者兼而有之。如果您以这种方式前进,那么您会像教练在第二场比赛后一样感到惊讶。无论您是基于具有高t统计量还是具有低相关性来选择变量,这都是正确的。的确,使用AIC比使用p值更好,因为它会惩罚模型的复杂性,但是AIC本身是一个随机变量(如果多次运行研究并拟合相同的模型,AIC会像其他一切)。不幸,

我希望这是有帮助的。


43
数据挖掘的现象解释。
弗兰克·哈雷尔

17
这是一个经过深思熟虑的答案,尽管我完全不同意在线性模型选择的情况下aic是对p值(或bic或类似值)的改进。任何形式为惩罚(如aic)都等于将p值设置为(进入和退出)。aic基本上告诉您如何选择p值。P - [R χ 2 1 > ķ 2L+kpPr(χ12>k)
概率

7
我的评论是关于将aic用于逐步算法或类似算法。我的评论也太简短了。注意是变量数,是点球(为AIC为BIC),和是负最大化的对数似然的两倍。在进行“子集”样式选择且不缩小非零系数时,Aic和bic在概念上与p值不同,但在操作上没有区别。k 2 log N 2 Lpk2logN2L
概率

9
(2L1+2p0+2)(2L0+2p0)=2(L1L0)+2。现在,第一项是p值所基于的似然比统计量。因此,如果似然比统计量大于某个临界值,我们将添加额外的参数。这与p值方法所做的相同。此处仅存在概念上的差异
概率

2
有关AIC无法解决问题的说明,请参见:Mundry,R.(2011)。基于信息论的统计推断中的问题-从常客的角度进行评论。行为生态与社会生物学,65(1),57-68。
2013年

70

请查看R中的插入符号包。它将帮助您交叉验证逐步回归模型(使用method='lmStepAIC'method='glmStepAIC'),并可能帮助您了解这类模型如何具有较差的预测性能。此外,您可以findCorrelation在插入符号中使用函数来识别和消除共线性变量,而rfe在插入符号中使用函数来消除t统计量较低的变量(使用rfeControl=rfeControl(functions=lmFuncs))。

但是,如前面的答案所述,这些变量选择方法可能会给您带来麻烦,特别是如果您反复进行操作。绝对要确保您在完整的测试集上评估性能。在对算法满意之前,甚至不要看测试集!

最后,使用具有“内置”特征选择的预测模型可能更好(更简单),例如岭回归,套索或弹性网。具体来说,尝试method=glmnet插入符号的参数,并将该模型的交叉验证准确性与参数进行比较method=lmStepAIC。我的猜测是,前者将为您提供更高的样本外准确性,并且您不必担心实现和验证自定义变量选择算法。


1
log(λ2+β2)

2
@probabilityislogic您是否知道使用类似r或的语言对双重pareto惩罚的任何良好实现python?我很想尝试一下。
2013年

1
据我了解,通过AIC进行模型选择和留一法交叉验证本质上是同一件事(渐进等效性,请参见Stone,1977),因此AIC和某些类型的交叉验证可能导致非常相似结果。但是,我还没有使用插入符号包,并且从方法调用看来,在某些情况下确实确实使用了AIC。
fileunderwater

38

我完全同意@gung概述的问题。也就是说,实际上,模型选择是一个需要实际解决方案的实际问题。这是我将在实践中使用的东西。

  1. 将您的数据分为训练,验证和测试集。
  2. 在训练集上训练模型。
  3. 使用诸如预测均方根误差(RMSE)之类的指标在验证集上测量模型性能,并选择预测误差最低的模型。
  4. 根据需要设计新模型,重复步骤2-3。
  5. 报告模型在测试集上的表现。

作为在现实世界中使用此方法的示例,我相信它已在Netflix奖竞赛中使用。


15
n>20000

5
@弗兰克:为什么你认为N必须这么高?
rolando2'1

14
由于精度差。如果再次拆分,您将获得不同的结果。这就是为什么人们重复10次交叉验证或自举的100次重复。
Frank Harrell

10
@FrankHarrell n> 20000的数字取决于什么?是否基于原始海报关于“具有数百个因素 ” 的评论?还是它独立于数据的任何方面?
达伦·库克

33
我测试拆分数据的设置的类型为n = 17000,其中有一个事件的比例为0.3,并且已将约50个参数检查或拟合为二进制逻辑模型。我使用了1:1随机分配。当我重新分割数据并重新开始时,测试样本中经过验证的ROC区域发生了实质性变化。在biostat.mc.vanderbilt.edu/rms中的“文本研究方法研究”下查找有关模拟研究和提供更多信息的相关论文。
弗兰克·哈雷尔

15

要回答这个问题,有几种选择:1)由AIC / BIC进行全子集2)逐步由p值进行3)逐步由AIC / BIC进行4)正则化(例如LASSO)(可以基于AIC / BIC或CV) 5)遗传算法(GA)6)其他?7)使用非自动的,面向理论(“学科知识”)的选择

下一个问题是哪种方法更好。该论文(doi:10.1016 / j.amc.2013.05.016)指出,“所有可能的回归”都对他们提出的新方法给出了相同的结果,但逐步改进的效果更差。他们之间有一个简单的GA。本文(DOI:10.1080 / 10618600.1998.10474784)将惩罚回归(桥梁,套索等)与“跳越界线”(似乎是穷举搜索算法,但速度更快)进行了比较,还发现“桥梁模型与来自通过跳跃方法选择子集”。该论文(doi:10.1186 / 1471-2105-15-88)表明GA优于LASSO。本文(DOI:10.1198 / jcgs.2009.06164)提出了一种方法-本质上是全子集(基于BIC)方法,但巧妙地减少了计算时间。他们证明此方法比LASSO更好。有趣的是,本文(DOI:10.1111 / j.1461-0248.2009.01361。

因此,总体而言,结果好坏参半,但我给人的印象是GA看起来非常好,尽管逐步操作可能还不错,而且速度很快。

至于7),则采用非自动的,理论(“学科知识”)为导向的选择。这很耗时,并且不一定比自动方法更好。实际上,在时间序列文献中,可以确定的是,自动化方法(尤其是商业软件)在很大程度上“优于”人类专家(doi:10.1016 / S0169-2070(01)00119-4,第561页),例如选择各种指数平滑法和ARIMA模型)。


6
请注意,通过更改数据生成过程以支持(即使不是有意地)特定例程,可以在不同选择算法的仿真研究中获得不同的性能。哪种方法更快或更慢的问题很明显,但可能仍然很重要。
gung

2
实际上,Tibshirani 关于LASSO原始论文中的示例很好地说明了@gung的观点。对于实际数据的不同方法的比较研究也是如此。顺便说一句,您最近的参考是对的吗?Clements&Hendry与您提供的DOI的论文并没有声称自动化方法的性能优于人类专家,也没有使用“大幅度”一词。(如果您提供完整的参考文献
那就

发现它:Goodrich(2001),“ M3竞争中的商业软件”,国际。J. Forecast。,第17页,第560-565页。它与Clements&Hendry论文属于同一本“ M3竞赛评论”,这就是为什么Googling DOI将我发送到那里的原因。
Scortchi

无论如何,尚不清楚Goodrich的评论与主题专业知识有关。
Scortchi

1
@Scortchi,从该期刊的第581页开始的文章上可能会更清楚。它与“ M2-竞争”更相关,在这种情况下,将自动预测方法与受邀的人类专家(包括时间序列文献中的一些大人物)进行了比较,他们了解经济/行业背景,甚至可以从提供以下信息的公司那里寻求其他信息:数据。
heran_xp 2015年

6

这是左字段之外的答案-而不是使用线性回归,而要使用回归树(rpart包)。这适合于自动模型选择,因为您只需做一点工作就可以自动选择cp(用于避免过度拟合的参数)。


3

可以通过选择最有价值的独立变量的方式实施遗传算法来优化线性模型。变量在算法中表示为基因,然后在交叉,变异等运算符之后选择最佳染色体(基因集)。它基于自然选择-最佳“世代”可以生存,换句话说,该算法可以优化取决于特定模型的估计函数。


2
这将选择“最好”的变量数据在数据产生过程/人口,不一定是最好的变量,因为它仅具有对数据的访问。与OP希望的逐步方法并没有什么不同。
gung

0

我们在R基本统计数据包中确实有一个名为step()的函数,该函数根据最低的AIC进行模型的前进,后退或逐步选择。这也适用于因子变量。这不是服务器的目的吗?


-51

我看到我的问题引起了很多兴趣,并引起了关于自动模型选择方法有效性的有趣辩论。我同意将自动选择的结果视为理所当然是有风险的,但可以将其用作起点。所以这是我针对特定问题的实现方法,即找到最佳n个因子来解释给定变量

  1. 进行所有回归变量与个人因素的比较
  2. 按给定标准对回归进行排序(例如AIC)
  3. 删除t统计量较低的因素:它们对解释我们的变量无用
  4. 按照2中给出的顺序,尝试将因子一个一个地添加到模型中,并在它们改进我们的标准时保留它们。反复考虑所有因素。

同样,这很粗糙,可能有方法可以改进方法,但这是我的出发点。我正在发布此答案,希望它对其他人有用。欢迎发表评论!


47
(1)在该主题中,我还没有目睹任何“辩论”:所有回复和评论都呈现相同的基本信息。(2)您的实现似乎是逐步回归的临时版本。我同意它可以作为起点,但前提是它本身不会自动被接受为终点。
ub

28
您确实接受了自己的答案,这与社区提出的每个论点背道而驰。看到这里的负面消息并不奇怪...
2013年

23
我相信这是我第一次看到这么多的赞成票。@SAM为什么您不只是接受其他一些出色的答案并删除您的“答案”呢?
marbel 2014年

这是SE有史以来最不推荐的答案吗?
mkt

2
您似乎通过说出目标“找到最佳n个因子来解释给定变量”来回答@probabilityislogic的重要问题。与预测模型相比,解释(理解因果关系)的模型构建需要更加有意识地进行,并且通常要花费更多的精力。
rolando2 '18 -4-14
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.