Gợi ý học tập nhạy cảm với chi phí trong môi trường mất cân bằng cao


15

Tôi có một bộ dữ liệu với vài triệu hàng và ~ 100 cột. Tôi muốn phát hiện khoảng 1% các ví dụ trong bộ dữ liệu, thuộc về một lớp chung. Tôi có một ràng buộc chính xác tối thiểu, nhưng do chi phí rất bất đối xứng, tôi không quá quan tâm đến bất kỳ thu hồi cụ thể nào (miễn là tôi không bị bỏ lại 10 trận đấu tích cực!)

Một số cách tiếp cận mà bạn muốn giới thiệu trong cài đặt này là gì? (liên kết đến giấy tờ chào mừng, liên kết đến việc triển khai được đánh giá cao)

Câu trả lời:


15

Tôi đã tìm thấy He và Garcia (2009) là một đánh giá hữu ích về việc học tập trong các vấn đề của lớp không cân bằng. Dưới đây là một số điều chắc chắn không toàn diện để xem xét:

Phương pháp dựa trên dữ liệu:

Người ta có thể gạch dưới lớp đa số hoặc chồng chéo lớp thiểu số. (Breiman chỉ ra rằng điều này chính thức tương đương với việc gán chi phí phân loại sai không đồng nhất.) Điều này có thể gây ra vấn đề: Việc lấy mẫu có thể khiến người học bỏ lỡ các khía cạnh của lớp đa số; quá khổ làm tăng nguy cơ thừa.

Có các phương pháp "lấy mẫu thông tin" làm giảm các vấn đề này. Một trong số đó là EasyEnsemble , lấy mẫu độc lập một số tập hợp con từ lớp đa số và tạo nhiều phân loại bằng cách kết hợp mỗi tập hợp con với tất cả dữ liệu của lớp thiểu số.

SMOTE (Kỹ thuật tổng hợp quá mức thiểu số) hoặc SMOTEBoost, (kết hợp SMOTE với tăng tốc) tạo ra các thể hiện tổng hợp của lớp thiểu số bằng cách tạo các hàng xóm gần nhất trong không gian tính năng. SMOTE được triển khai trong R trong gói DMwR (đi kèm với cuốn sách Khai thác dữ liệu của Luis Torgo với R, học với các nghiên cứu trường hợp ấn định CRC Press 2016 ).

Phương pháp phù hợp mô hình

Áp dụng các trọng số riêng cho từng lớp trong hàm mất mát của bạn (các trọng số lớn hơn cho các trường hợp thiểu số).

Đối với các cách tiếp cận dựa trên cây, bạn có thể sử dụng khoảng cách Hellinger làm hàm tạp chất nút, như được ủng hộ trong Cieslak et al. "Cây quyết định khoảng cách Hellinger rất mạnh mẽ và không nhạy cảm" ( mã Weka ở đây .)

Sử dụng một trình phân loại một lớp , học một (tùy thuộc vào mô hình) mật độ xác suất hoặc ranh giới cho một lớp và coi lớp kia là ngoại lệ.

Tất nhiên, không sử dụng độ chính xác làm số liệu cho việc xây dựng mô hình. Cohen's kappa là một sự thay thế hợp lý.

Phương pháp đánh giá mô hình

Nếu mô hình của bạn trả về xác suất dự đoán hoặc các điểm số khác, hãy chọn một điểm dừng quyết định tạo ra sự đánh đổi thích hợp trong các lỗi (sử dụng bộ dữ liệu độc lập với đào tạo và thử nghiệm). Trong R, gói OptimalCutpoint thực hiện một số thuật toán, bao gồm cả các thuật toán nhạy cảm với chi phí, để quyết định cắt bỏ.


Cảm ơn bạn đã trả lời chi tiết. Tôi đã cố gắng để lấy mẫu và thất bại thảm hại. Các mô hình cho thấy hiệu suất trong mẫu tuyệt vời, nhưng sự mất cân bằng vẫn xuất hiện trong bộ thử nghiệm (và dữ liệu trong thế giới thực mà tôi cuối cùng sẽ sử dụng) vì vậy độ chính xác OOS của các mô hình là khủng khiếp. Tôi cũng đã thử các trọng số riêng cho từng lớp, nhưng ứng dụng của tôi liên quan đến chi phí dễ dàng định lượng cao hơn cho dương tính giả so với âm tính giả. Đối với một trình phân loại lớp, tôi đã cố gắng điều chỉnh một Svm tuyến tính (những người phi tuyến tính quá chậm) và có độ chính xác 0 ngay cả trong mẫu ...
em70

