xgBoost에서 쌍별 순위 모델에 얼마나 적합합니까?


14

내가 아는 한, 모델 순위를 정하는 학습을 훈련 시키려면 데이터 세트에 세 가지가 있어야합니다.

  • 라벨 또는 관련성
  • 그룹 또는 쿼리 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을 전달해야합니까? 숫자 또는 목록을 만들 때 다음과 같은 오류가 발생합니다. d : \ build \ xgboost \ xgboost-git \ dmlc-core \ include \ dmlc \ ./ logging.h : 235 : [12:03:09] D : \ 빌드 \ xgboost \ xgboost-git \ src \ c_api \ c_api.cc : 342 : 확인 실패 : (src.info.group_ptr.size ()) == (0) 슬라이스가 그룹 구조를 지원하지 않습니다 @amyrit
user2404620

답변:


9

XGBoost documentation 에 따르면 XGboost는 다음을 기대합니다.

  • 동일한 그룹의 예는 연속적인 예입니다.
  • 각 그룹의 크기가있는 목록 ( Python에서의 set_group방법으로 설정할 수 있음 DMatrix).

1
감사합니다. 모델 빌드 API ( sklearn.py)는 Python 패키지에서 약간 불완전합니다.
tokestermw 2019

4

set_group한 그룹의 점수 만 비교할 수 있으므로 순위를 매기는 데 매우 중요합니다. 자신의 그룹에서 점수에 따라 데이터를 정렬 할 수 있습니다.

쉬운 순위 지정을 위해 내 xgboostExtension을 사용할 수 있습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.