【问题标题】:Keras - how to predict two values instead of one value?Keras - 如何预测两个值而不是一个值?
【发布时间】:2020-01-22 21:27:00
【问题描述】:

我正在学习机器学习,我的数据集由 7 列组成:

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

为了能够为 Tensorflow 提供团队,我将每个团队都转换为整数,因此前两列是整数(如数据库 ID)

csv 中有 10k 行。

示例

我修改了pima indians diabetes 的代码来预测主队的奖金

所以现在它“预测”主队是否获胜 (1),否则为 0。

现在我想修改算法来预测准确的分数home_scoreaway_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]))

你知道怎么做吗?

【问题讨论】:

标签: python machine-learning keras neural-network


【解决方案1】:

既然您现在想要预测分数,即一个连续的量(尽管是整数),这不再是一个分类问题,而是一个回归问题。

为此,您需要对现有模型进行两项更改;第一个是将你的最后一层修改为

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

即2 个节点(与所需的输出一样多),没有任何激活(这意味着默认的 linear,即我们用于回归的那个)。

第二个修改应该在loss里:

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

您当然需要相应地修改您的 y 数据以便每个包含 2 个元素,并使用 model.predict 而不是 model.predict_classes(因为您现在没有类)。

您要求的本质上是多输出回归;另请参阅这个最近的线程:How to train a Regression model for single input and multiple output? - 使用功能性 Keras API 可能会更好,如那里所示并且已经在 cmets 中建议。

【讨论】:

    猜你喜欢
    • 2019-11-21
    • 1970-01-01
    • 2016-07-19
    • 1970-01-01
    • 1970-01-01
    • 2020-09-03
    • 1970-01-01
    • 2018-09-10
    • 1970-01-01
    相关资源
    最近更新 更多