Tanto quanto eu sei, para treinar o aprendizado para classificar modelos, você precisa ter três coisas no conjunto de dados:
- rótulo ou relevância
- ID do grupo ou da consulta
- vetor de recurso
Por exemplo, o conjunto de dados Microsoft Learning to Rank usa esse formato (rótulo, ID do grupo e recursos).
1 qid:10 1:0.031310 2:0.666667 ...
0 qid:10 1:0.078682 2:0.166667 ...
Estou experimentando o xgBoost que utiliza GBMs para fazer uma classificação pareada. Eles têm um exemplo para uma tarefa de classificação que usa o programa C ++ para aprender sobre o conjunto de dados da Microsoft como acima.
No entanto, estou usando o wrapper Python e não consigo encontrar onde posso inserir o ID do grupo ( qid
acima). Posso treinar o modelo usando apenas os recursos e as pontuações de relevância, mas sinto que estou perdendo alguma coisa.
Aqui está um exemplo 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]
Respostas:
De acordo com a documentação do XGBoost , o XGboost espera:
set_group
métodoDMatrix
em Python).fonte
sklearn.py
) está um pouco incompleta para o pacote Python.set_group
é muito importante para a classificação, porque apenas as pontuações em um grupo são comparáveis. Você pode classificar os dados de acordo com suas pontuações em seu próprio grupo.Para uma classificação fácil, você pode usar o meu xgboostExtension .
fonte