Việc sử dụng đúng quy mô scale_pose_ weight trong xgboost cho các bộ dữ liệu không cân bằng là gì?


26

Tôi có một bộ dữ liệu rất mất cân bằng. Tôi đang cố gắng làm theo lời khuyên điều chỉnh và sử dụng scale_pos_weightnhưng không chắc tôi nên điều chỉnh nó như thế nào.

Tôi có thể thấy điều RegLossObj.GetGradientđó:

if (info.labels[i] == 1.0f) w *= param_.scale_pos_weight

do đó, một gradient của một mẫu dương tính sẽ có ảnh hưởng nhiều hơn. Tuy nhiên, theo bài báo xgboost , thống kê độ dốc luôn được sử dụng cục bộ = trong các trường hợp của một nút cụ thể trong một cây cụ thể:

  1. trong ngữ cảnh của một nút, để đánh giá mức giảm tổn thất của phần tách ứng viên
  2. trong ngữ cảnh của một nút lá, để tối ưu hóa trọng số cho nút đó

Vì vậy, không có cách nào để biết trước điều gì sẽ là tốt scale_pos_weight- đó là một con số rất khác nhau cho một nút kết thúc với tỷ lệ 1: 100 giữa các trường hợp tích cực và tiêu cực và cho một nút có tỷ lệ 1: 2.

Có gợi ý nào không?


Có lẽ, bạn có thể điều chỉnh tham số trong CV với 5 lần lặp 5 lần. Nhưng, bạn có thể cần phải viết mã để làm điều đó.
dùng2149631

Câu trả lời:


22

Nói chung, Scale_pose_ weight là tỷ lệ số lượng lớp âm với lớp dương. Giả sử, tập dữ liệu có 90 quan sát về lớp âm và 10 quan sát của lớp dương, thì giá trị lý tưởng của scale_pose_ Weight nên là 9. Bạn có thể kiểm tra liên kết sau. http://xgboost.readthedocs.io/en/latest/parameter.html


1
Làm thế nào mà áp dụng cho một bộ dữ liệu đa kính? 28 lớp thì sao? Điều đó không rõ ràng với tôi
Gabriel Ziegler

1
@Gabriel Tôi tin rằng nó sẽ tốt hơn để đi cho trọng lượng lớp. Bạn có thể sử dụng scale_pose_ weight, bằng cách sử dụng phương pháp so với phần còn lại. Ví dụ, tạo các hình nộm cho 28 lớp. Sau đó, bạn có thể sử dụng mỗi một như một vấn đề phân loại nhị phân. Bằng cách đó bạn sẽ đối phó với 28 mô hình khác nhau.
Harshit Mehta

Tôi hiểu, nhưng khi tôi sử dụng onevsrest, bộ phân loại cũng cung cấp cho tôi một đầu ra đa nhãn, phải không? Không chỉ một lớp trong số 28
Gabriel Ziegler

Làm sao ?. Ví dụ: Các lớp là A, B, C. Vì vậy, bạn có thể có phân loại nhị phân để phân loại (A / Not A), một cái khác sẽ là (B / Not B). Bạn có thể làm điều này với số lượng lớp học. Sau đó, trong số tất cả các xác suất tương ứng với mỗi phân loại, bạn phải tìm cách gán các lớp.
Harshit Mehta

Tôi đã quen với việc sử dụng onevsrest cho multilabel, nhưng tôi sẽ thử! Cảm ơn!
Gabriel Ziegler

3

Tất cả các tài liệu nói rằng đó là:

scale_pos_weight = count(negative examples)/count(Positive examples)

Trong thực tế, điều đó hoạt động khá tốt, nhưng nếu tập dữ liệu của bạn cực kỳ mất cân bằng, tôi khuyên bạn nên sử dụng một cái gì đó bảo thủ hơn như:

scale_pos_weight = sqrt(count(negative examples)/count(Positive examples)) 

Điều này rất hữu ích để hạn chế ảnh hưởng của phép nhân các ví dụ tích cực với trọng số rất cao.


1

Tôi hiểu câu hỏi và sự thất vọng của bạn, nhưng tôi không chắc đây là thứ có thể được tính toán phân tích, thay vào đó bạn phải xác định cài đặt tốt theo kinh nghiệm cho dữ liệu của mình, như bạn làm với hầu hết các tham số siêu tốc, sử dụng xác thực chéo là @ user2149631 đề nghị. Tôi đã có một số thành công khi sử dụng SelectFPR với Xgboost và API sklearn để hạ thấp FPR cho XGBoost thông qua lựa chọn tính năng, sau đó điều chỉnh thêm scale_pose_ weight trong khoảng từ 0 đến 1.0. O.9 dường như hoạt động tốt nhưng như với mọi thứ, YMMV tùy thuộc vào dữ liệu của bạn. Bạn cũng có thể cân nhắc từng điểm dữ liệu riêng lẻ khi gửi nó đến XGboost nếu bạn xem qua tài liệu của họ. Bạn phải sử dụng API của họ chứ không phải trình bao bọc sklearn. Bằng cách đó, bạn có thể cân một tập hợp các điểm dữ liệu cao hơn nhiều điểm khác và nó sẽ tác động đến thuật toán tăng cường mà nó sử dụng.


0

Tôi cũng vấp phải tình huống khó xử này và vẫn đang tìm giải pháp tốt nhất. Tuy nhiên, tôi sẽ đề nghị bạn sử dụng các phương thức như Tìm kiếm lưới (GridSearchCV trong sklearn) để điều chỉnh tham số tốt nhất cho trình phân loại của bạn. Tuy nhiên, nếu tập dữ liệu của bạn mất cân bằng cao, đáng để xem xét các phương pháp lấy mẫu (đặc biệt là phương pháp lấy mẫu ngẫu nhiên và phương pháp lấy mẫu SMote) và mô hình tập hợp trên các mẫu dữ liệu với các tỷ lệ khác nhau của các ví dụ về lớp phủ định và âm. Đây là một hướng dẫn hay và hữu ích (gần như toàn diện) về việc xử lý các bộ dữ liệu mất cân bằng.

https://www.analyticsvidhya.com/blog/2017/03/imbal cân- classifying-probols/

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.