#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 и т. Д.)