当前位置:   article > 正文

模型评估方法【附python代码】(信息准则:赤池信息量准则AIC、贝叶斯信息准则BIC)_aicc和aic

aicc和aic

前言

为什么需要选择模型?

答案很简单,我们需要一个准确的数据模型

对于同一个建模问题,在建模过程中,由于每个步骤选择的处理方式不同,我们会得到很多不同的数据模型,比如:

  • 模型方法:比如是分类模型还是回归模型;决策树、随机森林、KNN、XGBOOST、而且由于算法的不断改进,也会逐渐衍生出更加多的模型方法。
  • 变量组合:同样的回归模型,不重复的变量组合就可以有很多种。比如5个变量(a、b、c、d、e),只用单一变量的组合就有5种, 两两组合就有(ab、ac、ad、ae、bc、bd、be…), 因此不同的变量组合也会训练处不同的模型。
  • 使用的训练数据集:对于一个原始数据集,我们往往会在建模前将原始数据集进行切分成训练集和测试集,以降低模型过拟合的风险,不同的切分方法会导致我们使用不同的训练集去建模,每一次的随机切分,都会使得训练集的数据变化。 这也会导致最后模型的微小差异。

因此模型的评估和选择,也是机器学习中的一个重要过程。

模型评估与选择

普通的方法只能评估模型的性能

  • 选择一个评估指标是最基础常用的方法,例如MAE(平均绝对误差)、MSE(平均方差)、R-Squared(决定系数)、adj R-square (校正决定系数)等等,通过直接计算这些指标,选择误差最小、相关性最大的模型。
  • ROC、AUC:常用来评价一个二值分类器的优劣,ROC(Receiver Operating Characteristic)越接近左上角,该分类器的性能越好;由于ROC曲线在很多时候并不能清晰地说明哪个分类器的效果更好, 于是引入了AUC(Area Under Curve)的方法, 通过计算ROC曲线下的面积,其值越大代表分类器效果更好。
  • 交叉验证:是利用了统计学中重抽样的方法,需要对原始数据进行分组、训练出不同的模型,再利用验证集来测试训练模型,从而选出最优模型。之前总结过一个交叉验证的介绍文章,点击这里查看。

上述的方法都有同样一个不足,即,无论模型复杂程度如何,只能评估模型的性能。

