Коли я повинен збалансувати класи в наборі даних про навчання?


29

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

Однак у цьому блозі хтось стверджує, що збалансовані дані ще гірші:

https://matloff.wordpress.com/2015/09/29/unbalanced-data-is-a-problem-no-balabala-data-is-worse/

То який це? Потрібно збалансувати дані чи ні? Чи залежить це від використовуваного алгоритму, оскільки деякі, можливо, зможуть сприйняти незбалансовані пропорції класів? Якщо так, то які з них надійні для незбалансованих даних?

Відповіді:


28

Інтуїтивне міркування було пояснено в пості:

Якщо наша мета - передбачення, це викличе певну упередженість. І що ще гірше, це буде постійний ухил, в тому сенсі, що ми не будемо мати послідовних оцінок по мірі зростання кількості вибірки.

Отже, можливо, проблема (штучно) збалансованих даних є гіршою, ніж у незбалансованому випадку.

Збалансовані дані корисні для класифікації, але ви, очевидно, втрачаєте інформацію про частоти появи, що вплине на самі показники точності, а також на продуктивність виробництва.

Скажімо, ви розпізнаєте рукописні букви з англійського алфавіту (26 літер). Перебалансування кожного вигляду літер дасть кожній букві ймовірність бути класифікованим (правильно чи ні) приблизно 1/26, тому класифікатор забуде про фактичний розподіл літер у вихідному зразку. І це нормально, коли класифікатор може з високою точністю узагальнити та розпізнати кожну букву .

Але якщо точність і найголовніше узагальнення не "настільки висока" (я не можу дати вам визначення - ви можете вважати це лише як "найгірший випадок") - неправильно класифіковані бали, швидше за все, однаково розподіляться між усіма літерами , щось на зразок:

"A" was misclassified 10 times
"B" was misclassified 10 times
"C" was misclassified 11 times
"D" was misclassified 10 times
...and so on

На відміну від балансування (якщо припустити, що "A" і "C" мають набагато більші ймовірності появи в тексті)

"A" was misclassified 3 times
"B" was misclassified 14 times
"C" was misclassified 3 times
"D" was misclassified 14 times
...and so on

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

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

PS Ви завжди можете відстежувати продуктивність незбалансованої класифікації за допомогою метрики Precision / Recall спочатку і вирішувати, потрібно додавати балансування чи ні.


p(xi|θ)p(xi|θ^)θ^iθi, іноді рекомендується перебалансувати класи відповідно до самої сукупності або параметрів, відомих з більшого зразка (таким чином, кращий оцінювач). Однак на практиці немає гарантії того, що "більший зразок" розподіляється однаково через ризик отримання упереджених даних на кожному кроці (скажімо, англійські букви, зібрані з технічної літератури проти художньої літератури проти всієї бібліотеки), тому балансування все ще може бути шкідливим.

Ця відповідь повинна також уточнити критерії застосовності для збалансування:

Проблема класового дисбалансу викликана тим, що недостатньо шаблонів, що належать до класу меншин, не співвідношенням позитивних і негативних зразків. Як правило, якщо у вас є достатня кількість даних, "проблема дисбалансу класів" не виникає

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

Яка ймовірність зустріти динозавра на вулиці?

1/2 ви або зустрічаєте динозавра, або не зустрічаєте динозавра


5
Я думаю, що крім пояснення питання, важливим відхиленням від цієї відповіді є те, що слід спершу спробувати незбалансований і перевірити його результати, і лише за необхідності зробити балансування та перевірити його результат. +1
Зельфір Кальтшталь

Інакше кажучи, при рівномірно розподілених класах до навчального підмножини модель втратить свою точність у небачених даних, правда? Але, у зворотному випадку, коли ви намагаєтеся випадковим чином витягнути записи набору даних для підмножини навчання / тестування, чи буде ваш класифікатор краще?
Крістос К.

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

1
@ChristosK. Дякую за деякі роз’яснення. Це не те, що я мав на увазі, але підхід дуже схожий. Звичайна рекомендація щодо застосуваності k-fold - це робити, коли ваш початковий зразок "начебто малий". Не впевнений, але складання не повинно зашкодити - це просто займе більше пробіжок, і чим менше ви дбаєте про передбачення, тим менше ви дбаєте про генералізацію / продуктивність настільки тавтологічно, як це звучить :). Але в цілому - k-кратність означає менше зміщення по суті.
dk14

1
@ChristosK. Так, і як попередження, співвідношення спам / не-спам може бути нестаціонарною випадковою змінною самостійно. З усіма цими «фальшивими новинами», «російськими тролями» та іншими речами я буду обережним щодо таких припущень - співвідношення також може бути упередженим. Ви можете спершу оцінити PrecisionRecall на своїх класифікаторах, якщо щось недостатньо вибіркове - я б краще зібрати / генерувати (?) Більше даних.
dk14

17

Відповідно до коментаря @ kjetil-b-halvorsen, швидке прийняття машинного навчання збентежило дослідників щодо прогнозування та класифікації. Як я більш докладно описав тут , класифікація є доцільною лише в більшості випадків. Коли результат рідкісний (або занадто поширений), ймовірність - це все, тому що в такому випадку можна говорити лише про тенденції , а не про передбачення окремих подій.

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


1

Залежить від того, чого ви хочете досягти від класифікації?

Скажіть, що це рак в / с не рак, то виявлення раку є життєво важливим. Однак оскільки не онкологічні захворювання становлять більшість ваших даних, класифікатор може по суті відправити всі випадки до неракових класів та отримати дуже високу точність. Але ми не можемо собі цього дозволити, тому ми, по суті, знижуємо вибірки випадків без онкологічних захворювань, по суті переміщуючи межі рішення від регіону раку в нераковий регіон.

Навіть у випадках використання, коли точність є єдиною нашою метою, балансування може бути суттєвим, якщо очікується, що баланс тестового часу буде відрізнятися від часу поїздів.

Наприклад, скажіть, що ви хочете класифікувати манго і апельсини, у вас є навчальний набір даних з 900 манго і 30 апельсинів, але ви розраховуєте розгорнути його на ринку з рівними манго і апельсинами, тоді в ідеалі вам слід зробити вибірку в очікуваному співвідношенні вибірки, щоб максимально збільшити точність.


Це я зрозумів з лекцій, які я мав. Однак я не розумію, коли балансування може бути поганим, як це підказує цей допис у блозі. Чому б колись було погано балансувати, якщо для кожного класу залишається достатньо точок даних?
Зельфір Кальтшталь

Вибачте, але, за вашою аналогією, що стосується розподілу фруктів на ринку з точністю моделі? Ви або навчились відокремлювати манго від апельсинів, або ні. Іншими словами, ви повинні мати змогу розгорнути ту саму модель на ринку, призначеному лише для апельсинів або манго.
Фернандо

3
Але проблема з прикладом раку полягає в тому, щоб розглядати його як класифікацію , його слід розглядати як оцінку ризику . Тоді очевидна проблема з незбалансованими класами зникає, дивіться stats.stackexchange.com/questions/127042/…
kjetil b halvorsen

1

Коли ваші дані збалансовані, ви можете скористатися точністю метрики. Але при такій ситуації ваші дані не врівноважені, точність не відповідає різним ітераціям. Вам потрібно сконцентрувати більше таких показників, як Precision (PPR), Recall (чутливість). Ці дві показники повинні бути збалансовані при порівнянні. Також вам слід перевірити F1-Score, що є гармонійним середнім рівнем точності та відкликання. Це стосується всіх алгоритмів машинного навчання

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