Обратите внимание, что это не будет использоваться для прогнозирования игр в пауэрболе, это просто простой проект для понимания техников машинного обучения, я знаю, что невозможно предсказать фактический пауэрбол.
Я создал простую игру, используя предсказуемый алгоритм.
Игра генерирует набор из 6 чисел. Числа от 1 - 49 [числа не могут повторяться]
Пример: 41, 35, 1, 2, 49, 24
Сумма вышеуказанных чисел составляет 151
Цель игры состоит в том, чтобы предсказать, будет ли сумма выше или ниже определенной точки. Допустим, 150
Пример таблицы:
Мое текущее ограниченное понимание говорит, что я, вероятно, могу использовать сеть 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]))
Из кода все прогнозы имеют одно и то же значение, которое кажется выключенным.
Что может быть не так, нужно ли использовать другой тип нейронной сети?