xgBoostのペアワイズランキングモデルにどのように適合しますか?


14

私の知る限り、モデルをランク付けするように学習をトレーニングするには、データセットに次の3つを含める必要があります。

  • ラベルまたは関連性
  • グループまたはクエリID
  • 特徴ベクトル

たとえば、Microsoft Learning to Rankデータセットはこの形式(ラベル、グループID、機能)を使用します。

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

GBMを使用してペアワイズランキングを行う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]

この問題にも遭遇しましたが、どのようなset_groupを関数に渡す必要がありますか?numpyまたはリストを作成すると、次のようなエラーが発生します: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:Check failed:(src.info.group_ptr.size())==(0)slice does not support group structure @amyrit
user2404620

回答:


9

XGBoostのドキュメントによれば、XGboostは以下を期待しています:

  • 同じグループの例が連続した例になる
  • 各グループのサイズのリスト(Pythonののset_groupメソッドで設定できますDMatrix)。

1
おかげで、モデルビルド用のAPI(sklearn.py)はPythonパッケージでは少し不完全なようです。
tokestermw 2016

4

set_group1つのグループのスコアのみが比較可能であるため、ランク付けは非常に重要です。自分のグループのスコアに従ってデータを並べ替えることができます。

ランキングを簡単にするために、xgboostExtensionを使用できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.