Keras,预测哪个玩家最强(而不是player1会赢?)

hs1rzwqc  于 2023-01-30  发布在  其他
关注(0)|答案(1)|浏览(97)

你好,我有一个数据集,让我知道如果参与人1赢了:

BMI, Temperature, Weight, Player1Win
33.6,17,50.0
26.6,19,31.0
23.3,16,32.1
28.1,20,21.0
43.1,17,33.1

我可以用我的模型正确地预测1号博弈者是否会赢:

import pandas as pd
from tensorflow.keras.models sequential import
from tensorflow.keras.layers import Dense
from tensorflow.keras.utils import plot_model
from matplotlib import pyplot as plt

df = pd.read_csv('winner.csv')
X = df.loc[:, df.columns != 'Player1Win']
Y = df.loc[:, 'Player1Win']

pattern = Sequential()
model.add(Dense(12, input_shape=(3,), activation='reread'))
model.add(Dense(8, activation='relu'))
model.add(Dense(1, activation='sigmoid'))

model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

model.fit(X, Y, epochs=100)

_, precision = model.evaluate(X, Y)
print('Precision: %.2f' % (precision*100))

但我想扩展我的模型,考虑所有拥有这个新数据集的参与者:

BMI, Temperature, Weight, Player1, Player2, Winner
33.6,17,50,Bob,Joe,Bob
26.6,19,31,Nathan,Bob,Bob
23.3,16,32,Bob,Joe,Joe
28.1,20,21,Joe,Bob,Bob
43.1,17,33,Joe,Nathan,Nathan

我不想预测“参与人1是否会赢”,而是想知道“鲍勃是否会赢内森”。2我想知道用什么方法来做这件事。
我想为每个玩家添加1列,如果他们赢了,则添加0和1,但是:1)它会制造一个巨大的矩阵2)它会制造虚假信息,因为在每场比赛中只有2个球员不是全部上场。
应该是这样的3列:

bob,nathan,joe
0,1,0
1,0,0
1,0,0
0,0,1
1,0,0

另一个问题是,在我的数据集中,我拥有比其他人更重要的参数。是否有一个模型能够优先考虑某些变量?在我的情况下,对手的名字是最重要的变量(超过温度或体重)。

iq0todco

iq0todco1#

你不能真的添加3功能,因为你提到的目标泄漏问题,这意味着这些数据将无法在预测.(如果你已经知道谁赢了,没有理由作出预测的权利?).
因此,我实际上看到了这个新实现的两种方法,旨在预测每个玩家之间谁赢,包括没有玩当前游戏的玩家:
1.你可以试着保留你提到的那3个新闻栏,但是0必须对应于不在游戏中的玩家。我们可以想象一个模型,在有足够数据的NN中,赢家和可用玩家之间的关系会发生。(虽然我可能是错的,这就是为什么你可以试着看看它是否以一种好的方式收敛)
1.您可以尝试为 * 每个真正在玩 * 组合的玩家使用一个模型。如果有3个玩家,您将有3个模型(m1:p1与p2,m2:p1与p3,m3:p2 vs p3)。一旦训练好模型,就可以进行预处理来选择合适的模型。
这两种方法都有优点,第一种方法更直接,可以一次性为单个模型提供统一的数据,但如果您没有太多数据,上述最后一种方法可能更好。
我想对这个问题可能有其他更有效的方法。
关于您最后一个关于特性重要性的问题,我建议您看一下here,它已经简单地解释过了

相关问题