我正在尝试建立一个模型,根据两支球队的角色来预测哪支球队将在流行游戏中获胜。我有大约60k个游戏的数据,其中赢/输用1 / -1表示,数据由游戏中各个角色的大约100列组成,每行有0表示不存在的角色,1表示角色在友方队伍中为-1,在对方队伍中为-1。我已经训练了一个简单的keras.Sequential()模型,但是我的训练准确率最高为35%,validation-acc仅最高为20%。我曾尝试调整模型的各个部分,但似乎从未获得更高的准确性。这是我的代码:
def build_model():
model = keras.Sequential([
layers.Dense(230, activation='relu', input_shape=[len(train_dataframe.keys())]),
layers.Dense(1,)
])
optimizer = tf.keras.optimizers.RMSprop(0.0008)
model.compile(loss='mse',
optimizer=optimizer,
metrics=['accuracy'])
return model
EPOCHS = 1000
history = model.fit(
X, y,
epochs=EPOCHS, validation_split = 0.3, verbose=1,
callbacks=[tfdocs.modeling.EpochDots()])
我的数据如下: 标签:
0 1
1 1
2 1
3 -1
4 1
..
92644 -1
92645 1
92646 1
92647 -1
92648 -1
Name: -1, Length: 92649, dtype: int64
功能:
0 0.1 0.2 0.3 0.4 0.5 ... 0.97 0.98 0.99 0.100 0.101 0.102
0 0 0 0 1 0 -1 ... 0 0 0 0 0 0
1 0 0 0 1 0 -1 ... 0 0 0 0 0 0
2 0 0 0 0 0 0 ... 0 0 0 0 0 0
3 0 0 0 0 0 -1 ... 0 0 0 0 0 0
4 0 1 0 0 0 0 ... 0 0 0 0 0 -1
... .. ... ... ... ... ... ... ... ... ... ... ... ...
92644 1 0 0 -1 0 0 ... 0 0 0 0 0 0
92645 0 0 0 0 -1 0 ... 0 0 0 0 0 0
92646 0 0 0 0 0 0 ... 0 0 0 0 0 0
92647 0 0 0 0 0 1 ... 0 0 0 0 0 0
92648 0 -1 0 0 1 0 ... 0 0 0 0 0 0
[92649 rows x 113 columns]
我感谢任何建议!
答案 0 :(得分:0)
您使用的是MeanSquaredError损失,而不是BinaryCrossentropy损失。由于您的输出是分类的(两个选项),因此应使用BinaryCrossentropy损失。
答案 1 :(得分:0)
您似乎拥有大量数据,这是机器学习中最重要的部分。
但是,如果您查看模型,则它没有隐藏层。尝试通过在输入和输出层之间添加一些层来使模型更深,并为每个隐藏层尝试使用不同数量的神经元。这可以提高您的准确性。我建议您也检查一下此类数据中使用的任何特殊体系结构的文献。
以下一些其他参数可能会影响您的准确性:
我希望这会有所帮助。