Recall cao - Độ chính xác thấp cho dữ liệu không cân bằng


10

Tôi hiện đang gặp một số vấn đề khi phân tích một tập dữ liệu tweet với các máy vectơ hỗ trợ. Vấn đề là tôi có một bộ đào tạo lớp nhị phân không cân bằng (5: 2); được dự kiến ​​sẽ tỷ lệ thuận với phân phối lớp thực. Khi dự đoán tôi nhận được độ chính xác thấp (0,47) cho lớp thiểu số trong tập xác thực; thu hồi là 0,88. Tôi đã thử sử dụng một số phương pháp lấy mẫu quá mức và dưới mẫu (được thực hiện trên tập huấn luyện) mà không cải thiện độ chính xác do bộ xác nhận không cân bằng cũng như để phản ánh phân phối lớp thực. Tôi cũng thực hiện các chi phí khác nhau trong máy vectơ hỗ trợ, giúp. Bây giờ có vẻ như tôi không thể cải thiện hiệu suất của mình nữa.

Có ai trong số các bạn có một số lời khuyên những gì tôi có thể làm để cải thiện độ chính xác của mình mà không làm tổn thương đến việc thu hồi của tôi không? Hơn nữa, có ai có manh mối tại sao tôi nhận được nhiều thông tin sai lệch hơn là phủ định sai (tích cực là lớp thiểu số) không?


3
Ít nhất một phần của vấn đề là đánh giá mô hình trên cơ sở quy tắc chấm điểm không phù hợp.
Sycorax nói phục hồi Monica

Bằng "phương pháp lấy mẫu quá mức và dưới mẫu", bạn đã thử SMOTE (Kỹ thuật lấy mẫu quá mức tổng hợp) chưa? Từ kinh nghiệm của tôi, nó đã cải thiện tỷ lệ phân loại của tôi về nhóm thiểu số cho bộ dữ liệu mất cân bằng 300: 1.
Matthew Lau

Xin chào Matthew, cảm ơn bạn đã trả lời. Tôi đã thử nhiều phương pháp lấy mẫu quá mức và thậm chí cả các phương pháp tập hợp bao gồm tất cả các loại kỹ thuật SMOTE.
Filippo Scopel

2
Vì bạn đang sử dụng scikit, hãy thử cây tăng cường độ dốc trên dữ liệu của bạn. Bạn có thể sẽ nhận được AUC chính xác tốt hơn ngay lập tức. Các SVC, như bạn chỉ ra, không thực sự thiết thực cho bất cứ thứ gì ngoại trừ các bộ dữ liệu rất nhỏ.
rinspy

1
Xin chào Filippo! Tôi hiện đang giải quyết, tôi sẽ nói, chính xác cùng một vấn đề như bạn mô tả :-) Đã thử tất cả những thứ thông thường (oversampling / undersampling, SMOTE, class-weight) và thậm chí đã thử một vài người học khác nhau (SVM, Random Forest, Mạng thần kinh được kết nối đầy đủ), nhưng hiệu quả là giống nhau ở mọi nơi: thu hồi cao của nhóm thiểu số sau khi áp dụng SMOTE hoặc trọng lượng lớp, nhưng độ chính xác rất thấp. Cuối cùng bạn đã tìm ra giải pháp chưa?
u_b

Câu trả lời:


6

Có ai có manh mối tại sao tôi nhận được nhiều thông tin sai lệch hơn là phủ định sai (tích cực là nhóm thiểu số) không? Cảm ơn trước sự giúp đỡ của bạn!

Bởi vì tích cực là tầng lớp thiểu số. Có rất nhiều ví dụ tiêu cực có thể trở thành dương tính giả. Ngược lại, có ít ví dụ tích cực có thể trở thành tiêu cực sai.

Nhớ lại rằng Nhớ lại = Độ nhạy= =TP(TP+FN)

