【问题标题】:Keras predicts same result for any inputKeras 预测任何输入的相同结果
【发布时间】:2019-09-22 04:23:09
【问题描述】:

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

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 的代码以预测主队的奖金。

但它会向任何输入返回相同的预测 (0)。当我仅根据赔率进行尝试时,预测更准确,至少不一样。

代码

# 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 tensorflow keras


    【解决方案1】:

    将前两列(团队名称)转换为整数这一事实没有任何意义。这样一来,您将暗示具有相似 ID(例如 1146 和 1179)的团队将执行相似的操作,而具有完全不同 ID(例如 4 和 6542)的团队将执行非常不同的操作。通常这类数据会以不同的方式呈现,甚至会从数据集中排除。

    在这种情况下,我会排除这些列,因为赔率似乎包含所有必要的数据,我什至不会为此使用神经网络,而只是比较赔率。但是我知道您想使用一个简单的数据集进行学习,在这种情况下,只使用赔率就可以了。

    请注意,神经网络可能会学会将胜利分配给获胜几率最大的团队,如下所示:

    if home_odds > away_odds:
        one_if_home_wins_else_zero = 1
    else:
        one_if_home_wins_else_zero = 0
    

    【讨论】:

    • 是的,你是对的,“团队”包含在赔率中,所以这不是一个最佳主意。但是,如果你说的是真的,它不会预测所有预测的相同 (0) 结果,不是吗?
    • 对不起,现在预测的结果不一样了,忽略之前的评论 :)
    猜你喜欢
    • 2019-01-02
    • 2021-01-25
    • 1970-01-01
    • 2021-01-27
    • 1970-01-01
    • 1970-01-01
    • 2013-06-06
    • 2021-09-06
    • 1970-01-01
    相关资源
    最近更新 更多