私の知る限り、モデルをランク付けするように学習をトレーニングするには、データセットに次の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