Độ nhạy (Tỷ lệ dương tính thật) có liên quan đến Tỷ lệ dương tính giả (độ đặc hiệu 1) như được hiển thị bằng đường cong ROC. Ở một thái cực, bạn gọi mọi ví dụ đều tích cực và có độ nhạy 100% với 100% FPR. Mặt khác, bạn gọi không có ví dụ tích cực và có độ nhạy 0% với FPR 0%. Khi lớp tích cực là thiểu số, thậm chí một FPR tương đối nhỏ (mà bạn có thể có vì bạn có mức thu hồi cao = độ nhạy = TPR) sẽ kết thúc gây ra số lượng FP cao (vì có rất nhiều ví dụ tiêu cực).

Từ

Chính xác= =TP(TP+FP)

Ngay cả ở mức FPR tương đối thấp, FP sẽ áp đảo TP nếu số lượng ví dụ tiêu cực lớn hơn nhiều.

Ngoài ra,

Phân loại tích cực:C+

Ví dụ tích cực:Ôi+

Chính xác =P(Ôi+|C+)= =P(C+|Ôi+)P(Ôi+)P(C+)

P (O +) thấp khi lớp dương nhỏ.

Có ai trong số các bạn có một số lời khuyên tôi có thể làm gì để cải thiện độ chính xác của mình mà không làm tổn thương đến việc thu hồi của tôi không?

Như @rinspy đã đề cập, GBC hoạt động tốt theo kinh nghiệm của tôi. Tuy nhiên, nó sẽ chậm hơn SVC với hạt nhân tuyến tính, nhưng bạn có thể tạo ra những cây rất nông để tăng tốc độ. Ngoài ra, nhiều tính năng hơn hoặc nhiều quan sát hơn có thể giúp ích (ví dụ: có thể có một số tính năng hiện chưa được phân tích luôn được đặt thành một số giá trị trong tất cả các FP hiện tại của bạn).

Nó cũng có thể có giá trị vẽ đường cong ROC và đường cong hiệu chuẩn. Nó có thể là trường hợp mặc dù bộ phân loại có độ chính xác thấp, nó có thể dẫn đến một ước tính xác suất rất hữu ích. Ví dụ, chỉ cần biết rằng một ổ cứng có thể có xác suất thất bại tăng gấp 500 lần, mặc dù xác suất tuyệt đối là khá nhỏ, có thể là thông tin quan trọng.

Ngoài ra, độ chính xác thấp về cơ bản có nghĩa là bộ phân loại trả về rất nhiều dương tính giả. Tuy nhiên, điều này có thể không quá tệ nếu giá trị dương tính giả là rẻ.


2

Các phương pháp để thử:

Lấy mẫu nhỏ:

Tôi đề nghị sử dụng theo các kỹ thuật lấy mẫu và sau đó đào tạo phân loại của bạn.

Học không cân bằng cung cấp một api phong cách học scikit cho tập dữ liệu không cân bằng và nên là điểm khởi đầu tốt để lấy mẫu và thuật toán để thử.

Thư viện : https://imbalified-learn.readthedocs.io/en/urdy/

Xếp hạng SVM:

Điều này đã cho thấy sự cải thiện trong việc thu hồi các hệ thống có độ chính xác cao và được google sử dụng để phát hiện các quảng cáo xấu. Tôi khuyên bạn nên thử nó.

Tài liệu tham khảo cho SVM:

https://static.googleusercontent.com/media/research.google.com/en//pub/archive/37195.pdf


1

Cách tiếp cận tiêu chuẩn sẽ là cân nhắc lỗi của bạn dựa trên tần suất lớp. Ví dụ: nếu bạn đang thực hiện bằng Python với sklearn:

model = sklearn.svm.SVC(C=1.0, kernel='linear', class_weight='balanced')
model.fit(X, y)

Xin chào mprat, cảm ơn bạn đã trả lời. Tôi đã sử dụng class_ weight = cân bằng.
Filippo Scopel
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.