Я попытался вручную написать формулу для AIC.Я хочу использовать его в связи с Scikit Learn.Для проверки правильности написания кода я сравнил значения AIC из statsmodels с теми же наборами данных.Но если я сравниваю модель M1 и модель M2, моя реализация и statsmodels дают разные результаты;не просто численно, но statsmodels AIC предпочитает другую модель, чем мой AIC.
Я использую оставшуюся сумму квадратов, введенную вручную, и помещаю ее в формулу AIC.ols - обычный метод наименьших квадратов Скикита.Индекс n проходит по наборам данных, y_run (n) - это n_th наборы данных с переменными ответа, X_run (n) - n-й набор входных обучающих данных.Последний фрагмент кода - это AIC statsmodel, где 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
Вы видите, где моя ручная реализация имеет недостатки?