J'essaie une classification multi-class avec XGboost et je l'ai construit à l'aide de ce code,
clf = xgb.XGBClassifier(max_depth=7, n_estimators=1000)
clf.fit(byte_train, y_train)
train1 = clf.predict_proba(train_data)
test1 = clf.predict_proba(test_data)
Cela m'a donné de bons résultats. J'ai une perte de bûche inférieure à 0,7 pour mon cas. Mais après avoir regardé à travers quelques pages, j'ai constaté que nous devions utiliser un autre objectif dans XGBClassifiant pour un problème multi-classes. Voici ce qui est recommandé de ces pages.
clf = xgb.XGBClassifier(max_depth=5, objective='multi:softprob', n_estimators=1000,
num_classes=9)
clf.fit(byte_train, y_train)
train1 = clf.predict_proba(train_data)
test1 = clf.predict_proba(test_data)
Ce code fonctionne également mais cela prend beaucoup de temps pour compléter par rapport à mon premier code.
Pourquoi mon premier code travaille-t-il également pour une affaire multi-classes? J'ai vérifié que son objectif par défaut est binaire: logistique utilisée pour la classification binaire, mais il a très bien fonctionné pour la multi-classe? Lequel dois-je utiliser si les deux sont corrects?
Par défaut, xgbclassificateur ou de nombreux classificateurs utilise l'objectif tel que binaire mais ce qu'il fait en interne classant (un repose vs repose), c'est-à-dire si vous avez 3 cours, il donnera résultat comme (0 vs 1 et 2). Si vous traitez avec plus de 2 classes, vous devez toujours utiliser Softmax . Softmax transforme les logits en probabilités qui vont résumer à la base de cela, il fait la prédiction que les classes ont les probabilités les plus élevées. Vous pouvez voir la complexité augmenter comme Saurabh mentionné dans sa réponse. Donc, cela prendra plus de temps.