模型选择准则之AIC和BIC

本文介绍了两种常用的信息准则——AIC与BIC,在模型选择过程中如何平衡模型复杂度与数据集描述能力,避免过拟合现象。
转自:http://blog.csdn.net/jteng/article/details/40823675

此处模型选择我们只考虑模型参数数量,不涉及模型结构的选择。

很多参数估计问题均采用似然函数作为目标函数,当训练数据足够多时,可以不断提高模型精度,但是以提高模型复杂度为代价的,同时带来一个机器学习中非常普遍的问题——过拟合。所以,模型选择问题在模型复杂度与模型对数据集描述能力(即似然函数)之间寻求最佳平衡。

人们提出许多信息准则,通过加入模型复杂度的惩罚项来避免过拟合问题,此处我们介绍一下常用的两个模型选择方法——赤池信息准则(Akaike Information Criterion,AIC)和贝叶斯信息准则(Bayesian Information Criterion,BIC)。

AIC是衡量统计模型拟合优良性的一种标准,由日本统计学家赤池弘次在1974年提出,它建立在熵的概念上,提供了权衡估计模型复杂度和拟合数据优良性的标准。

通常情况下,AIC定义为:


其中k是模型参数个数,L是似然函数。从一组可供选择的模型中选择最佳模型时,通常选择AIC最小的模型。

当两个模型之间存在较大差异时,差异主要体现在似然函数项,当似然函数差异不显著时,上式第一项,即模型复杂度则起作用,从而参数个数少的模型是较好的选择。

一般而言,当模型复杂度提高(k增大)时,似然函数L也会增大,从而使AIC变小,但是k过大时,似然函数增速减缓,导致AIC增大,模型过于复杂容易造成过拟合现象。目标是选取AIC最小的模型,AIC不仅要提高模型拟合度(极大似然),而且引入了惩罚项,使模型参数尽可能少,有助于降低过拟合的可能性。

BIC(Bayesian InformationCriterion)贝叶斯信息准则与AIC相似,用于模型选择,1978年由Schwarz提出。训练模型时,增加参数数量,也就是增加模型复杂度,会增大似然函数,但是也会导致过拟合现象,针对该问题,AIC和BIC均引入了与模型参数个数相关的惩罚项,BIC的惩罚项比AIC的大,考虑了样本数量,样本数量过多时,可有效防止模型精度过高造成的模型复杂度过高。


其中,k为模型参数个数,n为样本数量,L为似然函数。kln(n)惩罚项在维数过大且训练样本数据相对较少的情况下,可以有效避免出现维度灾难现象。

模型选择中,AIC(Akaike Information Criterion)BIC(Bayesian Information Criterion)都是常用的准则,它们的目标都是在模型的拟合优度复杂度之间进行权衡,且数越小代表模型越优[^1][^2]。 ### AIC准则 AIC模型选择提供了有效的规则,但存在一定不足。当样本容量很大时,在AIC准则中拟合误差提供的信息会受到样本容量的放大,而参数个数的惩罚因子却样本容量无关(一直是2),因此当样本容量很大时,使用AIC准则选择的模型不收敛于真实模型,它通常比真实模型所含的未知参数个数要多[^2]。 ### BIC准则 BIC(Bayesian Information Criterion)贝叶斯信息准则是Schwartz在1978年根据Bayes理论提出的判别准则,也称为SBC准则(也称BIC),弥补了AIC的不足。其定义为:BIC = ln(n)(模型中参数的个数) - 2ln(模型极大函数) ,其中n是样本数量[^2]。 ### 基于AICBIC选择模型的方法 在比较多个候选模型时,分别计算每个模型AICBIC后选择AICBIC最小的模型。一般来说,如果样本量较小,AICBIC的选择结果可能相;而当样本量较大时,BIC倾向于选择更简单的模型,因为它对模型复杂度的惩罚更重。 ### 代码示例(Python) ```python import statsmodels.formula.api as smf import pandas as pd # 假设data是一个包含相关变量的DataFrame # 这里以一个简单的线性回归模型为例 # 建立一个包含解释变量的模型 model_with_variable = smf.ols("y ~ x", data=data).fit() # 建立一个空模型,没有解释变量 null_model = smf.ols("y ~ 1", data=data).fit() # 查看模型AIC aic_with_variable = model_with_variable.aic aic_null_model = null_model.aic # 查看模型BIC bic_with_variable = model_with_variable.bic bic_null_model = null_model.bic # 比较AIC,选择AIC小的模型 if aic_with_variable < aic_null_model: best_model_aic = model_with_variable else: best_model_aic = null_model # 比较BIC,选择BIC小的模型 if bic_with_variable < bic_null_model: best_model_bic = model_with_variable else: best_model_bic = null_model print("基于AIC选择的最佳模型AIC:", best_model_aic.aic) print("基于BIC选择的最佳模型BIC:", best_model_bic.bic) ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值