Добро пожаловать обратно! Несколько недель назад я рассмотрел некоторые методы прогнозирования цен на акции с использованием машинного обучения и Python, теперь давайте попробуем сделать то же самое с криптовалютой, в частности с Doge Coin. Это пошаговое руководство на довольно высоком уровне, это не полное руководство по обучению машинному обучению, тем более, что мы рассматриваем некоторые возможности, которые может иметь машинное обучение. Во-первых, мы собираемся использовать Google Colab для запуска этого кода, к счастью для нас, этот код в значительной степени уже разработан: Пожалуйста, отдайте должное этому веб-сайту за код, я добавил немного больше функциональности с прикрепленным кодом! Вот ссылка для доступа к проекту Google Colab, вы также можете скопировать код в свою Python IDE, если хотите.

Примечание. Это довольно сложное руководство. Я предполагаю, что вы знаете, что хорошо разбираетесь в Python / объектно-ориентированном программировании, немного разбираетесь в машинном обучении и знакомы с Pandas / Numpy. У меня есть учебные пособия, которые должны вас познакомить, но вот Основное введение в машинное обучение, которое я написал. Хорошо, давайте приступим!

Импорт / установка пакетов

Как всегда, нам придется импортировать эти пакеты, мы используем numpy, pandas, matplotlib и SciKit-Learn, а также финансовые пакеты Yahoo, вы можете установить их через pip, но поскольку мы используем Google Colab, они уже созданы. in. Мы устанавливаем эти пакеты следующим образом:

#INSTALL THESE PACKAGES IF NEEDED
!pip install yfinance
!pip install yahoofinancials

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

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.metrics import mean_absolute_error as mae
from sklearn.preprocessing import StandardScaler
import yfinance as yf
from yahoofinancials import YahooFinancials

Потрясающий! Далее нам нужно импортировать набор данных, мы делаем это с помощью финансового пакета Yahoo yf. , это позволит нам загрузить данные, используя символ билета и диапазон дат, для этого используется следующий код:

#CREATING THE DATAFRAME TO STORE DATA
df = yf.download('DOGE-USD',
         start='2021-01-01',
         end='2021-04-01',
         progress=False)

Мы можем распечатать эти данные с помощью функции df.head ():

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

series = df[‘Close’].values.reshape(-1, 1)

Здорово! Причина, по которой мы храним это в другой переменной, заключается в том, что мы собираемся подогнать нашу модель машинного обучения к этому конкретному значению. Затем нам нужно нормализовать данные, мы сначала начинаем с объявления нашего масштабатора, это позволит нам иметь среднее значение 0 при нашем стандартном отклонении 1, затем мы подгоним наши близкие данные, которые мы создали в приведенном выше коде для только что созданного средства масштабирования, затем мы объявляем переменную «series» обратно в преобразованный модуль масштабирования, который преобразуется в одномерный массив с помощью команды «.flatten» в Numpy. Кажется, много (и это так), но вот код для этого:

