手动计算 AIC 编号给定数据分布和一些分布字符串

Calculating AIC number manually Given a distribution of data and some distribution string

假设我有以下数据:

 array([[0.88574245, 0.3749999 , 0.39727183, 0.50534724],
        [0.22034441, 0.81442653, 0.19313024, 0.47479565],
        [0.46585887, 0.68170517, 0.85030437, 0.34167736],
        [0.18960739, 0.25711086, 0.71884116, 0.38754042]])

并且知道这些数据服从正态分布。我如何计算 AIC 编号? 公式为

2K - 2log(L)

K是总参数,对于正态分布,参数是3(均值、方差和残差)。我被困在 L 上,L 假设是最大似然函数,我不确定要为遵循正态分布的数据传递什么,对于 Cauchy 或指数分布又如何。谢谢你。

Update: this question appeared in one of my coding interview. 

对于给定的正态分布,y的概率给定

import scipy.stats

def prob( y = 0, mean = 0, sd = 1 ):
    return scipy.stats.norm( mean, sd ).pdf( y )

例如,给定 mean = 0sd = 1,值为 0 的概率为 prob( 0, 0, 1 )

如果我们有一组值 0 - 9,对数似然是这些概率的对数之和,在这种情况下,最佳参数是 x 的平均值和 [=17 的 StDev =],如:

import numpy as np
x = range( 9 )
logLik = sum( np.log( prob( x, np.mean( x ), np.std( x ) ) ) ) 

那么AIC就是:

K = 2
2*K - 2*( logLik )

对于你提供的数据,我不太确定三列三行反映的是什么。那么您是否必须计算三个均值和三个 StDev-s?不是很清楚

希望以上内容可以帮助您入门

我认为面试问题遗漏了一些东西,但也许部分重点是看你如何处理它。

总之,AIC本质上是一种惩罚对数似然计算。对数似然性很大——对数似然性越大,模型对数据的拟合越好。但是,如果您有足够的自由参数,您总是可以使对数似然更大。唔。因此,已经提出了各种惩罚项,以抵消更多自由参数的影响。 AIC(赤池信息准则)就是其中之一。

因此,如前所述,问题是 (1) 为给定的三个模型(正态模型、指数模型和柯西模型)中的每一个找到对数似然,(2) 计算每个模型的自由参数,以及(3) 根据 (1) 和 (2) 计算 AIC。

现在对于 (1),您需要 (1a) 查找或导出每个模型的最大似然估计量。对于正常情况,它只是样本均值和样本方差。其他的我不记得了,不过你可以查一下,或者算出来。然后 (1b) 您需要将估计量应用于给定数据,然后 (1c) 计算给定数据的估计参数的似然或对数似然。任何参数值的对数似然只是 sum(log(p(x|params))) 其中 params = 参数由最大似然估计。

至于 (2),正态分布有 2 个参数,mu 和 sigma^2。对于指数,有 1(它可能被称为 lambda 或 theta 或其他东西)。对于 Cauchy,可能有一个尺度参数和一个位置参数。或者,可能没有自由参数(以零为中心且比例 = 1)。所以在每种情况下,K = 1 或 2 或者 K = 0、1 或 2。

回到 (1b),数据对我来说有点可笑。我希望有一个一维列表,但数组似乎是二维的(如果我算对的话,有 4 行和 4 列)。可能需要回去问一问。如果他们真的意味着有 4 维数据,那么概念基础保持不变,但计算将比 1-d 情况更复杂。

祝你好运,玩得开心,这是个好问题。