Keras, traiter un probleme non binaire

a marqué ce sujet comme résolu.

Bonjour j’ai un jeu de donnée qui me permet de savoir si le joueur 1 a gagner:

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

J’arrive a prédire correctement si le joueur 1 va gagner sa partie avec mon modele:

import pandas as pd
from tensorflow.keras.models import Sequential
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']

model = Sequential()
model.add(Dense(12, input_shape=(3,), activation='relu'))
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)

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

Mais je voudrais étendre mon modele, en prenant en compte tous les joueurs avec ce nouveau jeu de donnée:

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

plutot que de prédire si le joueur 1 va gagner, je voudrais savoir si Bob va gagner contre Nathan. J’aimerais savoir quel méthode utiliser pour faire cela.

J’ai pensé ajouter 1 colonnes par joueur, avec un 0 et 1 si ils ont gagné mais: 1) ca ferais une matrice énorme 2) ca ferais des fausses informations, car a chaque match il n’y a que 2 joueurs qui joue pas tous.

ca ferais 3 colonne dans ce style:

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

ca me semble pas tres efficace, y’a t’il une solution plus adapté a ce genre de problématique ?

Autre question, dans mon jeu de donnée, j’ai des parametres plus important que d’autres. Existe t’il un modele capable de prioriser certaines variable ? Dans mon cas le nom de l’adversaire est la variable la plus importante (plus que la température ou le poids).

A priori, si j’ai bien compris, tu essaies d’introduire l’identité du joueur dans le modèle ? Alors effectivement, il faudrait une colonne par joueur (on appelle ca un One Hot Encoder).

Effectivement, ca demande une matrice plus grande (avec n colonnes en plus, pour n joueurs).

Mais à mon sens, le problème principal est: "est-ce que cela a un sens" ? Par exemple, as tu une liste "fixe" de joueurs, ou peut il en avoir des nouveaux ? (auquel cas tu sera coincée).

Pour la question "ca ferais des fausses informations", je ne vois pas en quoi ?

Pour la question sur l’importance des paramètres, en théorie le modèle apprends tout seul les bonnes pondérations (c’est en quelque sorte la seule chose qu’il fait, d’ailleurs).

== EDIT

Ah après coup je crois que j’ai mieux compris le premier problème. C’est qu’à l’output tu penses utiliser un neurone "John gagne", un neurone "Marie gagne" etc., c’est ca ? Alors à mon avis, il y a un moyen, mais plus compliqué:

  • définir un "joueur1" et un "joueur2", arbitrairement.
  • du coup avoir 2*n colonnes en entrée (avec du genre "joueur1_john", "joueur2_john","joueur1_marie", "joueur2_marie" etc.)
  • entrainer le modèle pour dire si "joueur1" ou "joueur2" gagne.

Le problème de ce modèle, c’est que on crée du "biais" en définissant un joueur1 et un joueur2… Donc il faudrait doubler chaque donnée en inversant les rôles… Enfin bref, ca me semble effectivement pas mal plus compliqué :)

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte