Есть ли в Python функция или библиотека для автоматического вычисления наилучшего полинома, подходящего для набора точек данных? Меня не очень интересует вариант использования машинного обучения для обобщения на набор новых данных, я просто сосредотачиваюсь на данных, которые у меня есть. Я понимаю, что чем выше степень, тем лучше подходит. Тем не менее, я хочу что-то, что наказывает или смотрит, где локти ошибки? Когда я говорю «толкаться локтями», я имею в виду что-то вроде этого (хотя обычно это не так резко или очевидно): 
Одна из моих идей заключалась в том, чтобы использовать polyfit Numpy: 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, которые могут помочь в поиске подходящего полиномиального соответствия (без необходимости указывать порядок / степень)? Буду признателен за любые мысли или предложения! Спасибо!
Полагаю, что так. Мне была поставлена задача найти «наилучший» или «наиболее подходящий» полином для произвольного набора точек данных. Поскольку проблема была расплывчатой, я почувствовал необходимость наложить условия и продолжить работу (хотя, пожалуйста, внесите свой вклад, если вы думаете о чем-то другом). Я склонялся к MSE, потому что это то, с чем я больше всего знаком, но, опять же, функцию стоимости можно изменить. Не могли бы вы также подробнее рассказать о предложенном вами подходе со сплайнами? Спасибо!
Я думал о том, как в пределах одной ступени могут быть разные виды шлицев, например, естественные и зажимные. Я надеялся, что с большим количеством подгонок на градус, локоть будет более плавным, а где-то в промежутке таится еще лучшая модель. Компромисс будет заключаться в том, чтобы найти более подходящую реализацию по сравнению с более сложной реализацией.
Есть ли у вас какое-то представление о максимальной кривизне, которую можно ожидать от такой автоматической подгонки данных - то есть, есть ли у вас какой-то идеал из ожидаемых данных, который может быть переобученным полиномом на основе производной?
Если у вас есть изгибы, я предлагаю использовать сплайн вместо полинома (сплайн - это, по сути, кусочный полином). См. определение сплайна и слипчивые шлицы. Вы также можете попробовать разные полифиты и сравнить ошибку и степень. Другой подход - использовать многомерную регрессию против различных степеней x.






Чтобы выбрать «правильную» подгонку и предотвратить чрезмерную подгонку, вы можете использовать Информационный критерий Акиаке или Байесовский информационный критерий. Обратите внимание, что ваша процедура подбора может быть небайесовской, и вы все равно можете использовать ее для сравнения подгонок. Вот быстрое сравнение между двумя методами.
Вы хотите несколько минимизировать RSS, но при этом избежать переобучения? Я бы попробовал несколько разных шлицев и пошел бы на осмотр. Можете ли вы аналитически определить функцию затрат на «выталкивание»? Это поможет.