scaler = StandardScaler()
scaler.fit(series[:len(series) // 2])
series = scaler.transform(series).flatten()

Потрясающий! Теперь мы должны создать несколько новых фреймов данных, которые помогут нам хранить данные, давайте пойдем строка за строкой (почти), давайте продолжим и начнем с создания этих переменных / пустых фреймов данных:

T = 10
D = 1
X = []
Y = []

Потрясающий! теперь мы собираемся использовать «T» в качестве нашей прошлой переменной, то есть на сколько дней мы вернемся, чтобы предсказать будущее. Далее мы собираемся использовать цикл for для просмотра данных нашей серии, поэтому давайте начнем с объявления нашего цикла for, мы будем использовать следующую строку:

for t in range(len(series) — T):

Обратите внимание, что мы используем строчную букву «t», которая является нашим счетчиком в этом конкретном примере. Далее давайте заполним наш цикл for, так что теперь мы хотим сохранить данные нашей серии, используя наш счетчик, в другую переменную (x в этом примере) с помощью разрезая набор данных, затем добавьте эти данные в наш фрейм данных X в верхнем регистре, который мы объявили выше, вот эти строки в нашем цикле for:

x = series[t:t+T]
  X.append(x)

Теперь мы делаем то же самое, но вместо того, чтобы нарезать набор данных, мы собираемся просто использовать его в качестве счетчика в наборе данных серии, а затем добавляем те же данные во фрейм данных Y, который мы создали ранее.

y = series[t+T]
  Y.append(y)

Наконец, мы хотим изменить форму нашего фрейма данных, это в основном придаст новую форму нашему фрейму данных без изменения каких-либо данных в этом фрейме данных, затем мы также создадим массив для фрейма данных «Y», наконец, мы получит длину массива «X» и сохранит ее в новой переменной с именем «N».

X = np.array(X).reshape(-1, T)
Y = np.array(Y)
N = len(X)
print(“X.shape”, X.shape, “Y.shape”, Y.shape)

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

class BaselineModel:
  def predict(self, X):
    return X[:,-1] # return the last value for each input sequence

Далее нам нужно разделить наши данные на набор для обучения и тестирования. Мы делаем это, создавая переменные Xtrain & Train, затем мы используем переменные «X» и «N», которые мы использовали раньше, чтобы заполнить эти переменные данными, мы, по сути, делаем то же самое с нашими переменными «Xtest» и «Ytest» с помощью другая половина данных для нашего тестового набора:

Xtrain, Ytrain = X[:-N//2], Y[:-N//2]
Xtest, Ytest = X[-N//2:], Y[-N//2:]

Потрясающий! Далее, давайте продолжим и настроим нашу модель, мы собираемся создать переменную «модель», которая содержит наш класс «BaselineModel», мы собираемся создать несколько новых переменных для передачи наших обучающих и тестовых фреймов данных, мы делаем это используя следующий код:

model = BaselineModel()
Ptrain = model.predict(Xtrain)
Ptest = model.predict(Xtest)

Здорово! Теперь мы собираемся изменить форму наших массивов еще раз и сохранить их в другую переменную, а также создать одномерный массив с помощью Numpy:

Ytrain2 = scaler.inverse_transform(Ytrain.reshape(-1, 1)).flatten()
Ytest2 = scaler.inverse_transform(Ytest.reshape(-1, 1)).flatten()
Ptrain2 = scaler.inverse_transform(Ptrain.reshape(-1, 1)).flatten()
Ptest2 = scaler.inverse_transform(Ptest.reshape(-1, 1)).flatten()

Почти готово! Теперь мы собираемся пойти дальше и отправить наши данные для большей части прогнозов, будущие данные будут добавлены в нашу переменную «прогноз», а затем наши данные будут построены с использованием пакета matplotlib! Вот код для этого:

# right forecast
forecast = []
input_ = Xtest[0]
while len(forecast) < len(Ytest):
  f = model.predict(input_.reshape(1, T))[0]
  forecast.append(f)
  # make a new input with the latest forecast
  input_ = np.roll(input_, -1)
  input_[-1] = f
plt.plot(Ytest, label=’target’)
plt.plot(forecast, label=’prediction’)
plt.legend()
plt.title(“Right forecast”)
plt.show()

И это наш результат!

Поздравляю! Вы только что предсказали будущее Doge Coin с помощью машинного обучения! Я настоятельно рекомендую не использовать это как финансовый совет, это просто проект, направленный на развитие ваших навыков. Хотя мы смогли предсказать будущее, вы можете видеть, что это не было полностью точным, одна из причин, по которой я думаю, что это, возможно, так, - это экстремальный рост Doge Coin с января, эти предположения очень важно учитывать при разработке проектов машинного обучения. .

Как всегда

Как всегда, если у вас есть какие-либо предложения, мысли или вы просто хотите пообщаться, не стесняйтесь связаться / подписаться на меня в Twitter! Кроме того, ниже приведены ссылки на некоторые из моих любимых ресурсов по изучению программирования, Python, R, Data Science и т. Д.



Спасибо за чтение!