XgBoost : Les moins peuplées de la classe en y a seulement 1 membres, ce qui est trop peu
Im en utilisant Xgboost mise en œuvre sur sklearn pour un kaggle de la concurrence.
Cependant, je suis de cet "avertissement" message :
$ python Script1.py
/home/sky/private/virtualenv15.0.1 dev/myVE/local/lib/python2.7/site-packages/sklearn/cross_validation.py:516:
Avertissement: Les moins peuplées de la classe en y a seulement 1 membres, ce qui est trop peu. Le nombre minimum d'étiquettes pour toute la classe ne peut pas être inférieure à n_folds=3.
% (min_labels, de soi.n_folds)), Avertissement)
Selon une autre question sur stackoverflow :
"Vérifiez que vous avez au moins 3 échantillons par classe pour être en mesure de faire StratifiedKFold validation croisée avec k == 3 (je pense que c'est la valeur par défaut CV utilisé par GridSearchCV pour la classification)."
Et bien, je n'ai pas au moins 3 échantillons par classe.
Donc mes questions sont:
a)quelles sont les alternatives?
b) Pourquoi ne puis-je pas utiliser la validation croisée?
c) Que puis-je utiliser à la place?
...
param_test1 = {
'max_depth': range(3, 10, 2),
'min_child_weight': range(1, 6, 2)
}
grid_search = GridSearchCV(
estimator=
XGBClassifier(
learning_rate=0.1,
n_estimators=3000,
max_depth=15,
min_child_weight=1,
gamma=0,
subsample=0.8,
colsample_bytree=0.8,
objective='multi:softmax',
nthread=42,
scale_pos_weight=1,
seed=27),
param_grid=param_test1, scoring='roc_auc', n_jobs=42, iid=False, cv=None, verbose=1)
...
grid_search.fit(train_x, place_id)
Références:
One-shot de l'apprentissage avec scikit-learn
À l'aide d'un vecteur de soutien à l'classificateur avec noyau polynomial en scikit-learn
OriginalL'auteur KenobiShan | 2016-05-15
Vous devez vous connecter pour publier un commentaire.
Si vous avez une cible/classe avec un seul échantillon, c'est trop peu pour n'importe quel modèle. Ce que vous pouvez faire est d'obtenir un autre ensemble de données, de préférence de façon aussi équilibrée que possible, puisque la plupart des modèles se comportent mieux équilibrée ensembles.
Si vous ne pouvez pas avoir un autre ensemble de données, vous aurez à jouer avec ce que vous avez. Je vous suggère de retirer l'échantillon qui a le solitaire de la cible. Ainsi, vous aurez un modèle qui ne couvre pas la cible. Si cela ne correspond pas à vos exigences, vous avez besoin d'un nouvel ensemble de données.
Je viens donc de supprimer l'échantillon qui a cette solitude cible... Ce que si j'utilise cv = 3 par exemple.. puis-je supprimer target/classes avec quantité d'échantillons < 3 , à droite?
Puisque vous êtes à l'aide de CV, vous avez à faire cette analyse simple (vérifier comment un grand nombre d'échantillons dans chaque cible). Comptez-vous de vecteurs cibles/de la colonne ou l'utilisation d'une matrice de confusion, alors vous serez en mesure d'avoir ces chiffres. Enfin, vous pouvez utiliser Stratifié K-fold CV, qui conserve l'original de l'équilibrage de l'ensemble de données. Cela résout le problème pour le CV, mais vous pourriez encore avoir un très asymétrique/asymétrique jeu qui fait mal vos modèles. Voici la SKlearn fonction Stratifié K-fold CV: [lien] (scikit-learn.org/stable/modules/generated/...)
Une autre belle façon visuelle pour analyser la cible/label de distribution est d'utiliser un histogramme.
OriginalL'auteur Rabbit