Як класифікувати незбалансований набір даних за допомогою конволюційних нейронних мереж (CNN)?


10

У мене є незбалансований набір даних у задачі бінарної класифікації, де сума позитивів проти негативів становить 0,3% проти 99,7%. Розрив між позитивом і негативом величезний. Коли я треную CNN зі структурою, що використовується в проблемі MNIST, результат тестування показує високий показник помилкових негативних значень. Також крива помилок тренінгу швидко спадає за пару епох на початку, але залишається тим самим значенням у наступних епохах.

Не могли б ви порадити мені спосіб вирішення цієї проблеми? Дякую!

Відповіді:


10

Це трапляється тому, що коли ви берете міні-партію, дуже ймовірніше (зважаючи на співвідношення пропорцій тут), що міні-партія взагалі буде містити зразки ваших позитивних результатів. Таким чином, в кінцевому підсумку вивчить схему для негативного класу, і через пару епох все просто класифікується як негативний клас.

Існує два можливі способи вирішити таку ситуацію.

  1. Зважаючи на пропорції від 0,3% до 99,7%, це дуже сильно перекошений набір даних. Ви навряд чи маєте 3 зразки позитивних класів на кожні 1000 зразків. Я б сказав, що вам слід поглянути на балансування набору даних, отримавши більше позитивних класів. Ідіть і отримайте стільки позитивних зразків, скільки зможете. Потім ви можете використовувати більш збалансований набір даних. Наприклад, ви можете отримати 1000 позитивних зразків, а потім вибрати випадковий набір з 1000 негативних зразків і побудувати класифікатор. Тепер він повинен мати можливість вивчити обидва класи.

  2. Використовуйте зважений показник помилок при оновленні ваг після міні-партії. Ваги оновлюються пропорційно кількості зразків позитивних та негативних класів протягом будь-якої міні-партії. Зараз, у ситуації, що склалася з урахуванням пропорцій 3: 1000, навіть ця хитрість може не спрацювати. Тож ви можете спробувати отримати пропорції приблизно на зразок 300: 1000, отримавши на 297 більше позитивних зразків і поєднавши їх з 1000 негативних зразків. Тоді при співвідношенні 300: 1000 слід визначити похибку під час міні-партій на основі кількості зразків у кожному з класів. Це має спрацювати.


Чи знаєте ви, яка тут оптимальна пропорція? це 3:10, чи щось інше?
Крістофер

4

Чому ви хочете тут використовувати CNN? Чи розглядали ви інші моделі, які фактично обробляють незбалансовані дані?

Наприклад, я виявив, що наступні два методи спрацювали для мене дуже добре:

  • Випадкові ліси з / з SMOTE Підвищення : Використовуйте гібрид, SMOTEякий підкреслює вибір мажоритарного класу та переоцінює вибір класу меншин за допомогою регульованих відсотків. Виберіть ці відсотки залежно від розподілу змінної вашої відповіді у навчальному наборі. Подайте ці дані у вашу модель РФ. Завжди перехресне підтвердження / виконання сітки для пошуку оптимальних параметрів параметрів для ваших радіочастотних сигналів.

  • Оптимізація XGBoost з гіпер-параметрами : Знову ж, перехресне підтвердження або пошук по пошуку, щоб знайти найкращі параметри параметрів для моделі. Крім того, xgboostдозволяє збалансувати позитивні та негативні ваги класів за допомогою scale_pos_weight. Повний список знайдеться в документації з параметрами .

Я також повинен додати, що набір даних, над якими я працював, мав однаковий відсоток перекосу, і я зміг отримати показник чутливості 0,941 і специфічність 0,71 з xgboost, що означає, що модель досить точно прогнозує справжні позитиви, і це буде добре для мене.

(Вибачте, я не можу залишити коментар, недостатньо репутації, і мені дуже хотілося знати, чому ви вибрали CNN)


1

Неврівноважений набір даних є поширеною проблемою у всіх областях і не стосується конкретного комп’ютерного зору та проблем, які вирішуються конволюційними нейронними мережами (CNN).

Щоб вирішити цю проблему, вам слід спробувати збалансувати свій набір даних, або за допомогою вибіркових класів меншості, або для класів мажоритарної вибірки (або обох). Можливо, хорошим вибором буде алгоритм SMOTE (Synthetic Minority Over-Sampling Technique), як згадувалося вище. Тут ви можете знайти порівняння різних алгоритмів перевибірки. Якщо ви користувач Python, незбалансоване навчання - це приємна бібліотека, яка реалізує багато корисних методів для збалансування наборів даних.

З іншого боку, якщо ви намагаєтеся класифікувати зображення, хороший спосіб збільшити розмір вашого набору даних - це збільшити його (тобто шляхом створення розумних синтетичних прикладів, наприклад, подібних зображень, але повернутих / зміщених крихітних біт щодо оригінальних). Іноді вам може бути корисно збільшити класи меншин, щоб досягти кращого балансу. Клас Keras ImageDataGenerator - хороший інструмент для цієї мети.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.