Làm cách nào để phân loại dữ liệu không cân bằng theo Mạng thần kinh Convolutional (CNN)?


10

Tôi có một bộ dữ liệu không cân bằng trong một nhiệm vụ phân loại nhị phân, trong đó số tiền dương so với số âm là 0,3% so với 99,7%. Khoảng cách giữa tích cực và tiêu cực là rất lớn. Khi tôi huấn luyện một CNN với cấu trúc được sử dụng trong bài toán MNIST, kết quả thử nghiệm cho thấy Tỷ lệ âm tính giả cao. Ngoài ra, đường cong lỗi đào tạo giảm xuống nhanh chóng trong một vài epoch ở đầu nhưng vẫn giữ nguyên giá trị trong các epoch sau.

Bạn có thể vui lòng tư vấn cho tôi một cách để xử lý vấn đề này? Cảm ơn!

Câu trả lời:


10

Điều này xảy ra bởi vì khi bạn lấy một lô nhỏ, rất ít khả năng (với tỷ lệ tỷ lệ ở đây) rằng một lô nhỏ sẽ chứa các mẫu dương tính của bạn. Vì vậy, nó sẽ kết thúc việc học mô hình cho lớp phủ định và sau một vài kỷ nguyên, mọi thứ chỉ được phân loại là lớp phủ định.

Có hai cách có thể để xử lý một tình huống như vậy.

  1. Với tỷ lệ là 0,3% đến 99,7%, đây là một bộ dữ liệu rất sai lệch. Bạn khó có 3 mẫu lớp dương cho mỗi 1000 mẫu. Tôi muốn nói rằng bạn nên xem xét việc cân bằng tập dữ liệu bằng cách nhận được các lớp tích cực hơn. Đi và nhận được càng nhiều mẫu tích cực càng tốt. Sau đó, bạn có thể sử dụng một bộ dữ liệu cân bằng hơn. Ví dụ: bạn có thể nhận 1000 mẫu dương tính và sau đó chọn một bộ 1000 mẫu âm ngẫu nhiên và xây dựng bộ phân loại. Bây giờ, nó sẽ có thể học cả hai lớp.

  2. Sử dụng thước đo lỗi có trọng số khi cập nhật trọng số sau một đợt nhỏ. Các trọng số được cập nhật theo tỷ lệ với số lượng mẫu của các lớp dương và âm trong bất kỳ lô nhỏ nào. Bây giờ, trong tình huống hiện tại với tỷ lệ là 3: 1000, thậm chí thủ thuật này có thể không hoạt động. Vì vậy, bạn có thể thử lấy tỷ lệ tương đương 300: 1000 bằng cách lấy thêm 297 mẫu dương tính và kết hợp chúng với 1000 mẫu âm tính. Sau đó, với tỷ lệ 300: 1000, bạn nên tính sai số trong các đợt nhỏ dựa trên số lượng mẫu trong mỗi lớp. Điều này nên làm việc.


Bạn có biết tỷ lệ tối ưu ở đây là gì không? là 3:10, hay cái gì khác?
donlan

4

Tại sao bạn muốn sử dụng CNN ở đây? Bạn đã xem xét các mô hình khác thực sự xử lý dữ liệu mất cân bằng?

Ví dụ: tôi đã tìm thấy hai kỹ thuật sau đây đã hoạt động rất tốt với tôi:

  • Rừng ngẫu nhiên w / SMote Boosting : Sử dụng một phép lai SMOTElàm suy yếu lớp đa số và vượt quá mẫu của lớp thiểu số theo tỷ lệ phần trăm có thể điều chỉnh. Chọn các tỷ lệ phần trăm này tùy thuộc vào phân phối biến trả lời của bạn trong tập huấn luyện. Cung cấp dữ liệu này cho mô hình RF của bạn. Luôn xác thực chéo / thực hiện tìm kiếm dạng lưới để tìm các cài đặt tham số tốt nhất cho các RF của bạn.

  • XGBoost w / siêu tham số tối ưu hóa : Một lần nữa, xác thực chéo hoặc thực hiện tìm kiếm gird để tìm các cài đặt tham số tốt nhất cho mô hình. Ngoài ra, xgboostcho phép bạn cân bằng trọng lượng lớp tích cực và tiêu cực bằng cách sử dụng scale_pos_weight. Xem tài liệu tham số cho một danh sách đầy đủ.

Tôi cũng nên nói thêm rằng tập dữ liệu tôi đang làm việc có cùng tỷ lệ phần trăm và tôi có thể đạt được điểm Độ nhạy 0,941 và Độ đặc hiệu là 0,71 xgboost, có nghĩa là mô hình dự đoán chính xác các kết quả dương tính chính xác và đó là tín hiệu tốt cho tôi.

(Xin lỗi, tôi không thể để lại nhận xét, không đủ danh tiếng và tôi thực sự muốn biết lý do tại sao bạn chọn CNNs)


1

Dữ liệu không cân bằng là một vấn đề phổ biến trong tất cả các lĩnh vực và không liên quan cụ thể đến tầm nhìn máy tính và các vấn đề được giải quyết bởi Mạng lưới thần kinh chuyển đổi (CNNs).

Để giải quyết vấn đề này, bạn nên cố gắng cân bằng tập dữ liệu của mình, bằng cách lấy mẫu quá mức các lớp thiểu số hoặc các lớp đa số dưới mẫu (hoặc cả hai). Có thể cho rằng, một lựa chọn tốt sẽ là thuật toán SMote (Kỹ thuật lấy mẫu quá mức tổng hợp), như đã đề cập ở trên. Ở đây bạn có thể tìm thấy một so sánh các thuật toán lấy mẫu quá mức khác nhau. Nếu bạn là người dùng Python, mất cân bằng tìm hiểu là một thư viện đẹp, thực hiện nhiều kỹ thuật hữu ích để cân bằng các bộ dữ liệu.

Mặt khác, nếu bạn đang cố gắng phân loại hình ảnh, một cách hay để tăng kích thước tập dữ liệu của bạn là tăng nó (tức là bằng cách tạo các ví dụ tổng hợp hợp lý, ví dụ như hình ảnh tương tự nhưng được xoay / dịch chuyển một chút so với hình gốc). Đôi khi bạn có thể thấy hữu ích khi tăng các lớp thiểu số để đạt được sự cân bằng tốt hơn. Lớp Keras ImageDataGenerator là một công cụ tốt cho mục đích này.

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.