Я ищу библиотеку Python, которая может выполнять сегментированную регрессию (так называемая кусочная регрессия) .
Пример :
python
linear-regression
library
software-recommendation
Франк Дернонкур
источник
источник
Ответы:
numpy.piecewise
могу сделать этоПример приведен на SO здесь . Для полноты вот пример:
источник
Метод, предложенный Vito MR Muggeo [1], относительно прост и эффективен. Он работает для определенного количества сегментов и для непрерывной функции. Позиции точек останова итеративно оцениваются путем выполнения для каждой итерации сегментированной линейной регрессии, позволяющей выполнять скачки в точках останова. Из значений переходов выводятся следующие позиции точек останова до тех пор, пока не исчезнут разрывы (переходы).
В частности, сходимость или результат могут зависеть от первой оценки точек останова.
Этот метод используется в пакете R Segmented .
Вот реализация в Python:
Пример:
[1]: Muggeo, VM (2003). Оценка регрессионных моделей с неизвестными контрольными точками. Статистика в медицине, 22 (19), 3055-3071.
источник
Я искал то же самое, и, к сожалению, в настоящее время его нет. Некоторые предложения о том, как поступить, можно найти в этом предыдущем вопросе .
В качестве альтернативы вы можете посмотреть некоторые библиотеки R, например, сегментированные, SiZer, strucchange, и если что-то там работает, попробуйте встроить код R в python с помощью rpy2 .
Редактирование, чтобы добавить ссылку на py-earth , «Реализация многомерного адаптивного регрессии Джерома Фридмана на Python».
источник
В блоге есть рекурсивная реализация кусочной регрессии. Это решение соответствует прерывистой регрессии.
Если вы недовольны прерывистой моделью и хотите непрерывную настройку, я бы предложил поискать вашу кривую на основе
k
L-образных кривых, используя лассо для разреженности:Этот код вернет вам вектор оценочных коэффициентов:
Из-за подхода Лассо он редок: модель нашла ровно одну точку останова среди 10 возможных. Числа 0,57 и 0,825 соответствуют 0,5 и 1,25 в истинном DGP. Хотя они не очень близки, подгонка кривых:
Такой подход не позволяет точно оценить точку останова. Но если ваш набор данных достаточно большой, вы можете поиграть с другим
k
(возможно, настроить его путем перекрестной проверки) и достаточно точно оценить точку останова.источник