LINUX.ORG.RU

Регрессия нескольких уравнений с условиями

 , , ,


0

2

Добрый день!

Я в математической статистике не силен, но надо реализовать одну штуку.

Есть входные данные (оранжевый цвет). Я делаю Curve fitting используя numpy.polyfit с порядком полинома 30 степени (зеленый цвет).

Рисунок 1

Как видно из Рисунка 1 имеются осциляции в начале графика. Мне надо их избежать. Уменьшая порядок полинома появляется плохое совпадение с входными данными.

Я придумал, что хорошо бы разбить входные данные на участки и для каждого участка подобрать свои коэффициенты используя полином 2-й степени (или большей степени при этом исключив из полинома нечетные степени). Получается следующее (здесь использовался полином с нечетными степенями, просто в качестве примера):

Рисунок 2

Как видно между функциями имеется разрыв. Этот разрыв можно устранить добавив граничное условие по равенствe значений граничащих функций и их 1-й и 2-й производных (для гладкости и монотонности).

Вопрос: Как такой алгоритм можно реализовать используя numpy и scipy?



Последнее исправление: Closius (всего исправлений: 2)

Гугли кубические сплайны. Бери понравившиеся

anonymous
()

Рисунок 2 намекает, что имеет смысл делать это в логарифмическом масштабе.

thunar ★★★★★
()
Ответ на: комментарий от ZERG

Там кусок который с осциляцией он на самом деле загибается в сторону возростания Х. То есть у функции есть минимум по Х.

По хорошему ее надо перевернуть. То есть у это х а х это у.

Closius
() автор топика
Ответ на: комментарий от bookman900

В смысле? Если я правильно понял вопрос, то только неавно понял, что мой метод - херня... Точки где сшивать то я не знаю.... Так что не получится так.

Closius
() автор топика
Ответ на: комментарий от anonymous

Только учти, что сплайны тоже любят осциллировать еще больше. Нужно брать сплайн с ограничением по углам поворота

Zodd ★★★★★
()
Ответ на: комментарий от anonymous

Какие спланый то??? Ткните в библиотеке scipy или numpy где там есть апроксимация сплайнами? Я нашел только интерполяцию со сглаживанием. Мне такое не подходит.

Closius
() автор топика
Ответ на: комментарий от anonymous

Спасибо за совет! Тоже думаю что надо функцию подбирать...

Closius
() автор топика
Ответ на: комментарий от anonymous

Кароч подобрал функцию и все отлично просто! Спасиб

Closius
() автор топика

порядком полинома 30 степени

Holy crap! Не делай так, если только это не фит по каким-то ортогональным полиномам, типа чебышевских.

unanimous ★★★★★
()
Ответ на: комментарий от Closius

А, понятно, иксперд в треде. Тогда все по машинам

Zodd ★★★★★
()
Ответ на: комментарий от unanimous

Есть подозрение, что он не совсем понимает, что делает/что нужно.

ZERG ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.