Como ajustar modelos de classificação aos pares no xgBoost?

14

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 ( qidacima). 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]
tokestermw
fonte
Também me deparei com esse problema, mas que tipo de set_group devo passar para a função? quando construo um numpy ou lista, recebo um erro como este: d: \ build \ xgboost \ xgboost-git \ dmlc-core \ include \ dmlc \ ./ logging.h: 235: [12:03:09] D: \ Build \ xgboost \ xgboost-git \ src \ c_api \ c_api.cc: 342: Falha na verificação: (src.info.group_ptr.size ()) == (0) a fatia não suporta a estrutura do grupo @amyrit
user2404620

Respostas:

9

De acordo com a documentação do XGBoost , o XGboost espera:

  • os exemplos de um mesmo grupo para serem exemplos consecutivos,
  • uma lista com o tamanho de cada grupo (que você pode definir com o set_groupmétodo DMatrixem Python).
amyrit
fonte
1
Obrigado, parece que a API para model buildling ( sklearn.py) está um pouco incompleta para o pacote Python.
tokestermw
4

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 .

bigdong
fonte