LSTM для прогноза игры в пауэрбол - PullRequest
0 голосов
/ 31 марта 2019

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

Я создал простую игру, используя предсказуемый алгоритм.

Игра генерирует набор из 6 чисел. Числа от 1 - 49 [числа не могут повторяться]

Пример: 41, 35, 1, 2, 49, 24 Сумма вышеуказанных чисел составляет 151

Цель игры состоит в том, чтобы предсказать, будет ли сумма выше или ниже определенной точки. Допустим, 150

Пример таблицы: enter image description here

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

Я использовал приведенную ниже реализацию, основанную на сети прогнозирования запасов, поэтому она может подходить или не подходить для этой конкретной задачи.

Выполнить код в Google Colab

# -*- coding: utf-8 -*-
"""ML LSTM.ipynb

Automatically generated by Colaboratory.

Original file is located at
    https://colab.research.google.com/drive/13be9SAeFogZLEJlg6DMLCizL67ib7c-t

### Code for Python Array
"""

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.preprocessing import MinMaxScaler
from keras.models import Sequential, load_model
from keras.layers import LSTM, Dense, Dropout

!git clone https://github.com/updatesvc/gameML.git

!ls gameML

df = pd.read_csv('gameML/bets (1).csv',sep=';')
df =  df.sort_values('betid')
df = df[0:5000]
df.head()

conditions = [
    (df['result'] == 'L'),
    (df['result'] == 'M'),
    (df['result'] == 'H')]
choices = [0,0.5,1]
df['resultB'] = np.select(conditions, choices)

df.head()

df = df['sum'].values
print(df.shape)

df = df.reshape(-1, 1)
print(df.shape)

dataset_train = np.array(df[:int(df.shape[0]*0.8)])
dataset_test = np.array(df[int(df.shape[0]*0.8)-100:])
print(dataset_train.shape)
print(dataset_test.shape)

scaler = MinMaxScaler(feature_range=(0,1))
dataset_train = scaler.fit_transform(dataset_train)
dataset_train[:5]

dataset_test = scaler.transform(dataset_test)
dataset_test[:5]

def create_dataset(df):
    x = []
    y = []
    for i in range(100, df.shape[0]):
        x.append(df[i-100:i, 0])
        y.append(df[i, 0])
    x = np.array(x)
    y = np.array(y)
    return x,y

x_train, y_train = create_dataset(dataset_train)
x_train[:1]

x_test, y_test = create_dataset(dataset_test)
x_test[:1]

x_train = np.reshape(x_train, (x_train.shape[0], x_train.shape[1], 1))
x_test = np.reshape(x_test, (x_test.shape[0], x_test.shape[1], 1))

import tensorflow as tf
model = Sequential()
model.add(LSTM(units=96, return_sequences=True, input_shape=(x_train.shape[1], 1)))
model.add(Dropout(0.2))
model.add(LSTM(units=96, return_sequences=True))
model.add(Dropout(0.2))
model.add(LSTM(units=96, return_sequences=True))
model.add(Dropout(0.2))
model.add(LSTM(units=96))
model.add(Dropout(0.2))
model.add(Dense(units=1,activation=tf.nn.softmax))

model.compile(loss='mean_squared_error', optimizer='adam')

model.fit(x_train, y_train, epochs=1, batch_size=32)

#print(x_test[i])

predictions = model.predict(x_train)

predictions = scaler.inverse_transform(predictions)

for i in range (100):
  print ("actual value "+str(y_train[i])+" and prediciton "+str(predictions[i]))

Из кода все прогнозы имеют одно и то же значение, которое кажется выключенным. Что может быть не так, нужно ли использовать другой тип нейронной сети?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...