模型选择是指从一组候选模型中选择一个模型的问题。
通常,我们会选择在留存测试数据集上表现最好的模型,或者使用重采样技术(如 k-折交叉验证)来估计模型性能。
模型选择的另一种方法是使用概率统计量,这些统计量试图量化模型在训练数据集上的性能和模型的复杂性。例如,赤池信息准则、贝叶斯信息准则和最小描述长度。
这些信息准则统计量的优点是它们不需要留存测试集,尽管局限性在于它们不考虑模型的“不确定性”,并可能最终选择过于简单的模型。
在本文中,您将了解用于机器学习模型选择的概率统计量。
阅读本文后,你将了解:
- 模型选择是从一组候选模型中选择一个模型的挑战。
- 赤池信息准则和贝叶斯信息准则是根据模型的对数似然性和复杂性对模型进行评分的两种方法。
- 最小描述长度提供了另一种信息论评分方法,该方法可以被证明等同于 BIC。
开始您的项目,阅读我的新书 《机器学习概率》,其中包含分步教程和所有示例的Python源代码文件。
让我们开始吧。

概率模型选择度量 AIC、BIC 和 MDL
照片由 Guilhem Vellut 拍摄,保留部分权利。
概述
本教程分为五个部分;它们是:
- 模型选择的挑战
- 概率模型选择
- 赤池信息准则
- 贝叶斯信息准则
- 最小描述长度
模型选择的挑战
模型选择是拟合多个模型到给定数据集并选择一个优于其他模型的过程。
模型选择:估计不同模型的性能以便选择最佳模型。
— 第 222 页,《统计学习要素》,2016 年。
这可能适用于无监督学习,例如选择聚类模型,或监督学习,例如选择回归或分类任务的预测模型。它也可能是建模的一个子任务,例如为给定模型进行特征选择。
有许多常用的模型选择方法。例如,在监督学习的情况下,最常用的三种方法是
- 训练、验证和测试数据集。
- 重采样方法。
- 概率统计。
最简单可靠的模型选择方法包括在训练集上拟合候选模型,在验证数据集上进行调优,并根据选定的指标(如准确率或误差)选择在测试数据集上表现最好的模型。这种方法的缺点是它需要大量数据。
重采样技术试图在数据集较小的情况下实现与训练/验证/测试模型选择方法相同的目标。一个例子是 k-折交叉验证,其中训练集被分成许多训练/测试对,并在每个对上拟合和评估模型。对每个模型重复此过程,并选择在 k 折上平均得分最高的模型。这种方法和之前的方法的问题在于,它们只评估模型性能,而不考虑模型复杂性。
模型选择的第三种方法试图将模型的复杂性与模型的性能结合成一个分数,然后选择最小化或最大化该分数的模型。
我们可以将这种方法称为统计模型选择或概率模型选择,因为评分方法使用了概率框架。
想学习机器学习概率吗?
立即参加我为期7天的免费电子邮件速成课程(附示例代码)。
点击注册,同时获得该课程的免费PDF电子书版本。
概率模型选择
概率模型选择(或“信息准则”)提供了一种分析技术,用于对候选模型进行评分和选择。
模型根据其在训练数据集上的性能和模型的复杂性进行评分。
- 模型性能。候选模型在训练数据集上的表现如何。
- 模型复杂性。训练后训练好的候选模型有多复杂。
模型性能可以使用概率框架来评估,例如在最大似然估计框架下的对数似然。模型复杂性可以评估为模型中的自由度或参数数量。
历史上,人们提出了各种“信息准则”,试图通过添加惩罚项来纠正最大似然的偏差,以补偿更复杂模型对过拟合的惩罚。
— 第 33 页,《模式识别与机器学习》,2006 年。
概率模型选择方法的一个好处是,不需要测试数据集,这意味着所有数据都可以用于拟合模型,并且可以直接对将用于领域预测的最终模型进行评分。
概率模型选择方法的一个局限性在于,不能对一系列不同类型的模型计算相同的通用统计量。相反,必须为每个模型仔细推导指标。
应该注意的是,AIC 统计量是为模型之间的预计划比较而设计的(而不是在自动化搜索过程中对许多模型进行比较)。
— 第 493 页,《应用预测建模》,2013 年。
这些选择方法的一个进一步限制是它们不考虑模型的“不确定性”。
然而,这些准则没有考虑模型参数的不确定性,并且在实践中它们倾向于偏爱过于简单的模型。
— 第 33 页,《模式识别与机器学习》,2006 年。
有三种统计方法可以估计给定模型与数据集的拟合程度以及模型的复杂性。并且每个都可以被证明是等同或成比例的,尽管每个都是从不同的框架或研究领域推导出来的。
它们是
- 赤池信息准则 (AIC)。源于频率派概率。
- 贝叶斯信息准则 (BIC)。源于贝叶斯概率。
- 最小描述长度 (MDL)。源于信息论。
每个统计量都可以使用模型的对数似然和数据来计算。对数似然来自最大似然估计,这是一种在训练数据集的响应中查找或优化模型参数的技术。
在 最大似然估计 中,我们希望最大化给定特定概率分布及其参数(theta)的观测数据的条件概率(X),形式化表述为
- P(X ; theta)
其中 X 实际上是来自问题域 1 到 n 的所有观测值的联合概率分布。
- P(x1, x2, x3, …, xn ; theta)
联合概率分布可以重述为给定分布参数的每个示例的条件概率的乘积。将许多小的概率相乘可能不稳定;因此,通常将此问题重述为自然对数条件概率之和。
- sum i to n log(P(xi ; theta))
鉴于对数在似然函数中的频繁使用,它通常被称为对数似然函数。
常见预测问题中的对数似然函数包括回归的均方误差(例如线性回归)和二元分类的对数损失(二元交叉熵)(例如逻辑回归)。
在接下来的部分中,我们将更详细地研究 AIC、BIC 和 MDL 这三个统计量。
赤池信息准则
赤池信息准则 (Akaike Information Criterion),简称 AIC,是一种对模型进行评分和选择的方法。
它以该方法开发者 赤池弘次 (Hirotugu Akaike) 命名,并且可以表明它基于信息论和频率派推断。
它源于频率派框架,不能解释为边际似然的近似。
— 第 162 页,《机器学习:概率视角》,2012 年。
AIC 统计量针对逻辑回归的定义如下(摘自“《统计学习要素》”)
- AIC = -2/N * LL + 2 * k/N
其中 N 是训练数据集中的样本数量,LL 是模型在训练数据集上的对数似然,k 是模型中的参数数量。
如上定义的得分是最小化的,即选择 AIC 值最小的模型。
要使用 AIC 进行模型选择,我们只需在考虑的模型集合中选择给出最小 AIC 的模型。
— 第 231 页,《统计学习要素》,2016 年。
与 BIC 方法(如下)相比,AIC 统计量对复杂模型的惩罚较小,这意味着它可能更侧重于模型在训练数据集上的性能,进而选择更复杂的模型。
我们看到 AIC 的惩罚小于 BIC。这导致 AIC 选择更复杂的模型。
— 第 162 页,《机器学习:概率视角》,2012 年。
贝叶斯信息准则
贝叶斯信息准则 (Bayesian Information Criterion),简称 BIC,是一种对模型进行评分和选择的方法。
它以其衍生出的研究领域命名:贝叶斯概率和推断。与 AIC 一样,它适用于在最大似然估计框架下拟合的模型。
BIC 统计量针对逻辑回归的计算如下(摘自“《统计学习要素》”)
- BIC = -2 * LL + log(N) * k
其中 log() 是以 e 为底的自然对数,LL 是模型的对数似然,N 是训练数据集中的样本数量,k 是模型中的参数数量。
如上定义的得分是最小化的,即选择 BIC 值最小的模型。
计算的数量与 AIC 不同,尽管可以证明它与 AIC 成比例。与 AIC 不同,BIC 对模型的复杂性给予更大的惩罚,这意味着更复杂的模型将具有更差(更大)的分数,从而选择的可能性更小。
请注意,与 AIC [… ] 相比,它对模型复杂性的惩罚更重。
— 第 217 页,《模式识别与机器学习》,2006 年。
重要的是,BIC 在贝叶斯概率框架下的推导意味着,如果候选模型集合包含数据集的真实模型,那么 BIC 选择真实模型的概率会随着训练数据集的增大而增加。AIC 得分则不能如此。
…给定一个模型族,包括真实模型,当样本量 N → ∞ 时,BIC 选择正确模型的概率接近于一。
— 第 235 页,《统计学习要素》,2016 年。
BIC 的一个缺点是,对于较小、代表性较差的训练数据集,它更有可能选择过于简单的模型。
最小描述长度
最小描述长度 (Minimum Description Length),简称 MDL,是一种对模型进行评分和选择的方法。
它以其衍生出的研究领域命名,即信息论。
信息论关注的是在有噪声信道上传输信息和表示信息,因此,它测量熵等量,熵是表示随机变量或概率分布的事件所需的平均比特数。
从信息论的角度来看,我们可能希望同时传输预测(或更准确地说,它们的概率分布)以及用于生成它们的模型。目标变量的预测和模型都可以用在有噪声信道上传输它们所需的比特数来描述。
最小描述长度是最小比特数,或表示模型和表示模型所需的比特数之和的最小值。
最小描述长度 (MDL) 原则建议选择最小化这两个描述长度之和的假设。
— 第 173 页,《机器学习》,1997 年。
MDL 统计量按如下方式计算(摘自“《机器学习》”)
- MDL = L(h) + L(D | h)
其中 h 是模型,D 是模型做出的预测,L(h) 是表示模型所需的比特数,L(D | h) 是表示模型在训练数据集上的预测所需的比特数。
如上定义的得分是最小化的,即选择 MDL 值最小的模型。
编码 (D | h) 所需的比特数和编码 (h) 所需的比特数可以计算为负对数似然;例如(摘自“《统计学习要素》”)
- MDL = -log(P(theta)) – log(P(y | X, theta))
或者模型参数 (theta) 的负对数似然,以及目标值 (y) 在给定输入值 (X) 和模型参数 (theta) 下的负对数似然。
这种最小化模型及其预测编码的愿望与 奥卡姆剃刀 的概念相关,该概念寻求最简单的(最不复杂的)解释:在这种情况下,是预测目标变量的最不复杂的模型。
MDL 原则认为,对一组数据而言,最好的理论是能够最小化理论本身的大小加上指定相对于理论的例外情况所需的信息量的理论……
— 第 198 页,《数据挖掘:实用的机器学习工具和技术》,第 4 版,2016 年。
MDL 计算与 BIC 非常相似,并且在某些情况下可以被证明是等同的。
因此,BIC 准则,作为对数后验概率的近似推导,也可以被视为一种通过最小描述长度进行(近似)模型选择的设备。
— 第 236 页,《统计学习要素》,2016 年。
线性回归的示例
我们可以通过一个示例来具体计算 AIC 和 BIC。
在本节中,我们将使用一个测试问题,拟合一个线性回归模型,然后使用 AIC 和 BIC 度量来评估模型。
重要的是,AIC 和 BIC 对于线性回归模型的特定函数形式已经推导出来,这使得示例相对直接。在改编这些示例以适应您自己的算法时,重要的是要为您的模型和预测问题找到合适的计算推导,或者自己进行推导。
在本例中,我们将使用 scikit-learn 的 make_regression() 函数提供的测试回归问题。该问题将有两个输入变量,并需要预测目标数值。
1 2 3 4 |
... # 生成数据集 X, y = make_regression(n_samples=100, n_features=2, noise=0.1) # 在所有数据上定义并拟合模型 |
我们将直接在整个数据集上拟合 LinearRegression() 模型。
1 2 3 4 |
... # 在所有数据上定义并拟合模型 模型 = LinearRegression() model.fit(X, y) |
拟合完成后,我们可以报告模型中的参数数量,考虑到问题的定义,我们预计会有三个(两个系数和一个截距)。
1 2 3 4 |
... # 参数数量 num_params = len(model.coef_) + 1 print('参数数量: %d' % (num_params)) |
线性回归模型的似然函数可以证明与最小二乘函数相同;因此,我们可以通过均方误差度量来估计模型的最大似然。
首先,可以使用该模型为训练数据集中的每个样本估计一个结果,然后可以使用 scikit-learn 的 mean_squared_error() 函数来计算模型的均方误差。
1 2 3 4 5 6 |
... # 预测训练集 yhat = model.predict(X) # 计算误差 mse = mean_squared_error(y, yhat) print('MSE: %.3f' % mse) |
将所有内容联系起来,定义数据集、拟合模型并报告参数数量和模型最大似然估计的完整示例列在下面。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
# 生成测试数据集并拟合线性回归模型 from sklearn.datasets import make_regression 来自 sklearn.linear_model 导入 LinearRegression from sklearn.metrics import mean_squared_error # 生成数据集 X, y = make_regression(n_samples=100, n_features=2, noise=0.1) # 在所有数据上定义并拟合模型 模型 = LinearRegression() model.fit(X, y) # 参数数量 num_params = len(model.coef_) + 1 print('参数数量: %d' % (num_params)) # 预测训练集 yhat = model.predict(X) # 计算误差 mse = mean_squared_error(y, yhat) print('MSE: %.3f' % mse) |
注意:您的 结果可能不同,这取决于算法或评估过程的随机性,或数值精度的差异。考虑运行示例几次并比较平均结果。
运行示例,首先报告模型中的参数数量为 3,正如我们预期的那样,然后报告 MSE 约为 0.01。
1 2 |
参数数量: 3 MSE: 0.010 |
接下来,我们可以调整示例以计算模型的 AIC。
跳过推导,普通最小二乘线性回归模型的 AIC 计算如下(摘自“统计识别模型的新视角”,1974 年。)
- AIC = n * LL + 2 * k
其中 n 是训练数据集中的样本数量,LL 是模型使用自然对数的对数似然(例如,MSE 的对数),k 是模型中的参数数量。
下面的 `calculate_aic()` 函数实现了这一点,它将 n、原始均方误差 (mse) 和 k 作为参数。
1 2 3 4 |
# 计算回归的 AIC def calculate_aic(n, mse, num_params): aic = n * log(mse) + 2 * num_params return aic |
然后可以更新示例以利用此新函数并计算模型的 AIC。
完整的示例如下所示。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
# 计算线性回归模型的赤池信息准则 from math import log from sklearn.datasets import make_regression 来自 sklearn.linear_model 导入 LinearRegression from sklearn.metrics import mean_squared_error # 计算回归的 AIC def calculate_aic(n, mse, num_params): aic = n * log(mse) + 2 * num_params return aic # 生成数据集 X, y = make_regression(n_samples=100, n_features=2, noise=0.1) # 在所有数据上定义并拟合模型 模型 = LinearRegression() model.fit(X, y) # 参数数量 num_params = len(model.coef_) + 1 print('参数数量: %d' % (num_params)) # 预测训练集 yhat = model.predict(X) # 计算误差 mse = mean_squared_error(y, yhat) print('MSE: %.3f' % mse) # 计算 AIC aic = calculate_aic(len(y), mse, num_params) print('AIC: %.3f' % aic) |
运行示例,如前所述报告参数数量和 MSE,然后报告 AIC。
注意:您的 结果可能不同,这取决于算法或评估过程的随机性,或数值精度的差异。考虑运行示例几次并比较平均结果。
在这种情况下,AIC 报告的值约为 -451.616。可以最小化此值以选择更好的模型。
1 2 3 |
参数数量: 3 MSE: 0.010 AIC: -451.616 |
我们也可以用 BIC 的计算来探索同一个示例。
跳过推导,普通最小二乘线性回归模型的 BIC 计算如下(摘自 这里)
- BIC = n * LL + k * log(n)
其中 n 是训练数据集中的样本数量,LL 是模型使用自然对数的对数似然(例如,均方误差的对数),k 是模型中的参数数量,log() 是自然对数。
下面的 `calculate_bic()` 函数实现了这一点,它将 n、原始均方误差 (mse) 和 k 作为参数。
1 2 3 4 |
# 计算回归的 BIC def calculate_bic(n, mse, num_params): bic = n * log(mse) + num_params * log(n) return bic |
然后可以更新示例以利用此新函数并计算模型的 BIC。
完整的示例如下所示。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
# 计算线性回归模型的贝叶斯信息准则 from math import log from sklearn.datasets import make_regression 来自 sklearn.linear_model 导入 LinearRegression from sklearn.metrics import mean_squared_error # 计算回归的 BIC def calculate_bic(n, mse, num_params): bic = n * log(mse) + num_params * log(n) return bic # 生成数据集 X, y = make_regression(n_samples=100, n_features=2, noise=0.1) # 在所有数据上定义并拟合模型 模型 = LinearRegression() model.fit(X, y) # 参数数量 num_params = len(model.coef_) + 1 print('参数数量: %d' % (num_params)) # 预测训练集 yhat = model.predict(X) # 计算误差 mse = mean_squared_error(y, yhat) print('MSE: %.3f' % mse) # 计算 BIC bic = calculate_bic(len(y), mse, num_params) print('BIC: %.3f' % bic) |
运行示例,如前所述报告参数数量和 MSE,然后报告 BIC。
注意:您的 结果可能不同,这取决于算法或评估过程的随机性,或数值精度的差异。考虑运行示例几次并比较平均结果。
在这种情况下,BIC 报告的值约为 -450.020,非常接近 AIC 值 -451.616。同样,可以最小化此值以选择更好的模型。
1 2 3 |
参数数量: 3 MSE: 0.010 BIC: -450.020 |
进一步阅读
如果您想深入了解,本节提供了更多关于该主题的资源。
书籍
- 第 7 章 模型评估与选择,《统计学习要素》,2016 年。
- 第 1.3 节 模型选择,《模式识别与机器学习》,2006 年。
- 第 4.4.1 节 模型比较与 BIC,《模式识别与机器学习》,2006 年。
- 第 6.6 节 最小描述长度原理,《机器学习》,1997 年。
- 第 5.3.2.4 节 BIC 对数边际似然的近似,《机器学习:概率视角》,2012 年。
- 应用预测建模, 2013.
- 第 28.3 节 最小描述长度 (MDL),《信息论、推理与学习算法》,2003 年。
- 第 5.10 节 MDL 原则,《数据挖掘:实用的机器学习工具和技术》,第 4 版,2016 年。
论文
- 统计识别模型的新视角, 1974.
API
- sklearn.datasets.make_regression API.
- sklearn.linear_model.LinearRegression API.
- sklearn.metrics.mean_squared_error API.
文章
总结
在本文中,您了解了用于机器学习模型选择的概率统计量。
具体来说,你学到了:
- 模型选择是从一组候选模型中选择一个模型的挑战。
- 赤池信息准则和贝叶斯信息准则是根据模型的对数似然性和复杂性对模型进行评分的两种方法。
- 最小描述长度提供了另一种信息论评分方法,该方法可以被证明等同于 BIC。
你有什么问题吗?
在下面的评论中提出你的问题,我会尽力回答。
嗨,Jason,
感谢这篇精彩的文章!
我想知道如何处理参数数量严重依赖数据的非参数模型(基于树的方法)。
祝好
好问题。
通常,对于决策树等非参数模型,这些度量很难使用。
嗨,Jason,
我使用了 log loss 值而不是 mse 来计算 AIC 方程,并在我的数据集上取得了良好的结果。我还使用 Python 的 statsmodel (logit) 找到了的 AIC 值进行了交叉检查。在这里我注意到 log loss 值比 mse 表现更好。您能解释一下为什么会这样吗?
Log loss 是用于分类的,例如逻辑回归。教程中的示例是线性回归,例如预测数值,而 log loss 是不合适的。
对于逻辑回归以外的分类算法(如下所列),我们是否应始终使用 Log Loss 来计算 AIC?
其他分类算法列表
– k 最近邻
– SVC
– 朴素贝叶斯
– 线性判别分析
– 决策树
– 随机森林
我认为没有。
据我理解,每种算法都需要计算其自己的 AIC。
有人尝试过将 MDL 用于 Keras 训练吗?
没有,抱歉。
你好,我有一个关于参数的问题。
如果我使用 MLP 模型,如何获取参数数量来计算 AIC?
谢谢你
可以使用 `model.summary()` 来获取参数数量。
嗨 Jason 🙂
我还有一个问题。
正如你告诉我的,我刚刚运行了“model.summary()”,
然后它显示“‘MLPRegressor’ object has no attribute ‘summary’”。
如何解决这个问题?
谢谢!
也许你的模型没有层?
或者我只是插入 MLP 模型的超参数数量(例如节点数、层数……)?
谢谢你
我相信 AIC 需要对 MLP 进行专门的计算。
嗨,Jason,
谢谢 🙂
专门的计算是使用 model.summary() 的参数数量吗?
不,我的意思是你需要查阅文献,了解如何以适当的方式计算 MLP 的指标。
Jason,您提供的信息和代码示例对我完成我的 MS 学位非常有帮助。感谢您花费时间和精力撰写这些帖子!!
为了将线性回归示例改编为逻辑回归,AIC 和 BIC 的计算(第 9 行)需要进行调整,对吗?
在此帖的前面,您将逻辑回归的 AIC 和 BIC 计算定义为
AIC = -2/N * LL + 2 * k/N
BIC = -2 * LL + log(N) * k
我的理解是,第 9 行需要替换为这些方程,而 LL 应替换为您“逻辑回归入门”帖子中描述的逻辑回归对数似然计算。
对数似然 = log(yhat) * y + log(1 – yhat) * (1 – y)
我是在正确的轨道上吗?
AIC 和 BIC 指标有许多公式。
我尝试提供标准计算并链接到它们的来源,但它们不是我看到过的唯一方法。
我无法评论最佳或最正确的公式。
BIC 是比 AIC 更好的选择最佳预测模型吗?
这真的取决于您的项目目标。对于所有情况,从来没有最好的方法。
你好!
感谢这篇有用的文章。我遗漏的是,尽管模型具有更小的 MSE 意味着模型更好,而不是像处理 L 时那样,MSE 如何可以替代 L?
Jason,又见面了,感谢您的精彩讲解!
问题:概率模型选择包括复杂度惩罚以及误差预测最小化。有人可能会问,为什么我们不只关注测试误差分数?我猜原因如下:
1) 我们偏爱简单的模型(更易于解释)。
2) 简单的模型通常需要更少的内存、更少的训练/测试执行时间。
这是正确的吗?或许您能补充一些内容?
此致!
是的,但更重要的是:简单的解释比复杂的解释更有可能正确并具有泛化性。
你好:我是一名辅助学者,正试图为描述从出生到成熟(0 至 21 岁)的人类身高生长数据开发模型。我的模型假设人类生长是由 n=九个逻辑生长成分组合而成。当我在国际会议上展示论文时,有人告诉我可以使用 AIC 和 BIC 方法来选择这些数据所需的最佳逻辑生长成分数量。您同意吗?每个数据集包含 35 个身高测量值,AIC 值与 n 的图显示了一个 U 形曲线,在 n=6 个成分时显示最小值。但是,当我将这些成分拟合到包含两个相同测量值的数据集(70 个测量值)时,AIC 值和图会发生变化,在 n=9 个成分时显示最小值。我可以使用这种方法吗?为什么当数据点数量改变时 AIC 会改变?您愿意与我合作吗?
也许吧。尽管您准备的是描述性模型而不是预测性模型,例如统计学而不是机器学习。
当元素数量改变时,指标也会改变,因为元素数量会影响模型的复杂度。
嗨,Jason,
确实写得很清楚!
不过,我在这里有一些歧义。在 sklearn 的 boston 数据集上计算 statsmodels 的 aic(3026)与手动计算的 aic(1565)结果不同。
任何帮助都将不胜感激!
也许是实现上的差异。
嗨 Jason
感谢这篇博文。您能否提供用于计算线性回归模型 MDL 的 R 代码?
致敬
Nkue
感谢您的建议,也许将来会考虑。
或者 Python 代码
谢谢 Jason,感谢这篇博文!
我有一个关于使用 AIC 计算神经网络和随机森林模型拟合优度的问题?如果可以使用,应该在 R 中使用哪个包?
此致
我手头没有 R 包,也许可以试试 Google 搜索。
谢谢你,Jason。
不客气。
你好,Jason。
我构建了两个模型。
模型 1- AIC = 8906
模型 2 AIC = – 9501
比较负 AIC 和正 AIC 是正确的吗?哪一个 AIC 值更能证明模型更好?
抱歉,我不解读结果。
嗨 Jason,
感谢这篇精彩的文章。
为了计算线性回归模型的 BIC,参数的数量是严格的项数(在上面的例子中,1 个截距 + 2 个特征 = 3),还是也应该包括拟合中估计的方差(在这种情况下是 4)?
我之所以这么问,是因为这个 https://en.wikipedia.org/wiki/Bayesian_information_criterion
似乎为方差加了 1。
也许吧,我基于教程末尾列出的教科书进行描述。
如何在 Python 中计算逻辑回归模型的 AIC 和 BIC?
上面的计算将直接有帮助。
这篇文章写得非常清楚。我最初很难理解这些概念,但您的文章让它们变得清晰明了。我想通过基于 GLM 的方法(使用 R 或 Python 的逐步前向回归)来实现新的模型选择标准。您能否建议我应考虑哪些参数来定义标准?另外,如果您有 GLM 或逐步前向回归的示例代码,那将非常有帮助。
不客气。
也许您可以从论文或教科书中实现该算法,或者从现有实现开始。
上述方法(make_regression)是否通过最大似然进行模型拟合?
如果不是,那么以下原则就被忽略了:
“AIC 的理论要求对数似然已最大化:虽然 AIC 可以为非最大似然拟合的模型计算,但它们的 AIC 值不应进行比较。”(来自‘help(AIC)’(‘stats’包))
换句话说:当线性模型不是通过最大似然进行拟合时,它们的模型结果不能通过 AIC 和 BIC 等度量进行比较。
这些度量也不能用于比较拟合不同响应的模型(或者当响应在一个案例中被转换而在另一个案例中未被转换时)。
@ Dr. James T. Walker:对于相同响应的不同样本大小也不行!
`make_regression` 定义了一个新的回归数据集,更多信息请参见此处:
https://scikit-learn.cn/stable/modules/generated/sklearn.datasets.make_regression.html
这只是教程的背景。
AIC 和 BIC 的计算如何变为负数,而公式中没有负值?对数不可能输出负值,我假设参数数量和特征数量也不能为负。那么这怎么可能?
嗨 Nadine…两者都可以为负。请仔细查看方程。
AIC = -2/N * LL + 2 * k/N
是的,我知道。但这在这里不是这样实现的,对吗?
我没看到减号。
嗨 Nadine…我不确定为什么您的视图没有显示相同的方程:
AIC = –2/N * LL + 2 * k/N
我的意思是,在代码中我没有看到减号。对于 AIC,它显示为:
aic = n * log(mse) + 2 * num_params
对于 BIC,它显示为:
bic = n * log(mse) + num_params * log(n)
那么,减号在哪里?
代码中使用了另一种形式。
在代码中,没有减号,对吗?
aic = n * log(mse) + 2 * num_params
bic = n * log(mse) + num_params * log(n)
或者我错过了什么?
这种特定形式没有减号,但是结果仍然可能是负的,因为 log(0.10) = -1。
AIC 和 BIC 是否是稳健的度量,可以防止选择过度拟合训练数据的模型?
@jason 和 @james,不错的博文。计算 BIC 时,对于随机森林模型,k 或参数数量应该是什么?
是否有特定的公式可以估算随机森林模型的 BIC?
嗨 Zeshan…您可能会发现以下资源很有趣:
https://medium.com/@analyttica/what-is-bayesian-information-criterion-bic-b3396a894be6
感谢您发布的好文章!
您认为 AIC 和/或 BIC 可用于选择标准化主轴(sma)回归(同时考虑 x 和 y 变量的误差)的最佳模型吗?
嗨 Akihiro…两者都是不错的选择。您是否已为您的模型实现了其中一个或两者?
谢谢你的回复。
R 中的 SMATR 包已实现了 AIC 的计算(用于标准化主轴(SMA)回归)。所以我想,使用这个包,模型选择是可能的,当我想选择最佳的 SMA 模型时,例如在以下模型之间:
y ~ x
和
y ~ x + group
和
y ~ x * group
其中 group 是分类变量。
由于普通最小二乘(OLS)回归和 SMA 之间的区别在于,在后一种情况下,残差不仅针对 y 方向计算,也针对 x 方向计算,并且当残差在 SMA 回归中计算时,我认为 AIC 也应该在选择模型时起作用,但是,我找不到任何论文/网站说明可以使用 AIC 从几个不同的 SMA 回归中进行模型选择。
那么您是否同意使用 AIC 选择最佳 SMA 模型没有问题?
嗨,这是关于在 SMA 回归中使用 AIC 进行模型选择的问题。
我曾就这个疑问询问过 R 中 SMATR 包的作者;他说 AIC 可用于选择最佳的 SMA 回归模型。
嘿,我已经执行了与上面完全相同的代码。
aic = n * log(mse) + 2 * num_params
并得到了以下结果:
模型 1 AIC = -1023.4
模型 2 AIC = -730.5
那么我应该选择 Model1,因为它是在考虑负号后的最小值,还是应该考虑绝对值选择 Model2?
嗨 MAR…以下资源可能会让您感兴趣:
https://www.scribbr.com/statistics/akaike-information-criterion/
亲爱的布朗利博士,
MDL 方法也称为“最小消息长度标准”吗?据我所知,它们并不相同。如果我没记错,您能否推荐一本关于 MML 的清晰的学习资料,就像您对 AIC、BIC 和 MDL 的解释一样?非常感谢。
嗨 MER…以下资源可能会为 MDL 提供合适的背景。
https://www.cs.cmu.edu/~aarti/Class/10704/lec13-MDL.pdf