为什么需要选择模型?
答案很简单,我们需要一个准确的数据模型。
对于同一个建模问题,在建模过程中,由于每个步骤选择的处理方式不同,我们会得到很多不同的数据模型,比如:
因此模型的评估和选择,也是机器学习中的一个重要过程。
上述的方法都有同样一个不足,即,无论模型复杂程度如何,只能评估模型的性能。
为了解决上述问题,信息(量)准则 (Information Criteria)将模型的复杂性和性能结合到一起,利用概率统计给模型评分。因此它也被称为统计/概率模型选择(Probabilistic Model Selection)。
在建模过程中,会有一些备选解释变量,选择不同的变量组合会得到不同的模型,而信息准则就是刻画这些模型相对于 “ 真实模型 ” 的信息损失。
首先,需要对模型在训练集上的表现以及复杂程度进行打分:
从历史上看,已经提出了各种“信息标准”,试图通过添加惩罚项来来纠正最大似然的偏差,以解决更复杂模型的过拟合问题。
这种方法的优势是不需要测试集。这就意味着所有的数据都可以用去训练模型(而不用预留20%左右的用于测试),并且也可以对最终模型直接进行评分。
而其局限性在于,无法跨一系列不同类型的模型计算相同的统计量,或者说无法使用同样的评估指标。相反,必须为每个模型仔细选择推导合适的指标。
另一个限制是它们没有考虑模型的不确定性。并且,在实际运用中,他们可能会选择过于简单的模型。
接下来介绍几种模型选择方法,每个都可以被证明是等价的或成比例的,尽管每个都来自不同的研究领域:
1)赤池信息量 akaike information criterion: A I C = − 2 l n ( L ) + 2 k AIC=-2 ln(L) + 2k AIC=−2ln(L)+2k
2)贝叶斯信息量 bayesian information criterion: B I C = − 2 l n ( L ) + l n ( n ) ∗ k BIC=-2 ln(L) + ln(n)*k BIC=−2ln(L)+ln(n)∗k
3)HQ准则 hannan-quinn criterion : H Q = − 2 l n ( L ) + l n ( l n ( n ) ) ∗ k HQ=-2 ln(L) + ln(ln(n))*k HQ=−2ln(L)+ln(ln(n))∗k
其中,L是在该模型下的最大似然函数;n: 是数据的样本数量;k: 是模型的参数的个数。
AIC、BIC、HQ都是基于对数似然和复杂性对模型进行评分的方法。主要从两个方面去考察模型的优劣:一个是似然函数最大化,另一个是模型中的未知参数个数最小化。似然函数值越大说明模型拟合的效果越好,但是我们不能单纯地以拟合精度来衡量模型的优劣,这样回导致模型中未知参数越来越多,模型变得越来越复杂,会造成过拟合。所以一个好的模型应该是拟合精度和未知参数个数的综合最优化配置。
AIC和BIC也常用于逻辑回归模型中筛选变量的过程。在进行ARMA参数的选择时,AIC准则和BIC准则的提出可以有效弥补根据自相关图和偏自相关图定阶的主观性,在有限的阶数范围内帮助我们寻找相对最优拟合模型。
MDL(Minimum Description Length) 最小描述长度提供了另一种来自信息论的评分方法,可以证明它等同于 BIC。详细介绍见:MDL及信息论介绍
赤池信息量准则,即Akaike information criterion、简称AIC,是衡量统计模型拟合优良性的一种标准,是由日本统计学家赤池弘次创立和发展的。赤池称他的方法为“熵最大化原理”,因为该方法建立在信息论中的熵概念之上。
在一般的情况下,AIC可以表示为:
A I C = − 2 l n ( L ) + 2 k AIC=-2 ln(L) + 2k AIC=−2ln(L)+2k
其中:
假设条件是模型的误差服从独立正态分布, n是观测值数目。SSR(SUM SQAURE OF RESIDUE)为残差平方和,那么AIC变为: A I C = 2 k + n l n ( S S R / n ) AIC=2k+nln(SSR/n) AIC=2k+nln(SSR/n)
具体到,L=-(n/2)ln(2pi)-(n/2)*ln(sse/n)-n/2.其中n为样本量,sse为残差平方和,L主要取决于残差平方和,为负数,所以还可以写成: A I C = ( 2 k + 2 ∣ L ∣ ) / n AIC = (2k + 2|L|)/n AIC=(2k+2∣L∣)/n
表明增加自由参数的数目提高了拟合的优良性,AIC鼓励数据拟合的优良性但是尽量避免出现过度拟合(Overfitting)的情况。所以优先考虑的模型应是AIC值最小的那一个。
样本数(n)越多,AIC值越小,模型越好;
A I C = ( 2 k − 2 L ) / n AIC=(2k-2L)/n AIC=(2k−2L)/n
A I C = − 2 / N ∗ L L + 2 ∗ k / N AIC = -2/N * LL + 2 * k/N AIC=−2/N∗LL+2∗k/N
因此在评价模型是兼顾了简洁性和精确性。
赤池信息准则的方法是寻找可以最好地解释数据但包含最少自由参数的模型。相比于BIC,AIC对数据的惩罚较小,也因此 AIC会选择较为复杂的模型。
在样本小的情况下,AIC转变为AICc:
A I C c = A I C + 2 k ( k + 1 ) ( n − k − 1 ) AICc=AIC+{2k(k+1) \over (n-k-1)} AICc=AIC+(n−k−1)2k(k+1)
当n增加时,AICc收敛成AIC。所以AICc可以应用在任何样本大小的情况下(Burnham and Anderson, 2004)。
McQuarrie 和 Tsai(1998: 22)把AICc定义为:
A I C c = l n ( R S S n ) + ( n + k ) ( n − k − 2 ) AICc=ln({RSS\over n})+{(n+k)\over(n-k-2)} AICc=ln(nRSS)+(n−k−2)(n+k)
他们提出的另一个紧密相关指标为AICu:
A I C u = l n ( R S S n − k ) + ( n + k ) ( n − k − 2 ) AICu=ln({RSS\over n-k})+{(n+k)\over(n-k-2)} AICu=ln(n−kRSS)+(n−k−2)(n+k)
QAIC(Quasi-AIC)可以定义为:
Q A I C = 2 k − 1 c 2 l n L QAIC=2k-{1\over c}2lnL QAIC=2k−c12lnL
其中:c是方差膨胀因素。因此QAIC可以调整过度离散(或者缺乏拟合)。
在小样本情况下, QAIC表示为:
Q A I C c = Q A I C + 2 k ( 2 k + 1 ) ( n − k − 1 ) QAICc=QAIC+{2k(2k+1)\over (n-k-1)} QAICc=QAIC+(n−k−1)2k(2k+1)
贝叶斯信息准则(BIC),名字来自于它背后的原理:贝叶斯概率。 是在不完全情报下,对部分未知的状态用主观概率估计,然后用贝叶斯公式对发生概率进行修正,最后再利用期望值和修正概率做出最优决策
和AIC类似,这个方法也是基于最大化似然函数估计的, BIC越小,意味着该模型拟合程度越高,参数越少,并且使用的样本越少。
B I C = − 2 l n ( L ) + l n ( n ) ∗ k BIC=-2 ln(L) + ln(n)*k BIC=−2ln(L)+ln(n)∗k
AIC公式和BIC公式前半部分是一样的,后半部分是惩罚项,n较大时,kln(n)≥2k。BIC考虑了样本数量,当样本数量过多时,BIC的惩罚项比AIC的大,这意味着更复杂的模型将具有更差(更大)的分数,因此越复杂的模型不太可能被选中。这样可有效防止模型精度过高造成的模型复杂度过高。
所以,BIC相比AIC在大数据量时对模型参数惩罚得更多,导致BIC更倾向于选择参数少的简单模型。
另外,BIC源于贝叶斯概率原理,这意味着,如果所选候选模型包含数据集的真实模型,则 BIC 选择真实模型的概率会随着训练数据集的大小而增加。这是AIC不能做到的。
BIC的缺点是,对于较小,代表性较差的训练数据集,更有可能选择过于简单的模型。
共性: 构造这些统计量所遵循的统计思想是一致的,就是在考虑拟合残差的同事,依自变量个数施加“惩罚”。
不同点:
AIC和BIC的原理不同:
- AIC是从预测角度,选择一个好的模型用来预测,BIC是从拟合角度,选择一个对现有数据拟合最好的模型,从贝叶斯因子的解释来讲,就是边际似然最大的那个模型。
- 这里引用外网的一个解释(链接戳这里): AIC试图选择一个更合适的模型去解释未知的、高维度的事实。这意味着真实的情况(或者说真实的模型)是不存在于候选模型中。从AIC的概念来看,所有的模型都是接近于“真实”而非真实,真实的模型永远是更高维度的。 而BIC则是试图在候选模型中选择一个最"真"的模型“。
BIC的惩罚项比AIC大,考虑了样本个数,样本数量多,可以防止模型精度过高造成的模型复杂度过高。
这里我们使用一个线性回归作为例子,展示AIC和BIC的计算过程
from sklearn.datasets import make_regression
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
# 生成数据
X, y = make_regression(n_samples=100, n_features=2, noise=0.1)
# 模型训练
model = LinearRegression()
model.fit(X, y)
# 参数数量:
num_params = len(model.coef_) + 1
print('Number of parameters: %d' % (num_params))
# 预测
yhat = model.predict(X)
#计算误差mse
mse = mean_squared_error(y, yhat)
print('MSE: %.3f' % mse)
# 计算这个线性回归方程的AIC
from math import log
# 定义aic计算函数
def calculate_aic(n, mse, num_params):
aic = n * log(mse) + 2 * num_params
return aic
# 定义bic计算函数
def calculate_bic(n, mse, num_params):
bic = n * log(mse) + num_params * log(n)
return bic
# 计算结果
aic = calculate_aic(len(y), mse, num_params)
bic = calculate_bic(len(y), mse, num_params)
#展示结果
print('AIC: %.3f' % aic)
print('BIC: %.3f' % bic)
链接:ScikitLearn:Lasso model selection: AIC-BIC / cross-validation
参考文章
- Probabilistic Model Selection with AIC, BIC, and MDL:https://machinelearningmastery.com/probabilistic-model-selection-measures/#:~:text=Model%20selection%20is%20the%20problem,k%2Dfold%20cross%2Dvalidation.
- 百度百科 - 交叉验证: https://baike.baidu.com/item/%E4%BA%A4%E5%8F%89%E9%AA%8C%E8%AF%81
- 百度百科 - AIC : https://baike.baidu.com/item/AIC/10910647
- 百度百科 - BIC准则 :https://baike.baidu.com/item/BIC%E5%87%86%E5%88%99/53346081
- 百度百科 - 贝叶斯信息准则 :地址太长了省略掉
- 模型选择的几种方法–AIC,BIC,HQ准则
https://www.cnblogs.com/jiangkejie/p/11055014.html