我正在学习机器学习,我的数据集由6列组成:
home_team, away_team, home_odds, away_odds, home_score, away_score, 1_if_home_wins_else_0
为了能够为团队提供Tensorflow,我将每个团队都转换为整数,因此前两列是整数(例如数据库ID)
csv中有1万行。
示例
现在,我正在尝试修改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]))
您知道问题出在哪里吗?
答案 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