1
Tôi cảm thấy cho bạn. Độ chính xác cao là khó nếu phần lớn các trường hợp của bạn là âm tính. Tôi sẽ sử dụng các trọng số riêng cho từng lớp (như tỷ lệ nghịch với tỷ lệ các trường hợp trong lớp) để học và lưu các trọng số riêng cho loại lỗi để xác định ngưỡng quyết định. Hy vọng rằng bạn đang sử dụng xác thực chéo với kappa của Cohen không chính xác để lựa chọn mô hình. Tôi sẽ hình dung mật độ xác suất của các lớp trong dữ liệu hiệu chuẩn cùng với độ chính xác và làm giàu (độ chính xác / tỷ lệ của các trường hợp tích cực) ở tất cả các điểm cắt để thực sự hiểu được sự đánh đổi có sẵn.
MattBagg

Câu trả lời tuyệt vời, cảm ơn bạn. Tôi đã sử dụng một kỹ thuật tương tự như EasyEnsemble đã đề cập khá lâu nhưng vẫn nghi ngờ về nó (mặc dù hiệu suất hợp lý trên dữ liệu mô phỏng). Bây giờ tôi biết nó có ý nghĩa.
ayorgo

5

Hiểu biết của tôi là đây là một lĩnh vực nghiên cứu tích cực trong cộng đồng học máy và không có câu trả lời tuyệt vời, mà thay vào đó là một số lượng lớn các giải pháp tiềm năng đang phát triển. Bạn có thể sẽ nhận được câu trả lời tốt hơn nếu bạn chỉ định các thuật toán cụ thể mà bạn đang xem xét.

Nếu bạn đang sử dụng một mô hình tham số (hồi quy logistic) thì đây không phải là vấn đề và bạn chỉ có thể thay đổi ngưỡng dựa trên hàm mất mát của mình (chi phí âm tính giả thành dương tính giả)

Nếu bạn đang sử dụng thuật toán học máy thì điều này có thể phức tạp hơn. Max Kuhn thực hiện một nỗ lực công bằng trong việc tóm tắt vấn đề trong Chương 16 của "Mô hình dự đoán ứng dụng". Nhưng chủ đề đầy thách thức để tóm tắt. Nếu bạn không muốn mua sách, mã R có sẵn trong gói ApplicationPredictiveModeling cho chương này và có thể đủ tùy thuộc vào mức độ quen thuộc của bạn với R và các thuật toán được sử dụng.

Thông thường các cuộc thảo luận xoay quanh các thuật toán nhấp nhô / quá khổ +/- nhạy cảm với chi phí. Với các biến thể như jous-boost cũng có thể.
Một ví dụ về loại thảo luận này: Chen et al "Sử dụng rừng ngẫu nhiên để tìm hiểu dữ liệu mất cân bằng" http: //statistic.ber siêu.edu / sites / default / files / tech-report /666.pdf


Vấn đề với việc thay đổi ngưỡng là nó giống như thay đổi đánh chặn của mô hình hồi quy. Trong thực tế, tôi có thể muốn thay đổi vectơ trọng lượng để xem xét chi phí. Nhưng nếu tôi làm điều đó, với sự mất cân bằng đã nghiêm trọng, tôi kết thúc với độ chính xác 0! Tôi đã không giải quyết bất kỳ thuật toán nào và có tài nguyên để thực hiện các ý tưởng nghiên cứu tiên tiến, nếu chúng có triển vọng. Tôi sẽ xem cuốn sách mà bạn đề xuất.
em70

Chương này là như vậy. Nỗ lực vững chắc, nhưng chủ đề khó để tóm tắt. Rất nhiều tuyên bố không được hỗ trợ được công bố trên các phương pháp khác nhau. Tôi nghĩ rằng việc phân tầng nhấp nháy trong các khu rừng ngẫu nhiên là một khởi đầu tốt từ quan điểm học máy. Mã nằm trong gói sách.
charles

0

Bạn có thể xem qua triển khai của scikit-learn. chú ý đến đối số trọng số class_ có thể có các giá trị của một từ điển có trọng số lớp hoặc 'tự động':

class sklearn.svm.SVC (C = 1.0, kernel = 'rbf', độ = 3, gamma = 0.0, coef0 = 0.0, thu nhỏ = True, xác suất = Sai, tol = 0,001, cache_size = 200, class_ weight = Không, verbose = Sai, max_iter = -1, Random_state = Không)

Bạn có thể chơi với giá trị của đối số class_ weight có thể là từ điển trọng số lớp hoặc 'tự động'. Trong chế độ 'tự động', thuật toán học tập sẽ tự động gán trọng số cho từng lớp dựa trên số lượng mẫu trong mỗi lớp.

scikit-learn có một số thuật toán phân loại khác, một số thuật toán chấp nhận trọng số lớp.


Bạn có thể nói thêm về cách sử dụng trọng lượng lớp để đạt được mục tiêu của OP không? Tôi nghĩ đó là ẩn trong bài viết của bạn, nhưng đây chưa phải là một câu trả lời.
gung - Phục hồi Monica

Có, đối số class_ weight có thể có giá trị 'tự động' nếu một số nhìn vào tài liệu hoặc nó có thể có giá trị từ điển có trọng số lớp. Trong trường hợp 'tự động', thuật toán học tập tự tìm trọng số của mỗi lớp theo số lượng mẫu trong mỗi lớp.
Tro
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.