信息准则(information criterion):经常地,对一堆数据进行建模的时候,特别是分类和回归模型,我们有很多的变量可供使用,选择不同的变量组合可以得到不同的模型,例如我们有5个变量,2的5次方,我们将有32个变量组合,可以训练出32个模型。但是哪个模型更加的好呢?就用信息准则来衡量。
下面介绍四种信息准则方法:AIC、BIC、FPE、LILC。
信息准则有两部分组成,一部分是模型拟合情况e_factor ,如残差方差e_var(对y的实际值和预测值之差求方差),一部分是模型参数model_factor。如下:
info_criteria_value = e_factor + model_factor
其中e_factor = n_samples * np.log(e_var)。e_var为残差方差,n_samples为样本数。
下面假设,n_theta是参数的数量。
赤池信息量准则(Akaike information criterion,AIC)是1971年由日本统计学家赤池弘次创立和发展的。赤池信息量准则建立在信息熵的概念基础上。
在一般的情况下,AIC可以表示为:
AIC=2*n_theta−2ln(L)
其中:n_theta是参数的数量,L是似然函数。
使AIC函数达到最小的模型被认为是最优模型。
我们可以用残差方差重写AIC公式,让n_samples为样本数,e_var为残差方差,那么AIC变为:
AIC=2n_theta+n_samplesln(e_var)。
即:
model_factor = 2 * n_theta
e_factor = n_samples * np.log(e_var)
info_criteria_value = e_factor + model_factor
该准则的指导思想是认为一个拟合模型的好坏可以从两方面去考察:一方面是大家非常熟悉的常用来衡量拟合程度的似然函数值;另一方面是模型中未知参数的个数。
通常似然函数值越大说明模型拟合的效果越好。模型中未知参数个数越多,说明模型中包含的自变量越多;自变量越多,模型变化越灵活,模型拟合的准确度就会越高。
模型拟合程度高是我们所希望的,但是我们又不能单纯地以拟合精度来衡量模型的好坏,因为这样势必会导致未知参数的个数越多越好。
未知参数越多,说明模型中自变量越多,未知的风险越多。而且参数越多,参数估计的难度就越大,估计的精度也越差。所以一个好的拟合模型应该是一个拟合精度和未知参数个数的综合最优配置。
BIC= Bayesian Information Criterions,贝叶斯信息准则。
BIC的惩罚项比AIC的大,考虑了样本数量,样本数量过多时,
可有效防止模型精度过高造成的模型复杂度过高。
公式:
model_factor = n_theta * np.log(n_samples)
e_factor = n_samples * np.log(e_var)
info_criteria_value = e_factor + model_factor
最终预报误差准则(Final Prediction Error Criterian,FPE)对AR模型的一种定阶法。此方法是赤池弘次于1969年提出的所谓改进的残差方差图方法。
公式为:
model_factor = n_samples * np.log(
(n_samples + n_theta) / (n_samples - n_theta)
)
e_factor = n_samples * np.log(e_var)
info_criteria_value = e_factor + model_factor
Khundrin’s law of iterated logarithm criterion (LILC)。公式如下,和BIC类似,多了个对样本的log。
model_factor = 2 * n_theta * np.log(np.log(n_samples))
e_factor = n_samples * np.log(e_var)
info_criteria_value = e_factor + model_factor
if self.info_criteria == "bic":
model_factor = n_theta * np.log(n_samples)
elif self.info_criteria == "fpe":
model_factor = n_samples * np.log(
(n_samples + n_theta) / (n_samples - n_theta)
)
elif self.info_criteria == "lilc":
model_factor = 2 * n_theta * np.log(np.log(n_samples))
else: # AIC
model_factor = +2 * n_theta
e_factor = n_samples * np.log(e_var)
info_criteria_value = e_factor + model_factor