полифункциональная максимальная степень полинома

#python #curve-fitting #data-fitting

#python #подгонка кривой #подгонка данных

Вопрос:

Я подгоняю свои данные и пытаюсь найти наилучший порядок полиномов. Вот код:

 cov = 1
o = 2
print 'begin polyfit'
for z in range(15, 65):
    ttt = np.polyfit(phase3, data3, z, full=True)
    p_k_t = ttt[0]
    cov_t = ttt[1]
    if (len(cov_t)>0) and (cov_t < cov):
        p_k = p_k_t
        o = z
        cov = cov_t
print 'End polyfit, best order = ', o
  

Но каждый раз (данные меняются) Я получаю лучший порядок = 30. Подгонка выглядит не очень хорошо, может быть лучше.
Начните думать, что это максимальное значение порядка полинома. Может ли это быть правдой? Или тогда у меня должна быть ошибка в порядке 31?

Зеленая строка — полифит Зеленая строка - полифит

ОБНОВЛЕНИЕ: остатки (cov) не могут быть вычислены после порядка 30

Комментарии:

1. Вы вычисляете свою ошибку на тех же данных, что и при подгонке полинома? Затем, конечно, выбирается максимальная степень (максимальные возможности / мощность модели; в вашей модели нет регулирования, кроме степени). Используйте перекрестную проверку для выбора степени. Это основы машинного обучения. Прочитайте о регулировании (и резюме).

2. перекрестная проверка реализована в python?

3. Проверьте scikit-learn. Здесь есть все, что вам нужно, и многое, многое другое. Но опять же: ознакомьтесь с основами ML.

4. Если scikit-learn кажется излишним, вы можете изменить свой код, чтобы минимизировать статистику, которая наказывает за переобучение (AIC, BIC, снижение chi ^ s и т. Д.)