xgboostのペアワイズランキングモデルにどの程度フィットしますか?
質問
私の知る限り、モデルをランク付けするために学習を訓練するには、データセットに3つのものが必要です。
- ラベルまたは関連性
- グループまたはクエリID
- 機能ベクトル
たとえば、 Microsoftデータセットをランク付けすることを学習します この形式(ラベル、グループID、および機能)を使用します。
1 qid:10 1:0.031310 2:0.666667 ...
0 qid:10 1:0.078682 2:0.166667 ...
GBMSを利用してペアワイズランキングを行うXgboostを試しています。彼らは持っています ランキングタスクの例 これは、C ++プログラムを使用して、上記のようなMicrosoftデータセットで学習します。
しかし、私は彼らのPythonラッパーを使用していますが、グループIDを入力できる場所を見つけることができないようです(qid
その上)。機能と関連性のスコアだけを使用してモデルをトレーニングできますが、何かが足りないように感じます。
これがサンプルスクリプトです。
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]
解決
による xgboostドキュメント, 、xgboostが期待しています:
- 連続した例である同じグループの例、
- 各グループのサイズのリスト(で設定できます
set_group
の方法DMatrix
Pythonで)。
他のヒント
set_group
1つのグループのスコアのみが同等であるため、ランキングにとって非常に重要です。自分のグループのスコアに従ってデータを並べ替えることができます。
ランキングを簡単にするために、私を使用できます xgboostextension.
所属していません datascience.stackexchange