Merci pour le sniper nerd.
J'ai créé un jeu de données de classification binaire pour tester ce problème.
x y weight
0 0 1
1 1 1
<repeated 25 times>
0 1 0
1 0 0
<repeated 25 times>
En utilisant python:
X = np.array([[0], [1]] * 25 + [[0], [1]] * 25)
y = np.array([ 0 , 1 ] * 25 + [ 1 , 0 ] * 25)
w = np.array([ 1 , 1 ] * 25 + [ 0 , 0 ] * 25)
Dans cet ensemble de données, nous pouvons voir que si les poids échantillons sont présents, le modèle produira un très bon ajustement et ont une très faible perte de journal. Si les poids ne sont pas présents, la perte sera extrêmement élevée.
Ensuite, nous pouvons construire utiliser GridSearchCV
pour voir si les poids sont utilisés.
clf = LogisticRegression(solver='newton-cg', C=100)
gs = GridSearchCV(clf, {},
fit_params={"sample_weight": w},
scoring="log_loss", cv=KFold(y.shape[0],10, shuffle=True))
gs.fit(X,y)
gs.grid_scores_
[mean: -2.68562, std: 0.68038, params: {}]
Nous pouvons voir que la perte est assez élevée, ce qui indiquerait que les poids ne sont pas utilisés.
J'ai écrit un correctif pour scikit-apprendre à résoudre ce problème. Veuillez le considérer expérimental. Après l'application du correctif, nous pouvons activer score_sample_weight
, répéter le test précédent et voir la perte de journal que nous attendons des poids pris en compte.
gs.score_sample_weight=True
gs.fit(X,y)
gs.grid_scores_
[mean: -0.00486, std: 0.00016, params: {}]
Il semble que 'GridSearchCV' ne prenne pas en charge' sample_weight'. Vous pouvez régler le modèle sans poids, utiliser 'cross_val_predict', puis le marquer vous-même. Je suppose que ce n'est pas ce que vous cherchez. –
'GridSearchCV' accepte les poids d'échantillon via l'option' fit_params' (puisque les poids de l'échantillon doivent être passés à la méthode 'fit'). J'utilise aussi 'RandomizedSearchCV' qui nécessiterait une bonne quantité de complexité à reproduire en utilisant' cross_val_predict' donc j'espère que le 'scorer' gère automatiquement les poids mais je n'arrive pas à trouver quoi que ce soit dans la documentation. – Chris
Cela fonctionne-t-il vraiment? Les poids devraient également être divisés en plis. Ils ne peuvent pas être passés naïvement à la fonction d'ajustement. –