模型选择 Model Selection

整理交叉验证、最大似然估计、AIC 与 BIC 等模型选择方法。

一般来说,足以描述现象的最简单模型是最好的模型,这被称为 奥卡姆剃刀 Occam's razor帕累托最优 Pareto Optimality,而当模型的复杂度上升时,误差并不一定会随之下降,而是有可能反而变大

可能存在的另一个问题是 过拟合 Overfitting 问题,特别是在高维数据和模型参数较多的情况下,模型容易对训练数据过度拟合,导致泛化能力不足,也就是说模型对于训练集表现良好,但是对于训练集外的新数据则表现不佳

我们可以通过诸如 交叉验证 Cross-Validation信息准则 information criteria 等手段来帮助我们选择合理的模型以确保模型能够有效泛化,从而最大程度避免过拟合问题

交叉验证 Cross Validation

交叉验证 Cross-Validation 允许我们比较不同的机器学习方法,验证它们最终的泛化性如何

k-fold 交叉验证

k-fold 交叉验证 k-Fold Cross-Validation 是一种用于评估机器学习模型性能的交叉验证技术,它通过将数据集划分为 kk 个子集,在模型训练和验证过程中多次重复使用这些子集,从而得到可靠和稳定的模型评估结果

  1. 划分数据集
    首先将数据集随机划分为 kk 个大致相等的子集,通常 kk 的值为 5 或 10,但可以根据数据集大小和需求选择其他值

  2. 循环训练和验证
    模型会被训练 kk 次,每次训练时:

    • kk 个子集中选择一个子集作为 验证 Validation
    • 剩下的 k1k - 1 个子集组合在一起作为 训练 Train

    这个过程会重复 kk 次,每次选择一个不同的子集作为验证集,其余的子集用于训练

  3. 评估模型性能
    每次循环训练都会得到一个模型

    Yj=f(Xj,βj) \mathbf{Y}_j = f(\mathbf{X}_j,\beta_j)

    还有该模型在该次循环所选择的验证集上的表现情况 (比如准确率、均方误差等)
    在所有循环训练结束以后,我们可以通过不同手段来生成最终模型,例如简单的选择在其验证集上表现最好的模型,又或者是对所有模型的参数进行平均以得出最终模型

    β=(1/k)j=1kβjY=f(X,β) \overline{\beta} = (1/k)\sum_{j=1}^k \beta_j \\ \mathbf{Y} = f(\mathbf{X},\overline{\beta})

    我们还可以在 k-fold 划分之前就划分出一些 保留数据 withheld data ,然后我们将这些数据用于测试最终得到的模型 Y\mathbf{Y} 以验证我们模型最终的泛化能力

K-fold 交叉验证的常见变体

  1. Stratified K-fold(分层K折交叉验证):
    在分类问题中,分层 K 折交叉验证确保每个折中的数据具有相同的类标签比例,这样可以避免不均衡类问题影响模型评估。

  2. Leave-p-Out Cross-Validation (LpO-CV):
    LpO-CV 是 K-fold 交叉验证的一种极端形式,其中 pp 等于数据集中的留作验证集的数量,每次迭代使用 p 个样本作为验证集,其他所有样本作为训练集,虽然这种方法能最大限度地利用数据,但计算开销较大,例如当 p=1p = 1 时,每次循环训练只留一个数据样本作为验证集,其他所有数据都作为训练集,此时称为 Leave-One-Out

简单来说,交叉验证首先将数据分为 使用数据保留数据,这一步是可选的,也可以所有数据都作为 使用数据,然后将 使用数据 划分为 kk 个部分,然后进行 kk 次训练,每次训练时,挑选出一个部分作为 验证集,而剩下的部分作为 训练集 去训练模型,当该次训练完成以后,该次被挑选出的 验证集 用于评估模型在该次训练的表现,从而帮助调整模型的超参数,避免过拟合,然后下一次训练会选择不同的 验证集 并重复该过程,直到 kk 次训练全部完成,训练完成后,我们可以选择不同的方法 (平均或选择表现最好的模型) 来得到最终的模型,然后我们可以将一开始划分的 保留数据 输入模型,用来衡量模型在未见过的数据上的表现,从而测试最终模型的泛化性

信息准则 Information Criteria

传统的模型选择方法,例如 交叉验证 有它的局限性,另一种基于信息论的严格方法发展起来,基本思路是,将 真实数据 和模型给出的 结果数据 看作两个概率密度分布,并衡量它们之间的距离,从而评估模型的可行性,这种方法和由 路德维希·玻尔兹曼 Ludwig E. Boltzmann 提出的在统计学中描述 熵 entropy 的数学方法,以及由 克劳德·香农 Claude Shannon 提出的 信息论 Information Theory 有着深刻的联系

KL 散度 Kullback-Leibler, KL divergence

KL散度在模型选择中用于衡量一个模型与真实数据之间的信息损失程度,如果我们有真实数据或实验测量结果 ff 以及用来描述 ff 的模型 gg,那么描述模型 gg 与真实数据 ff 之间的 KL散度 I(f,g)I(f,g)

I(f,g)=f(X,β)log[f(X,β)g(X,μ)]dXI(f,g) = \int f(\mathbf{X},\beta) \log\left[\frac{f(\mathbf{X},\beta)}{g(\mathbf{X},\mu)} \right] d\mathbf{X}

这里 β\betaμ\mu 是实际数据和模型的参数,X\mathbf{X} 是数据的输入变量或观察值的集合,它可以是一个单一变量,也可以是多个变量组成的向量,而 ffgg 是对这些输入数据的概率分布作出的不同假设或近似

