Найти подходящий полином для данных в Python

Есть ли в Python функция или библиотека для автоматического вычисления наилучшего полиномиального соответствия для набора точек данных? Я не очень заинтересован в случае использования ML для обобщения набора новых данных, я просто сосредотачиваюсь на данных, которые у меня есть. Я понимаю, что чем выше степень, тем лучше. Тем не менее, я хочу что-то, что оштрафует или смотрит, где ошибка локти? Когда я говорю о локтях, я имею в виду что-то вроде этого (хотя обычно это не так резко или очевидно):

У меня была одна идея - использовать полифит Нампи: https://docs.scipy.org/doc/numpy-1.15.0/reference/generated/numpy.polyfit.html для вычисления полиномиальной регрессии для диапазона порядков / градусов. Polyfit требует от пользователя указать степень полинома, что создает проблему, потому что у меня нет никаких предположений или предвзятых представлений. Чем выше степень соответствия, тем ниже будет погрешность, но в конечном итоге она становится плато, как на изображении выше. Поэтому, если я хочу автоматически вычислить степень полинома, в которой кривая ошибки изгибается: если моя ошибка - E, а d - моя степень, я хочу максимизировать (E[d+1]-E[d]) - (E[d+1] - E[d]).

Это даже правильный подход? Существуют ли другие инструменты и подходы в хорошо зарекомендовавших себя библиотеках Python, такие как Numpy или Scipy, которые могут помочь в поиске подходящего полиномиального соответствия (без необходимости указывать порядок / степень)? Буду признателен за любые мысли или предложения! Спасибо!

1 ответ

Чтобы выбрать "правильную" подгонку и предотвратить перенастройку, вы можете использовать Информационный критерий Акиаке или Байесовский информационный критерий. Обратите внимание, что ваша процедура подбора может быть не байесовской, и вы все равно можете использовать ее для сравнения подгонок. Вот быстрое сравнение между двумя методами.

Другие вопросы по тегам