Модель машинного обучения с scikit learn для прогнозирования временных рядов - PullRequest
0 голосов
/ 21 января 2020

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

Вот как выглядит мой набор данных:

Time                          PeopleCount
---------------------------------------------
2019-12-29 12:40:10               50
2019-12-29 12:42:10               30
2019-12-29 12:44:10               10
2019-12-29 12:46:10               10
2019-12-29 12:48:10               80
and so on...

Эти данные будут доступны в течение 30 дней.

После обучения модели я отправлю запрос модели на получите возможное время, когда в комнате будет меньше людей с 10:00 до 20:00. Я ожидаю, что модель машинного обучения ответит с 30-минутной точностью, ie. «15:00 - 15:30»

Какой алгоритм я могу использовать для решения этой проблемы и как мне достичь цели? Или есть какие-либо другие библиотеки Python, кроме SciKit-Learn, которые можно использовать для этой цели?

Я новичок в машинном обучении, извините за наивный вопрос.

Ответы [ 2 ]

1 голос
/ 28 января 2020

Прежде всего, предсказание временных рядов основано на теории, что текущая стоимость более или менее зависит от прошлых. Например, 80 человек по состоянию на 2019-12-29 12:48:10 должны сильно влиять на количество людей во время 12:46:10, 12:44:20 или предыдущих, коррелируя с прошлым ценности. Если нет, вам лучше использовать другой алгоритм для прогнозирования.

Хотя пакет scikit содержит различные модули в качестве алгоритма машинного обучения, большинство из них специализируются на алгоритме классификации. Я думаю, что алгоритм классификации, безусловно, удовлетворит ваше требование, если ваша дата не будет определена как тип временных рядов. На самом деле Scikit также имеет некоторый регрессионный модуль, хотя я думаю, что он не очень подходит для прогнозирования данных временных рядов.

В случае прогнозирования данных временных рядов, алгоритм RNN или LSTM (Deep Learning ) широко используется, но Scikit не предоставляет встроенный алгоритм. Таким образом, вам лучше изучить инфраструктуру Tensorflow или Pytorch, которые являются общими инструментами, позволяющими создавать модели RNN или LSTM.

1 голос
/ 21 января 2020

Модели SciKitLearn не распознают временные метки, поэтому вам придется разбить столбец временных меток на ряд функций, ie. день недели, час и т. д. c. Если вам нужна 30-минутная точность, вам придется как-то агрегировать данные из столбца PeopleCount, ie. записывать среднее, минимальное или максимальное количество людей в течение каждого 30-минутного интервала времени. Хорошей идеей может быть также создание отстающих функций ie. каково количество людей в предыдущем временном интервале или даже в 2, 3 или n временных интервалах a go.

Как только у вас есть готовые функции времени и метки (соответствующие количества людей), вы можете начать обучение ваши модели стандартным образом:

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

Для этой задачи должен подходить любой регрессор, ie. Ридж, Лассо, DecisionTreeRegressor, SVR et c. Однако обратите внимание, что если вам нужно получить наилучший временной интервал из заданного диапазона, вам нужно будет сделать прогнозы для каждого временного интервала из диапазона и выбрать тот, который соответствует критериям, хотя могут быть случаи, когда наименьшее прогнозируемое значение не меньше затем значение, с которым вы сравниваете.

Если вы не получите удовлетворительных результатов с регрессорами, ie. каждый раз, когда среднеквадратичные или среднеквадратичные ошибки слишком велики, вы можете придумать классификационный случай ie. вместо того, чтобы обучать регрессора прогнозировать количество людей, вы можете обучить классификатор, чтобы предсказать, будет ли счет больше 50 или нет.

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

...