С линейной регрессией

Мотивация

Удивительно, сколько удовольствия можно получить от линейной регрессии.

Это работа моего магистра. Она реализовала этот простой алгоритм прогнозирования, чтобы изучить основы машинного обучения и линейной (поли) регрессии.

В этой статье описывается алгоритм обработки географических координат с использованием полиномиальной регрессии для расчета общего поведения движения. Основное преимущество этого алгоритма - наличие карты траекторий в любом регионе. Мы использовали язык программирования Python вместе с библиотеками scikit-learn и matplotlib для машинного обучения и визуализации. В конце концов, мы пытаемся спрогнозировать несколько шагов движения всех объектов на карте.

Главная мысль

В большинстве исследований по кластеризации траекторий движущиеся объекты рассматриваются отдельно. Мы делаем то же самое для предварительной обработки, но, в конце концов, получаем разделенные данные для меньших частей траекторий, которые будут передаваться в модель машинного обучения.

Во время предварительной обработки данных мы преобразуем отдельные точки в крошечные линии, которые представляют траектории, где длина линии соответствует скорости объекта. Затем мы добавляем дополнительные столбцы для построения многочленов.

Нам даются координаты каждого объекта в каждый момент времени, поэтому таблица ввода выглядит следующим образом:

  1. Идентификатор объекта
  2. Время (целочисленное поле, автоинкремент)
  3. Координата X
  4. Координата Y

На рисунке ниже показана простая визуализация траектории каждого объекта.

Как упоминалось ранее, мы добавляем дополнительные столбцы для перемещения данных и полиномов, поэтому после предварительной обработки у нас есть следующие дополнительные поля:

  1. Следующий x (nx): координата x в следующий момент
  2. Next y (ny): координата y в следующий момент
  3. dx: дельта X = nx - x
  4. dy: дельта Y = ny - y

Мы можем наблюдать разделение каждого шага на рисунке ниже:

Итак, данные почти готовы для подачи в модель линейной регрессии scikit-learn, последний шаг - добавить полиномиальные поля и запустить процесс обучения.

Модель регрессии должна возвращать два поля: x и y. Наши попытки объединить эти два поля не увенчались успехом, поэтому мы разделили процесс обучения на две части:

lin_x = LinearRegression()
lin_y = LinearRegression()
lin_x.fit(df[["x","y","x2","y2", "xy"]],df["dx"])
lin_y.fit(df[["x","y","x2","y2", "xy"]],df["dy"])

что для нашего случая дало нам следующие коэффициенты:

lin_x: [0.05523343, 0.05208924, -0.00024617, -0.00024446, 0.00044677]
lin_y: [0.08220028, 0.11533574, -0.00035998, -0.00032135, 0.0004776 ]

Здесь важно заметить, что вся модель уменьшена до этих 10 коэффициентов вместе с двумя точками пересечения (всего 12). При работе с большим объемом исторических данных последние могут быть обработаны и представлены этими числами.

Затем мы пытаемся предсказать общее поведение, создавая матрицу стрелок, которые показывают общее поведение всех объектов в каждой прямоугольной области. Поскольку мы реконструировали данные в более мелкие линейные сегменты, мы не предоставили поля идентификатора объекта и времени в нашу модель линейной регрессии. Это означает, что у нас есть общее поведение в каждой точке, независимо от объекта.

На следующем рисунке видно, что наша регрессионная модель довольно хорошо усвоила обычное поведение. В областях с отсутствующими данными движение инвертируется, но поскольку данных вообще не было, трудно предсказать движение.

Итак, мы попытались проверить, как меняется поведение движения при добавлении дополнительных данных в недостающие области. Мы не только заполнили нижнюю часть нашей карты, мы решили посмотреть, что произойдет, если этот объект останется в течение более длительного времени (20 шагов) в одной точке (680, 240), а затем медленно продвинется вперед.

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

Заключение

Модель простой полиномиальной регрессии дала нам лучшие результаты, чем мы имели раньше, когда использовали чисто алгоритмический подход. Хотя алгоритмический подход может иметь дело с более сложным поведением, можно также использовать более умные модели машинного обучения, такие как Random Forest Regressor, увеличивая степень полинома.

Подход машинного обучения выигрывает, когда нам нужно прогнозировать движение на основе исторических данных, и это может иметь решающее значение при выборе инструмента.

Следствием этого будет то, что бессмысленно гнаться за этими данными за пределами точности с помощью сложных, массовых методов. То есть все, что можно было уловить в этих данных, и поэтому уже было уловлено полиномиальной моделью. Это говорит нам о том, что иногда данные не так сложны, как кажется, и очень быстро можно прийти к фактическому максимуму того, что можно выжать из них. Более того, из-за значительного сокращения данных за счет выбора характеристик наша точность фактически не пострадала.

Итак, наше решение для этих данных оказалось не только простым, но и компактным. В результате мы получили общее направление движения предметов (животных).