Với lớp không cân bằng, tôi có phải sử dụng theo mẫu trên bộ dữ liệu kiểm tra / xác thực của mình không?


13

Tôi là người mới bắt đầu học máy và tôi đang đối mặt với một tình huống. Tôi đang giải quyết vấn đề Đặt giá thầu theo Thời gian thực, với bộ dữ liệu IPinYou và tôi đang cố gắng thực hiện dự đoán nhấp chuột.

Vấn đề là, như bạn có thể biết, bộ dữ liệu rất không cân bằng: Khoảng 1300 ví dụ tiêu cực (không nhấp chuột) cho 1 ví dụ tích cực (nhấp chuột).

Đây là những gì tôi làm:

  1. Tải dữ liệu
  2. Chia bộ dữ liệu thành 3 bộ dữ liệu: A = Đào tạo (60%) B = Xác thực (20%) C = Kiểm tra (20%)
  3. Đối với mỗi tập dữ liệu (A, B, C), hãy lấy mẫu dưới mỗi lớp âm để có tỷ lệ 5 (5 ví dụ âm cho 1 ví dụ tích cực). Điều này mang lại cho tôi 3 bộ dữ liệu mới cân bằng hơn: A 'B' C '

Sau đó, tôi huấn luyện mô hình của mình với tập dữ liệu A 'và hồi quy logistic.

Câu hỏi của tôi là:

  1. Bộ dữ liệu nào tôi phải sử dụng để xác nhận? B hay B '?

  2. Bộ dữ liệu nào tôi phải sử dụng để thử nghiệm? C hoặc C '

  3. Những số liệu nào là phù hợp nhất để đánh giá mô hình của tôi? F1Score dường như là một số liệu được sử dụng tốt. Nhưng ở đây do lớp không cân bằng (nếu tôi sử dụng bộ dữ liệu B và C), độ chính xác thấp (dưới 0,20) và F1Score bị ảnh hưởng rất nhiều bởi độ thu hồi / độ chính xác thấp. Điều đó sẽ chính xác hơn để sử dụng aucPR hoặc aucROC?

  4. Nếu tôi muốn vẽ đường cong học tập, tôi nên sử dụng số liệu nào? (biết rằng% lỗi không liên quan nếu tôi sử dụng bộ dữ liệu B 'để xác thực)

Cảm ơn trước cho thời gian của bạn !

Trân trọng.

Câu trả lời:


9

Câu hỏi tuyệt vời ... Dưới đây là một số câu trả lời cụ thể cho câu hỏi được đánh số của bạn:

1)Bạn nên xác thực chéo trên B chứ không phải B`. Mặt khác, bạn sẽ không biết cân bằng lớp học của bạn hoạt động tốt như thế nào. Không thể xác thực chéo trên cả B B` và sẽ hữu ích dựa trên câu trả lời cho 4 dưới đây.

2) Bạn nên kiểm tra trên cả C và C` dựa trên 4 dưới đây.

3)Tôi sẽ gắn bó với F1 và nó có thể hữu ích khi sử dụng ROC-AUC và điều này mang lại sự kiểm tra vệ sinh tốt. Cả hai đều có xu hướng hữu ích với các lớp không cân bằng.

4)Điều này thực sự khó khăn. Vấn đề với điều này là phương pháp tốt nhất yêu cầu bạn diễn giải lại các đường cong học tập sẽ như thế nào hoặc sử dụng cả bộ dữ liệu gốc được lấy mẫu lại và dữ liệu gốc.

Giải thích cổ điển về các đường cong học tập là:

  • Overfit - Các đường không hoàn toàn đi cùng nhau;
  • Underfit - Các đường nối với nhau nhưng ở điểm F1 quá thấp;
  • Just Right - Lines đến với nhau với số điểm F1 hợp lý.

Bây giờ, nếu bạn đang đào tạo về A` và thử nghiệm trên C, các dòng sẽ không bao giờ hoàn toàn kết hợp với nhau. Nếu bạn đang đào tạo về A` và thử nghiệm trên C` thì kết quả sẽ không có ý nghĩa trong bối cảnh của vấn đề ban đầu. Vậy bạn làm gì?

Câu trả lời là đào tạo về A` và kiểm tra B`, nhưng cũng kiểm tra trên B. Lấy điểm F1 cho B` nơi bạn muốn, sau đó kiểm tra điểm F1 cho B. Sau đó làm bài kiểm tra của bạn và tạo đường cong học tập cho C. Các đường cong sẽ không bao giờ kết hợp với nhau, nhưng bạn sẽ có cảm giác về độ lệch chấp nhận được ... đó là sự khác biệt giữa F1 (B) và F1 (B`).