信息量准则 (Information Criteria

为了解决上述问题,信息(量)准则 (Information Criteria)将模型的复杂性和性能结合到一起,利用概率统计给模型评分。因此它也被称为统计/概率模型选择(Probabilistic Model Selection)。

在建模过程中,会有一些备选解释变量,选择不同的变量组合会得到不同的模型,而信息准则就是刻画这些模型相对于 “ 真实模型 ” 的信息损失。

首先,需要对模型在训练集上的表现以及复杂程度进行打分:

  • 模型性能(Model Performance):候选模型在训练集上的表现优劣,例如使用对数似然函数,去评价模型和训练集之间的相似程度
  • 模型复杂度(Model Complexity):候选模型的复杂程度,可以使用自由度、模型使用的参数个数进行评价。

从历史上看,已经提出了各种“信息标准”,试图通过添加惩罚项来来纠正最大似然的偏差,以解决更复杂模型的过拟合问题。

这种方法的优势是不需要测试集。这就意味着所有的数据都可以用去训练模型(而不用预留20%左右的用于测试),并且也可以对最终模型直接进行评分。

而其局限性在于,无法跨一系列不同类型的模型计算相同的统计量,或者说无法使用同样的评估指标。相反,必须为每个模型仔细选择推导合适的指标。

另一个限制是它们没有考虑模型的不确定性。并且,在实际运用中,他们可能会选择过于简单的模型。

AIC、BIC、HQ、MDL

接下来介绍几种模型选择方法,每个都可以被证明是等价的或成比例的,尽管每个都来自不同的研究领域:

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及信息论介绍


赤池信息量准则 AIC

赤池信息量准则,即Akaike information criterion、简称AIC,是衡量统计模型拟合优良性的一种标准,是由日本统计学家赤池弘次创立和发展的。赤池称他的方法为“熵最大化原理”,因为该方法建立在信息论中的熵概念之上。

在一般的情况下,AIC可以表示为:
A I C = − 2 l n ( L ) + 2 k AIC=-2 ln(L) + 2k AIC=2ln(L)+2k
其中:

  • k 是所拟合模型中参数的数量,k小意味着模型简洁,使用了更少的变量;
  • L是对数似然值, 代表了模型和数据的拟合情况,L大意味着模型精确,当两个模型之间存在较大差异时,差异主要体现在似然函数项-2ln(L),

假设条件是模型的误差服从独立正态分布, 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+2L/n

表明增加自由参数的数目提高了拟合的优良性,AIC鼓励数据拟合的优良性但是尽量避免出现过度拟合(Overfitting)的情况。所以优先考虑的模型应是AIC值最小的那一个。

样本数(n)越多,AIC值越小,模型越好;

A I C = ( 2 k − 2 L ) / n AIC=(2k-2L)/n AIC=(2k2L)/n

A I C = − 2 / N ∗ L L + 2 ∗ k / N AIC = -2/N * LL + 2 * k/N AIC=2/NLL+2k/N

因此在评价模型是兼顾了简洁性和精确性。

赤池信息准则的方法是寻找可以最好地解释数据但包含最少自由参数的模型。相比于BIC,AIC对数据的惩罚较小,也因此 AIC会选择较为复杂的模型。

AIC拓展:

1. AICc和AICu

在样本小的情况下,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+(nk1)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+(nk2)(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(nkRSS+(nk2)(n+k)

2. QAIC

QAIC(Quasi-AIC)可以定义为:
Q A I C = 2 k − 1 c 2 l n L QAIC=2k-{1\over c}2lnL QAIC=2kc12lnL

其中: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+(nk1)2k(2k+1)

贝叶斯信息准则(BIC)

贝叶斯信息准则(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 Vs BIC

共性: 构造这些统计量所遵循的统计思想是一致的,就是在考虑拟合残差的同事,依自变量个数施加“惩罚”。
不同点:

  • AIC和BIC的原理不同:
    - AIC是从预测角度,选择一个好的模型用来预测,BIC是从拟合角度,选择一个对现有数据拟合最好的模型,从贝叶斯因子的解释来讲,就是边际似然最大的那个模型。
    - 这里引用外网的一个解释(链接戳这里): AIC试图选择一个更合适的模型去解释未知的、高维度的事实。这意味着真实的情况(或者说真实的模型)是不存在于候选模型中。从AIC的概念来看,所有的模型都是接近于“真实”而非真实,真实的模型永远是更高维度的。 而BIC则是试图在候选模型中选择一个最"真"的模型“。

  • BIC的惩罚项比AIC大,考虑了样本个数,样本数量多,可以防止模型精度过高造成的模型复杂度过高。

AIC BIC计算案例

1) 简单线性回归

这里我们使用一个线性回归作为例子,展示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))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

这个例子中有两个系数和一个截距
在这里插入图片描述

# 预测
yhat = model.predict(X)
#计算误差mse
mse = mean_squared_error(y, yhat)
print('MSE: %.3f' % mse)
  • 1
  • 2
  • 3
  • 4
  • 5

在这里插入图片描述

# 计算这个线性回归方程的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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

在这里插入图片描述

2) 进阶例子:AIC/BIC实战:Lasso模型选择

链接:ScikitLearn:Lasso model selection: AIC-BIC / cross-validation


参考文章

  1. 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.
  2. 百度百科 - 交叉验证: https://baike.baidu.com/item/%E4%BA%A4%E5%8F%89%E9%AA%8C%E8%AF%81
  3. 百度百科 - AIC : https://baike.baidu.com/item/AIC/10910647
  4. 百度百科 - BIC准则 :https://baike.baidu.com/item/BIC%E5%87%86%E5%88%99/53346081
  5. 百度百科 - 贝叶斯信息准则 :地址太长了省略掉
  6. 模型选择的几种方法–AIC,BIC,HQ准则
    https://www.cnblogs.com/jiangkejie/p/11055014.html
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/358838
推荐阅读
相关标签
  

闽ICP备14008679号