LSTM очень эффективны в задачах прогнозирования последовательности, потому что они могут хранить прошлую информацию. В нашем случае это важно, потому что предыдущая цена акции имеет решающее значение для прогнозирования ее будущей цены.
Мы начнем с импорта NumPy для научных вычислений, Matplotlib для построения графиков и Pandas для помощи в загрузке и работе с нашими наборами данных.
Глубокое обучение - для экспертов, экспертами. Мы используем наш многолетний опыт, чтобы еженедельно доставлять в ваш почтовый ящик лучшие ресурсы для глубокого обучения.
Загрузка набора данных
Следующим шагом является загрузка нашего обучающего набора данных и выбор столбцов Open
и High
, которые мы будем использовать при моделировании.
Мы проверяем заголовок нашего набора данных, чтобы получить представление о том, с каким набором данных мы работаем.
Столбец Open
- это начальная цена, а столбец Close
- окончательная цена акции в определенный торговый день. Столбцы High
и Low
представляют самые высокие и самые низкие цены за определенный день.
Масштабирование функций
Из предыдущего опыта работы с моделями глубокого обучения мы знаем, что нам необходимо масштабировать наши данные для достижения оптимальной производительности. В нашем случае мы воспользуемся Scikit- Learn MinMaxScaler
и масштабируем наш набор данных до чисел от нуля до единицы.
Создание данных с временными шагами
LSTM ожидают, что наши данные будут в определенном формате, обычно в виде трехмерного массива. Мы начинаем с создания данных за 60 временных шагов и преобразования их в массив с помощью NumPy. Затем мы конвертируем данные в массив трехмерных измерений с X_train
выборками, 60 отметками времени и одной функцией на каждом этапе.
Сборка LSTM
Для сборки LSTM нам нужно импортировать пару модулей из Keras:
Sequential
для инициализации нейронной сетиDense
для добавления плотно связанного слоя нейронной сетиLSTM
для добавления слоя долгосрочной краткосрочной памятиDropout
для добавления выпадающих слоев, предотвращающих переоснащение
Мы добавляем слой LSTM, а позже добавляем несколько Dropout
слоев, чтобы избежать переобучения. Мы добавляем слой LSTM со следующими аргументами:
50 units
, который является размерностью выходного пространстваreturn_sequences=True
, который определяет, следует ли возвращать последний вывод в выходной последовательности или полную последовательность.input_shape
как форма нашего тренировочного набора.
При определении Dropout
слоев мы указываем 0,2, что означает, что 20% слоев будут отброшены. После этого мы добавляем слой Dense
, который определяет выход 1 единицы. После этого мы компилируем нашу модель с помощью популярного Adam optimizer и устанавливаем потери как mean_squarred_error
. Это позволит вычислить среднее квадратов ошибок. Затем мы настраиваем модель для работы в 100 эпох с размером пакета 32. Имейте в виду, что в зависимости от характеристик вашего компьютера это может занять несколько минут.
Прогнозирование будущих запасов с помощью тестового набора
Сначала нам нужно импортировать набор тестов, который мы будем использовать, чтобы делать наши прогнозы.
Чтобы предсказать будущие цены на акции, нам нужно сделать несколько вещей после загрузки в тестовый набор:
- Объедините обучающий набор и тестовый набор на оси 0.
- Установите временной шаг как 60 (как показано ранее).
- Используйте
MinMaxScaler
для преобразования нового набора данных - Измените форму набора данных, как это было сделано ранее
Сделав прогнозы, мы используем inverse_transform
, чтобы вернуть цены акций в нормальном читаемом формате.
Построение результатов
Наконец, мы используем Matplotlib для визуализации результата прогнозируемой цены акции и реальной цены акции.
Из графика мы видим, что реальная цена акции выросла, в то время как наша модель также предсказывала, что цена акции вырастет. Это ясно показывает, насколько мощны LSTM для анализа временных рядов и последовательных данных.
Заключение
Есть несколько других методов прогнозирования цен на акции, такие как скользящие средние, линейная регрессия, K-ближайшие соседи, ARIMA и Prophet. Это методы, которые можно протестировать самостоятельно и сравнить их производительность с Keras LSTM. Если вы хотите узнать больше о Keras и глубоком обучении, вы можете найти мои статьи об этом здесь и здесь.
Обсудите этот пост на Reddit и Hacker News.
Примечание редактора. Heartbeat - это онлайн-издание и сообщество, созданное авторами и посвященное предоставлению первоклассных образовательных ресурсов для специалистов по науке о данных, машинному обучению и глубокому обучению. Мы стремимся поддерживать и вдохновлять разработчиков и инженеров из всех слоев общества.
Независимая редакция, Heartbeat спонсируется и публикуется Comet, платформой MLOps, которая позволяет специалистам по обработке данных и группам машинного обучения отслеживать, сравнивать, объяснять и оптимизировать свои эксперименты. Мы платим участникам и не продаем рекламу.
Если вы хотите внести свой вклад, отправляйтесь на наш призыв к участникам. Вы также можете подписаться на наши еженедельные информационные бюллетени (Deep Learning Weekly и Comet Newsletter), присоединиться к нам в » «Slack и подписаться на Comet в Twitter и LinkedIn для получения ресурсов, событий и гораздо больше, что поможет вам быстрее и лучше строить лучшие модели машинного обучения.