Пропозиції щодо чутливого до навчання часу в умовах сильно незбалансованого середовища


15

У мене є набір даних з кількома мільйонами рядків і ~ 100 стовпців. Я хотів би виявити близько 1% прикладів у наборі даних, які належать до загального класу. У мене мінімальне обмеження точності, але через дуже асиметричну вартість я не надто захоплююсь будь-яким особливим відкликанням (до тих пір, поки мені не залишиться 10 позитивних матчів!)

Які підходи ви рекомендуєте в цій обстановці? (вітаються посилання на документи, посилання на реалізацію)

Відповіді:


15

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

Підходи, засновані на даних:

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

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

SMOTE (Техніка синтезу синтетичних меншин) або SMOTEBoost (поєднуючи SMOTE з розширенням) створюють синтетичні екземпляри класу меншостей, створюючи найближчих сусідів у просторі функцій. SMOTE реалізований в R в пакеті DMwR (який супроводжує книгу Луїса Торго «Майнінг даних з R, навчання з кейсів» CRC Press 2016 ).

Модельні підходи

Застосовуйте конкретні ваги у вашій функції втрат (більша вага для випадків меншості).

Для підходів на основі дерева можна використовувати відстань Хеллінгера як функцію домішки вузла, як це пропонується у Cieslak et al. "Дерева рішень Хеллінгера є надійними та невідчутливими до перекосу" ( код Weka тут .)

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

Звичайно, не використовуйте точність як метрику для побудови моделі. Каппе Коена - розумна альтернатива.

Модельні підходи до оцінки

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


Дякуємо за детальну відповідь. Я намагався підкреслити вибір і невдало провалився. Моделі демонструють відмінні показники у вибірці, але дисбаланс все ще присутній у тестовому наборі (і реальних даних, які я зрештою буду використовувати), тому точність OOS моделей жахлива. Я також спробував ваги, що стосуються класу, але моя заявка передбачає легко підрахувати більш високу вартість для помилкових позитивних результатів, ніж для помилкових негативів. Що стосується класифікаторів для одного класу, то я намагався встановити лінійний svm (нелінійні занадто повільні), який має 0 точності навіть у зразку ...
em70

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

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

5

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

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

Якщо ви використовуєте алгоритми машинного навчання, це може бути складніше. Макс Кун робить справедливу спробу узагальнити цю проблему у главі 16 "Прикладного прогнозного моделювання". Але складна тема для підведення підсумків. Якщо ви не хочете купувати книгу, код R доступний у пакеті AppliedPredictiveModeling для цієї глави і може бути достатнім залежно від вашого ознайомлення з R та використовуваними алгоритмами.

Зазвичай обговорення обертається навколо алгоритмів підкреслення / пересимплювання +/- чутливих до витрат. Можливі також такі варіанти, як jous-boost.
Приклад такого роду дискусій: Chen et al "Використання випадкових лісів для вивчення незбалансованих даних" http://statistics.berkeley.edu/sites/default/files/tech-reports/666.pdf


Проблема із зміною порогу полягає в тому, що це як зміна перехоплення регресійної моделі. Насправді я цілком можу захотіти змінити ваговий вектор, щоб мати на увазі вартість. Але якщо я це зроблю, враховуючи і без того важкий дисбаланс, я закінчуюсь з 0 точністю! Я не зупинився на жодному алгоритмі і маю ресурси для впровадження передових наукових ідей, якщо вони перспективні. Я погляну на запропоновану вами книгу.
em70

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

0

Ви можете подивитися на впровадження scikit-learn. зверніть увагу на аргумент class_ weight, який може мати значення словника ваг класу або "auto":

клас sklearn.svm.SVC (C = 1,0, ядро ​​= 'rbf', ступінь = 3, гама = 0,0, coef0 = 0,0, скорочення = True, ймовірність = False, tol = 0,001, cache_size = 200, class_weight = Немає, багатослівний = Невірно, max_iter = -1, random_state = Немає)

Ви можете грати зі значенням аргументу class_weight, який може бути словником ваги класу або "auto". В режимі "авто" алгоритм навчання автоматично призначає ваги кожному класу на основі кількості зразків у кожному з них.

scikit-learn має кілька інших алгоритмів класифікації, деякі з яких приймають ваги класів.


Чи можете ви сказати більше про те, як вагові класи можуть бути використані для досягнення цілей ОП? Я думаю, що це неявно в твоєму дописі, але це ще не зовсім відповідь.
gung - Відновіть Моніку

Так, аргумент class_weight може мати значення "auto", якщо хтось заглядає в документацію, або він може мати значення словника, яке має ваги класу. У випадку "автоматичного" алгоритм навчання сам знаходить вагу кожного класу відповідно до кількості зразків у кожному.
Еш
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.