การจัดอันดับแบบคู่ใน xgBoost เป็นอย่างไร


14

เท่าที่ฉันรู้ในการฝึกอบรมการเรียนรู้เพื่อจัดอันดับแบบจำลองคุณต้องมีสามสิ่งในชุดข้อมูล:

  • ป้ายกำกับหรือความเกี่ยวข้อง
  • รหัสกลุ่มหรือแบบสอบถาม
  • คุณสมบัติเวกเตอร์

ตัวอย่างเช่นชุดข้อมูล Microsoft Learning to Rankใช้รูปแบบนี้ (ป้ายกำกับ, id กลุ่มและคุณสมบัติ)

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

ฉันลอง xgBoost ที่ใช้ GBM เพื่อทำการจัดอันดับแบบคู่ พวกเขามีตัวอย่างสำหรับงานการจัดอันดับที่ใช้โปรแกรม C ++ เพื่อเรียนรู้เกี่ยวกับชุดข้อมูล Microsoft ดังกล่าวข้างต้น

อย่างไรก็ตามฉันใช้ตัวห่องูหลามและไม่สามารถหาตำแหน่งที่ฉันสามารถป้อนรหัสกลุ่ม ( 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 หรือ list ฉันได้รับข้อผิดพลาดดังนี้: 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, XGboost คาดหวัง:

  • ตัวอย่างของกลุ่มเดียวกันเพื่อเป็นตัวอย่างที่ต่อเนื่องกัน
  • รายการที่มีขนาดของแต่ละกลุ่ม (ซึ่งคุณสามารถตั้งค่าด้วยset_groupวิธีการDMatrixใน Python)

1
ขอบคุณดูเหมือนว่า API สำหรับการสร้างแบบจำลอง ( sklearn.py) นั้นไม่สมบูรณ์เล็กน้อยสำหรับแพ็คเกจ Python
tokestermw

4

set_groupมีความสำคัญต่อการจัดอันดับเพราะคะแนนในกลุ่มเดียวเท่านั้น คุณสามารถเรียงลำดับข้อมูลตามคะแนนของพวกเขาในกลุ่มของตนเอง

สำหรับการจัดอันดับเรื่องง่ายที่คุณสามารถใช้ของฉันxgboostExtension

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.