質問

私の知る限り、モデルをランク付けするために学習を訓練するには、データセットに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.

ライセンス: CC-BY-SA帰属
所属していません datascience.stackexchange
scroll top