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 qid
atas). 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]
Jawaban:
Menurut dokumentasi XGBoost, XGboost mengharapkan:
set_group
metodeDMatrix
in Python).sumber
sklearn.py
) sedikit tidak lengkap untuk paket Python.set_group
sangat 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 .
sumber