Прогнозировать следующие числа - PullRequest
0 голосов
/ 20 января 2020

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

[[1, 3, 4, 20, 21. 12],
[44, 33, 22, 11, 10, 3] ...]

Я также создал скрипт, который использует керасы для предиката чисел, но теперь я получил ошибку 'ValueError: Ошибка при проверке цели: для плотность_1 указана форма (6,), но получен массив с формой ( 1,). Когда я изменяю Dense (6) на Dense (1), я получаю еще одну ошибку в строке

trainPredict = scaler.inverse_transform(trainPredict)

ValueError: не транслируемый выходной операнд с формой (4440,1) не соответствует форме трансляции (4440,6) '.

Как я могу решить эту проблему, чтобы получить 6 номеров? Есть ли способ удалить create_data_set? Я нашел это, но я даже не понимаю этого. Может быть, у кого-то есть пример с такой проблемой, когда сценарии должны предсказывать некоторые числа

def create_data_set(_data_set, _look_back=1):
    data_x, data_y = [], []
    for i in range(len(_data_set) - _look_back - 1):
        a = _data_set[i:(i + _look_back), 0]
        data_x.append(a)
        data_y.append(_data_set[i + _look_back, 0])
    return np.array(data_x), np.array(data_y)

pathToFile = './dl.txt'
dataset = pd.read_csv(pathToFile, sep=' ', header=None, usecols=(1,2), names=['date', 'numbers'])
dataset = dataset['numbers'].values
parsedDataset = []
for i in dataset:
    parsedDataset.append(i.split(','))
dataset = parsedDataset
dataset = np.array(dataset)
dataset.astype('float64')

scaler = MinMaxScaler(feature_range=(0, 1))
dataset = scaler.fit_transform(dataset)
train, test = train_test_split(dataset, test_size=0.30, random_state=40)
train_x, train_y = create_data_set(train, 1)
test_x, test_y = create_data_set(test, 1)
print(train_x.shape[0])
train_x = np.reshape(train_x, (train_x.shape[0],1, train_x.shape[1]))
test_x = np.reshape(test_x, (test_x.shape[0], 1, test_x.shape[1]))

model = Sequential()
model.add(LSTM(256, input_shape=(train_x.shape[1], train_x.shape[2]),return_sequences=True))
model.add(LSTM(128))
model.add(Dense(6))
model.compile(loss='mse', optimizer='adam',metrics=['acc'])
model.fit(train_x, train_y, epochs=3, batch_size=1, verbose=0)
trainPredict = model.predict(train_x)
testPredict = model.predict(test_x)

trainPredict = scaler.inverse_transform(trainPredict)
train_y = scaler.inverse_transform([train_y])
testPredict = scaler.inverse_transform(testPredict)
test_y = scaler.inverse_transform([test_y])
for i in range(testPredict.shape[1]):
        print("%.1f"%(testPredict[0,i]), end=' ')
print('\n',end="")     

1 Ответ

0 голосов
/ 20 января 2020

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

Ваш подход может быть использован для определения возможного продолжения данной серии чисел или чего-то подобного (так как есть какое-то "правило", которое при достаточно большом наборе данных может наверное разберусь). Но нет никаких (скрытых) закономерностей с лотерейными номерами, поэтому то, что вы пытаетесь достичь, кажется мне довольно невозможным.

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