【问题标题】:Manually computed AIC differs from statsmodel AIC手动计算的 AIC 不同于 statsmodel AIC
【发布时间】:2019-10-09 05:36:49
【问题描述】:

我尝试为 AIC 手动编写公式。我想将它与 scikit learn 结合使用。为了测试我是否正确编码,我比较了给定相同数据集的 statsmodels 的 AIC 值。但是如果我比较模型 M1 和模型 M2,我的实现和 statsmodels 会产生不同的结果;不仅在数字上,而且 statsmodels AIC 更喜欢我的 AIC 之外的另一个模型。

我使用手动实现的残差平方和,并将其放入 AIC 公式中。 ols 是 scikit 的普通最小二乘估计器。索引 n 在数据集上运行,y_run(n) 是具有响应变量的第 n 个数据集,X_run(n) 是第 n 个输入训练数据集。最后一段代码是 statsmodel 的 AIC,其中 regr 是 statsmodels 普通最小二乘估计器。

def rss(n):
    return ((y_run(n)-ols(n).predict(X_run(n)))**2).sum()

def AIC (n):
    return len(X_run(n))*np.log(rss(n)/len(X_run(n)))+2*p

def AIC_regr (n):
    return regr(n).aic

你能看出我的手动实现哪里有缺陷吗?

【问题讨论】:

    标签: python-2.7 machine-learning scikit-learn statistics statsmodels


    【解决方案1】:

    我认为这只是定义上的不同。

    statsmodels 在 aic 的定义中使用对数似然,而不是 rssstatsmodels.tools.eval_measures 有两个定义。

    信息标准通常仅用于比较同一模型的不同版本,特别是不同数量的解释变量。在这种情况下,模型版本中不变的项通常会被删除。但是,statsmodels 在计算信息标准时使用完整的对数似然定义。这也允许跨模型进行比较。

    aic 定义的第二个问题是它是否除以观察次数。这也因统计包而异。

    【讨论】:

    • 谢谢约瑟夫。我知道,statsmodel 使用对数似然,我使用 rss。但是达到一个常数,结果应该是相等的。我的问题是,订单不成立。假设 M1 和 M2 是我的模型(相同类型的模型但包含不同数量的解释变量)。 statsmodel 的 AIC 产生 AIC(M1)
    • 你的p 是什么?你包括常数吗?我认为 statsmodels llf、aic 计算没有任何区别。您是否检查过您使用的残差是否与 statsmodels ols 结果相同?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-09
    • 1970-01-01
    • 2014-03-11
    • 1970-01-01
    • 2020-04-26
    • 1970-01-01
    • 2015-04-05
    相关资源
    最近更新 更多