Scikit F-score de la métrique d'erreur
Je suis en train de prévoir un ensemble d'étiquettes à l'aide de De Régression logistique à partir de SciKit. Mes données est vraiment déséquilibré (il y a beaucoup plus de '0' de '1' étiquettes) donc je dois utiliser le F1 score métrique au cours de la croix-étape de validation pour "équilibrer" le résultat.
[Input]
X_training, y_training, X_test, y_test = generate_datasets(df_X, df_y, 0.6)
logistic = LogisticRegressionCV(
Cs=50,
cv=4,
penalty='l2',
fit_intercept=True,
scoring='f1'
)
logistic.fit(X_training, y_training)
print('Predicted: %s' % str(logistic.predict(X_test)))
print('F1-score: %f'% f1_score(y_test, logistic.predict(X_test)))
print('Accuracy score: %f'% logistic.score(X_test, y_test))
[Output]
>> Predicted: [0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0]
>> Actual: [0 0 0 1 0 0 0 0 0 1 1 0 0 1 0 0 0 0 0 0 0 1 1]
>> F1-score: 0.285714
>> Accuracy score: 0.782609
>> C:\Anaconda3\lib\site-packages\sklearn\metrics\classification.py:958:
UndefinedMetricWarning:
F-score is ill-defined and being set to 0.0 due to no predicted samples.
Je sais que le problème est lié à mon dataset: il est trop petit (il est seulement un échantillon de la vraie). Cependant, quelqu'un peut-il expliquer le sens de la "UndefinedMetricWarning" avertissement ce que je vois? Ce qui se passe réellement derrière les rideaux?
Sur une note de côté, si votre jeu de données est VRAIMENT déséquilibré (disons 100000 de '0' et 20 '1') vous pouvez aller loin de tâche de classification pour la détection des anomalies de l'approche. Pour les très biaisée des cas, il fonctionnera beaucoup mieux. Détails: scikit-learn.org/stable/modules/outlier_detection.html
Le déséquilibre est ici 70-30% environ donc je pense que c'est encore adapté à l'utilisation classique des classificateurs. Cependant, votre commentaire peut être extrêmement utile pour les personnes en difficulté avec vraiment biaisée ensembles de données, donc je vous remercie pour l'astuce de toute façon 🙂
Le déséquilibre est ici 70-30% environ donc je pense que c'est encore adapté à l'utilisation classique des classificateurs. Cependant, votre commentaire peut être extrêmement utile pour les personnes en difficulté avec vraiment biaisée ensembles de données, donc je vous remercie pour l'astuce de toute façon 🙂
OriginalL'auteur David | 2015-07-28
Vous devez vous connecter pour publier un commentaire.
Il semble que c'est un bug connu ici qui a été résolu, je pense que vous devriez essayer de mettre à jour sklearn.
OriginalL'auteur Geeocode
C'est bien décrit à https://stackoverflow.com/a/34758800/1587329:
Pour résoudre le problème de pondération (il est facile pour le classificateur à (presque) toujours de prédire la plus répandue de la classe), vous pouvez utiliser
class_weight="balanced"
:LogisticRegressionCV
dit:OriginalL'auteur serv-inc