从信息论角度来看,I(f,g)I(f,g) 表示用模型 gg 来描述模型 ff 时丢失的信息量,如果 ffgg 相同,则信息损失为零,因为 log(1)=0\log(1)=0,说明信息没有损失

信息准则 Information Criteria

KL 散度要求我们完全了解真实模型 ff 的统计数据以及我们所提出的模型 gg 中的所有参数,这在实践中是无法计算的,我们必须另寻它法

最大似然估计 Maximum Likelihood Estimation, MLE

我们可以根据观察到的数据来估计模型参数,这里涉及到 概率 Probability似然 Likelihood 两个概念

  1. 概率 Probability: 指在给定参数 θ\theta 的情况下,数据 X\mathbf{X} 发生的可能性,也就是说概率是已知模型和参数时,数据出现的可能性度量
  2. 似然 Likelihood: 指在给定观测数据 X\mathbf{X} 的情况下,参数 θ\theta 的可能性,换句话说,似然是已知数据时,模型参数可能取什么值的度量

当我们说“似然”的时候,我们是在评估某个参数值是否“似乎”更有可能生成观测到的数据,而“概率”通常用于描述事件发生的可能性,而不是在事件发生后回头看哪个参数最有可能

  • 似然函数 Likelihood Function
    L(θX)\mathcal{L}(\theta|\mathbf{X}) 是当给定数据 X\mathbf{X} 时,一种关于参数 θ\theta 的函数
  • 概率密度函数 Probability Density Function
    P(Xθ)P(\mathbf{X}|\theta) 是当给定参数 θ\theta 时,关于数据 X\mathbf{X} 的函数

似然函数由 联合概率密度 Joint Probability Density 定义,也就是当我们有多个观测数据时,联合概率密度表示所有这些数据点一起出现的概率密度,当我们有一组观测数据 X={x1,x2,,xn}\mathbf{X} = \{ x_1,x_2,\cdots,x_n \},这些数据服从参数为 θ\theta 的特定概率分布,这些数据的联合概率密度可以表示为每个数据点的概率密度的乘积

P(Xθ)=P(x1,x2,,xnθ)=i=1nP(xiθ)P(\mathbf{X}|\theta) = P(x_1,x_2,\cdots,x_n |\theta) = \prod_{i=1}^n P(x_i |\theta)
  • \prod 是累乘符号
  • P(xiθ)P(x_i |\theta) 是在给定参数 θ\theta 时,单个观测值 xix_i 的概率密度

似然函数由联合概率密度定义是显然的,因为似然要求根据一组观测值给出参数,所以似然函数由联合概率密度定义为

L(θX)=P(Xθ)=i=1nP(xiθ)\mathcal{L}(\theta|\mathbf{X}) = P(\mathbf{X}|\theta) = \prod_{i=1}^n P(x_i |\theta)

这个函数衡量在给定不同的参数 θ\theta 时,观测到 X\mathbf{X} 这组数据的可能性有多大

最大似然估计就是让似然函数最大化,即找到让似然函数最大化的参数 θ\theta,也就是使得观测到数据集合 X\mathbf{X} 的可能性最大,换句话说,找到让观测值集合 X\mathbf{X} 出现可能性最大的参数 θ\theta

为了找到使 L(θX)\mathcal{L}(\theta|\mathbf{X}) 最大化的参数 θ\theta ,通常会对似然函数取对数,得到 对数似然函数 Log-Likelihood

logL(θX)=log(i=1nP(xiθ))=i=1nlog[P(xiθ)]\log\mathcal{L}(\theta|\mathbf{X}) = \log\left(\prod_{i=1}^n P(x_i |\theta) \right) = \sum_{i=1}^n \log [P(x_i |\theta)]

取对数的原因是对数函数是单调递增的,且乘积形式的似然函数转化为求和形式便于处理,最终成为一个优化问题

argmaxθ  log[L(θX)]\operatorname*{argmax}_{\theta} \ \ \log[\mathcal{L}(\theta|\mathbf{X})]

注意,进行最大似然分析,需要知道数据属于哪种概率分布,否则无法定义似然函数

AIC 赤池信息准则 Akaike Information Criterion

在 1970 年代,赤池弘毅 Hirotugu Akaike 将 Fisher 的 最大似然估计KL散度 结合起来,提出一种计算模型与真实数据之间相对距离的方法,如下

AIC=2K2log[L(μX)]\text{AIC} = 2K - 2\log[\mathcal{L}(\mu|\mathbf{X})]

其中,KK 是模型中使用的参数数量,log[L(μX)]\log[\mathcal{L}(\mu|\mathbf{X})] 是对数似然函数,AIC 的思路是,尽管我们无法直接计算KL散度,但可以通过经验对数似然函数的最大值来近似估计模型的相对距离

AIC 的一个重要特性是它会对参数较多的模型进行惩罚,因此模型的复杂度会影响AIC的大小,理论上,AIC得分最低的模型是最稀疏的,但这并不意味着它在所有情况下都能很好地预测或重构数据

BIC 贝叶斯信息准则 Bayesian Information Criterion

随后,Schwarz 对 AIC 进行了修改,通过对 样本数量 施加额外惩罚,得到 BIC,如下

BIC=log(n)K2log[L(μX)]\text{BIC} = \log(n)K - 2\log[\mathcal{L}(\mu|\mathbf{X})]

其中 nn 是数据或样本的数量,Schwarz 的主要贡献是证明了,在样本量足够大的情况下,BIC能够保证收敛到包含正确模型的候选模型集上

两种信息准则(AIC 和 BIC)都是用于模型选择的工具,AIC 更适用于模型的相对比较,而 BIC 更偏向于在大样本情况下进行选择