Керас - как предсказать два значения вместо одного значения? - PullRequest
0 голосов
/ 22 сентября 2019

Я изучаю машинное обучение, и мой набор данных состоит из 7 столбцов:

home_team, away_team, home_odds, away_odds, home_score, away_score, 1_if_home_wins_else_0

Чтобы иметь возможность снабжать Tensorflow командами, я преобразовал каждую команду в целое число, поэтому первые два столбца являются целыми числами (как идентификаторы базы данных)

В csv есть 10 тыс. строк.

пример

enter image description here

Я изменил код для диабета индейцев пима , чтобы предсказать выигрыши домашней команды.

Так что теперь он "предсказывает", победит ли домашняя команда (1)в противном случае 0.

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

код

# load the dataset
dataset = loadtxt('football_data.csv', delimiter=',')
# split into input (X) and output (y) variables
X = dataset[:, 0:4]
y = dataset[:, 6]
# define the keras model
model = Sequential()
model.add(Dense(12, input_dim=4, activation='relu'))
model.add(Dense(8, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
# compile the keras model
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
# fit the keras model on the dataset
model.fit(X, y, epochs=150, batch_size=10)
# evaluate the keras model
_, accuracy = model.evaluate(X, y)
print('Accuracy: %.2f' % (accuracy * 100))

# make class predictions with the model
predictions = model.predict_classes(X)
# summarize the first 5 cases
for i in range(50):
    print('%s => %d (expected %d)' % (X[i].tolist(), predictions[i], y[i]))

Вы знаете, как это сделать?

1 Ответ

1 голос
/ 22 сентября 2019

Поскольку теперь вы хотите прогнозировать баллы, то есть непрерывное количество (хотя и целое число), это уже не проблема классификации, а регрессия единица.

Для этого вам нужнодва изменения в вашей существующей модели;во-первых, нужно изменить ваш последний слой на

model.add(Dense(2)) # final layer

, то есть на 2 узла (столько, сколько требуется для вывода) без какой-либо активации (что означает значение по умолчанию linear, то есть то, которое мы используем для регрессии).

Вторая модификация должна быть в потере:

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

Конечно, вам необходимо соответственно изменить данные y, чтобы они содержали по 2 элемента каждый, и вместо этого использовать model.predictиз model.predict_classes (поскольку у вас сейчас нет классов).

По сути, вы запрашиваете регрессию с несколькими выходами;см. также этот недавний поток: Как обучить модель регрессии для одиночного ввода и множественного вывода? - может быть, действительно лучше использовать функциональный API Keras, как показано там и уже предлагалось в комментариях.

...