В настоящее время у меня есть большой набор данных, для которого мне нужно вычислить сегментированную регрессию (или подогнать кусочно-линейную функцию аналогичным образом). Однако у меня есть как большой набор данных, так и очень большое количество штук.
В настоящее время у меня есть следующий подход:
- Пусть si будет концом отрезка i
- Пусть (xi,yi) обозначает i-ю точку данных
Предположим, что точка данных xk находится в сегменте j, тогда я могу создать вектор из xk как
(s1,s2-s1,s3-s2 ,...,xk-sj-1,0,0,...)
Чтобы выполнить сегментированную регрессию для точки данных, я могу выполнить обычную линейную регрессию для каждого из этих векторов.
Однако мои текущие оценки показывают, что если я поставлю задачу таким образом, я получу около 600 000 векторов, каждый из которых содержит около 2 000 компонентов. Я еще не проводил бенчмаркинг, но не думаю, что мой компьютер сможет вычислить такую большую задачу регрессии за приемлемое время.
Есть ли лучший способ вычислить такую проблему регрессии? Одна идея заключалась в том, чтобы, возможно, использовать какой-то иерархический подход, то есть вычислить одну задачу регрессии, объединив несколько сегментов, чтобы я мог определить начальную и конечную точки для этого набора. Затем вычислите индивидуальную сегментированную регрессию для этого набора сегментов. Однако я не могу понять, как рассчитать регрессию для этого набора сегментов, чтобы конечные точки совпадали (я могу сопоставить только начальную или конечную точку, зафиксировав точку пересечения, но не обе).
Еще одна идея, которая у меня была, заключалась в том, чтобы рассчитать индивидуальную регрессию для каждого из сегментов, а затем использовать наклон только для этого сегмента. Однако при таком подходе могут начать накапливаться ошибки, и у меня нет возможности контролировать такое накопление ошибок.
Еще одна идея заключается в том, что я мог бы выполнить индивидуальную регрессию для каждого сегмента, но зафиксировать точку пересечения в конечной точке предыдущего сегмента. Тем не менее, я все еще не уверен, смогу ли я таким образом получить какое-то накопление ошибок.
Пояснение
Не уверен, что это было ясно из остальной части вопроса. Я знаю, где сегменты начинаются и заканчиваются. Самая важная часть заключается в том, что я должен заставить каждый сегмент линии пересекаться на границе сегмента со следующим сегментом.
ИЗМЕНИТЬ
Может быть, еще один факт, который мог бы помочь. Все точки имеют разные значения x.