人工AIC计算与LassoLarsIC

2024-10-03 00:30:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图手动计算AIC,但我的函数给出的分数与LassoLarsIC分数不同。有人能告诉我我的计算有什么问题吗

以下是我的职能:

def aic(y_pred, y, k):
    ll = (-1/(2*np.var(y)))*np.sum((y_pred-y)**2) - (len(y)/2)*np.log(np.var(y)) - (len(y)/2)*np.log(2*np.pi)
    return -2*ll + 2*k

非常感谢

编辑:

我的示例很简单,下面是完整的代码:

X = np.array([0, 0.1111, 0.2222, 0.3333, 0.4444, 0.5556, 0.6667, 0.7778, 0.8889, 1]).reshape(-1, 1)
y = np.array([0.0528,  0.798 ,  0.8486,  0.8719,  0.1732, -0.3629, -0.7528, -0.9985, -0.6727, -0.1197]).reshape(-1, 1)
poly = plf(9)
F = poly.fit_transform(X)[:, 1:]
scl = StandardScaler()
F = scl.fit_transform(F)
aic_lasso = LassoLarsIC(normalize=False)
aic_lasso.fit(F, y)
aic_lasso.criterion_

输出:

array([10.        ,  7.29642036,  8.9544056 ,  7.06390981,  6.14233987,
        7.96489293,  7.76894903,  7.61736515,  7.39575925,  7.25866825,
        7.01418447,  6.90314784,  6.6465343 ,  6.60361937,  8.12547536,
        8.09620652,  8.09610375, 10.09599191, 12.0959849 , 12.09597075,
       12.09596367, 12.09579736, 10.09579645, 10.09579616, 12.09579393,
       12.09579199, 12.09579079, 14.09541338, 16.01988119])
y_pred = aic_lasso.predict(F)
aic(y_pred, y, 2)

输出:

146.42615433502792

K是2,因为套索设定了另一个系数。到0


Tags: loglenvarnptransformaicarray分数