Keras会对任何输入预测相同的结果

时间:2019-09-21 19:50:00

标签: python tensorflow keras

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

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

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

csv中有1万行。

示例

enter image description here

现在,我正在尝试修改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]))

您知道问题出在哪里吗?

1 个答案:

答案 0 :(得分:1)

将前两列(团队名称)转换为整数这一事实没有任何意义。这样,您将暗示具有相似ID(例如SQL> with t1 (marvel, dc) as 2 (select 'Littlefoot', 'lefo' from dual union all 3 select 'Bigfoot' , null from dual --> don't return this one ... 4 ) 5 select * 6 from t1 7 where marvel like '%' || dc ||'%' 8 and dc is not null; --> ... so add this condition MARVEL DC ---------- ---- Littlefoot lefo SQL> 1146)的团队将执行相似的操作,并且具有完全不同ID(例如1179和{{1})的团队},效果会大不相同。通常,这类数据会以不同的方式呈现,甚至会从数据集中排除。

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

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

4