Seberapa pas model berpasangan berpasangan di xgBoost?

14

Sejauh yang saya tahu, untuk melatih pembelajaran membuat peringkat model, Anda perlu memiliki tiga hal dalam dataset:

  • label atau relevansi
  • grup atau id permintaan
  • vektor fitur

Misalnya, dataset Microsoft Learning to Rank menggunakan format ini (label, id grup, dan fitur).

1 qid:10 1:0.031310 2:0.666667 ...
0 qid:10 1:0.078682 2:0.166667 ...

Saya mencoba xgBoost yang menggunakan GBM untuk melakukan pemeringkatan berpasangan. Mereka memiliki contoh untuk tugas peringkat yang menggunakan program C ++ untuk belajar pada dataset Microsoft seperti di atas.

Namun, saya menggunakan pembungkus Python dan sepertinya tidak dapat menemukan tempat saya dapat memasukkan id grup (di qidatas). Saya dapat melatih model hanya dengan menggunakan fitur dan skor relevansi tetapi saya merasa seperti saya kehilangan sesuatu.

Berikut ini contoh skrip.

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
sumber
Saya juga menemukan masalah ini, tetapi set_group seperti apa yang harus saya berikan ke fungsi? ketika saya membangun numpy atau daftar saya mendapatkan kesalahan seperti ini: d: \ build \ xgboost \ xgboost-git \ dmlc-core \ include \ dmlc \ ./ logging.h: 235: [12:03:09] D: \ Bangun \ xgboost \ xgboost-git \ src \ c_api \ c_api.cc: 342: Gagal memeriksa: (src.info.group_ptr.size ()) == (0) slice tidak mendukung struktur grup @amyrit
user2404620

Jawaban:

9

Menurut dokumentasi XGBoost, XGboost mengharapkan:

  • contoh-contoh dari kelompok yang sama menjadi contoh berturut-turut,
  • daftar dengan ukuran masing-masing grup (yang dapat Anda atur dengan set_groupmetode DMatrixin Python).
amyrit
sumber
1
Terima kasih, sepertinya API untuk model buildling ( sklearn.py) sedikit tidak lengkap untuk paket Python.
tokestermw
4

set_groupsangat penting untuk peringkat, karena hanya skor dalam satu kelompok yang sebanding. Anda dapat mengurutkan data berdasarkan skor mereka di grup mereka sendiri.

Untuk peringkat yang mudah, Anda dapat menggunakan xgboostExtension saya .

bigdong
sumber