Pour autant que je sache, pour apprendre à classer les modèles, vous devez avoir trois éléments dans l'ensemble de données:
- étiquette ou pertinence
- identifiant de groupe ou de requête
- vecteur de fonction
Par exemple, l' ensemble de données Microsoft Learning to Rank utilise ce format (étiquette, identifiant de groupe et fonctionnalités).
1 qid:10 1:0.031310 2:0.666667 ...
0 qid:10 1:0.078682 2:0.166667 ...
J'essaie xgBoost qui utilise des GBM pour faire un classement par paire. Ils ont un exemple pour une tâche de classement qui utilise le programme C ++ pour apprendre sur l'ensemble de données Microsoft comme ci-dessus.
Cependant, j'utilise leur wrapper Python et n'arrive pas à trouver où je peux saisir l'ID de groupe ( qid
ci-dessus). Je peux entraîner le modèle en utilisant uniquement les fonctionnalités et les scores de pertinence, mais j'ai l'impression de manquer quelque chose.
Voici un exemple de script.
gbm = XGBRegressor(objective="rank:pairwise")
X = np.random.normal(0, 1, 1000).reshape(100, 10)
y = np.random.randint(0, 5, 100)
gbm.fit(X, y) ### --- no group id needed???
print gbm.predict(X)
# should be in reverse order of relevance score
print y[gbm.predict_proba(X)[:, 1].argsort()][::-1]