Bây giờ, cách giải thích mới về đường cong học tập của bạn là:

  • Overfit - Các đường không kết hợp với nhau và cách xa nhau hơn F1 (B`) -F1 (B);
  • Underfit - Các đường không kết hợp với nhau nhưng chênh lệch nhỏ hơn F1 (B`) -F1 (B) và điểm F1 (C) dưới F1 (B);
  • Vừa phải - Các đường không đi cùng nhau nhưng sự khác biệt nhỏ hơn F1 (B`) -F1 (B) với điểm F1 (C) tương tự F1 (B).

Tổng quát : Tôi cố gắng hết sức đề nghị rằng đối với các lớp không cân bằng, trước tiên bạn hãy thử điều chỉnh trọng số lớp trong thuật toán học của bạn thay vì lấy mẫu quá mức vì nó tránh tất cả các đạo đức nghiêm ngặt mà chúng tôi đã nêu ở trên. Nó rất dễ dàng trong các thư viện như scikit-learn và khá dễ dàng để viết mã trong bất cứ thứ gì sử dụng hàm sigmoid hoặc bỏ phiếu đa số.

Hi vọng điêu nay co ich!


Cảm ơn rất nhiều @ AN605. Đó là rất tốt đẹp của bạn ! Tôi có một vài câu hỏi thường gặp: Dành cho 4) - Khi bạn nói "luyện tập trên A 'và kiểm tra trên B'", bạn có nghĩa là xác nhận? - "tạo đường cong học tập cho điểm C" & "F1 (C) dưới / tương tự F1 (B)". Mặc dù vậy, đối với đường cong học tập, chúng tôi phải vẽ biểu đồ số lỗi cho tập huấn luyện (A hoặc A 'ở đây) và chỉ số lỗi cho bộ xác thực (B hoặc B'). Không phải bạn "xác nhận" trên C ở đây sao?
jmvllt

Về việc sử dụng "trọng số lớp", hãy sửa cho tôi nếu tôi sai (tôi chỉ xem nhanh về nó) nhưng, mẹo này liên quan đến việc "sửa đổi" hàm chi phí bằng cách thêm một hệ số / trọng số "k" vào trước lớp học không cân bằng, phải không? : 􏲏 Chi phí (h (x), y) = -y * k * log (h (x)) - (1-y) * log ((h (x)) Như vậy, thuật toán sẽ xem xét phân loại sai của lớp tích cực càng quan trọng. Nhưng có một điều là tôi "phải" sử dụng Apache Spark & ​​MLlib để xây dựng mô hình tất cả của mình. Và tôi không chắc rằng tôi có thể sửa đổi dễ dàng chức năng chi phí của mình bằng tia lửa. thời gian!
jmvllt

5

Cho 1)2), bạn muốn

1) choose a model that performs well on data distributed as you 
   expect the real data will be 
2) evaluate the model on data distributed the same way

Vì vậy, đối với các bộ dữ liệu đó, bạn không cần phải cân bằng các lớp.

Bạn cũng có thể thử sử dụng trọng số lớp thay vì dưới / quá khổ, vì điều này quan tâm đến quyết định này cho bạn.

Đối với 3)bạn có khả năng muốn tối ưu hóa bằng cách sử dụng bất kỳ số liệu nào bạn sẽ được ghi vào (nếu đó là một cuộc thi). Nhưng nếu đó không phải là một sự cân nhắc, tất cả những mô hình đó là những lựa chọn tốt. F1 có thể bị ảnh hưởng bởi độ chính xác thấp, nhưng bạn muốn điều đó được ghi lại. Đó chính xác là khi các mô hình ngây thơ (như đoán lớp đa số) có thể đạt điểm cao bởi một số số liệu có điểm như F1 có liên quan.

Đối với 4)không có gì sai với việc hiển thị bất kỳ số liệu nào bạn kết thúc tối ưu hóa.


Xin chào @jamesmf, cảm ơn vì câu trả lời tuyệt vời đó. Đối với F1Score, vấn đề tôi gặp phải là tôi có thể muốn tập trung nhiều hơn vào việc loại bỏ Tích cực Sai nhiều hơn Tiêu cực Sai. Điều đó có đúng không khi thêm "trọng lượng" khác nhau cho FP và FN trong tính toán độ chính xác và thu hồi?
jmvllt

Điều đó có ý nghĩa với tôi. Ngoài ra mô tả của bạn về trọng số lớp là chính xác và tôi không thấy nó được triển khai trong MLib, nhưng nó có thể đáng để yêu cầu tính năng
jamesmf

Được rồi cảm ơn james! Tôi hiện đang cố gắng tự mình làm điều đó bằng cách mở rộng lớp LogisticGradient và ghi đè phương thức tính toán. Tôi sẽ cho bạn biết nếu điều này cho tôi kết quả tốt. Chúc bạn ngày mới tốt lành.
jmvllt

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.