Як класифікувати за випадковими лісами в R, як слід регулювати незбалансовані розміри класів?


17

Я вивчаю різні методи класифікації проекту, над яким я працюю, і мені цікаво спробувати випадкові ліси. Я намагаюся просвітити себе, коли я йду разом, і буду вдячний за будь-яку допомогу, надану спільнотою CV.

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

1. Зважені випадкові ліси

2. Збалансовані випадкові ліси

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

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


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

Відповіді:


5

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


Привіт, Девід, дякую за пропозицію. Чи можливе підвищення в межах / у поєднанні з випадковими лісами? Крім того, я прочитав, що підсилення може не застосовуватися для галасливих даних. Дані, з якими я працюю, містять безліч "галасливих" змінних. Зараз я керую випадковими лісами без вибору особливостей, знижуючи вибірки для більшого класу для боротьби з дисбалансом. Я отримав прийнятні результати (правильно класифікую 85% меншого класу і 93% старшого класу в навчальному наборі), але покращення завжди вітаються.
ialm

@Jonathan У мене немає хорошого розуміння того, скільки шуму потрібно, перш ніж випадкові ліси почнуть конкурувати з різними методами прискорення, але моє враження, що це багато чого. У gbmпакеті Rє функціонуючий термін "ваги", і ви можете збільшити випадковість дуже схожим на випадкові ліси, зменшивши термін "bag.fraction". Здається, варто спробувати.
Девід Дж. Харріс

@ DavidJ.Harris Boosting також страждає від класового дисбалансу, особливо у випадку абсолютної рідкості, коли інформація про класи меншості є рідкісною
Антуан

2

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

0,5


0

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

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

randomForest написаний у Fortran і c, вихідний код доступний (http://cran.r-project.org/src/contrib/randomForest_4.6-2.tar.gz), але я не можу визначити місце, де обчислюється ентропія, пс. ДБЖ, які випадковим лісом використовують Джині замість ентропії


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

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

Випадковий ліс в R може бути використаний як інструмент регресії, може бути корисним і для непідконтрольної класифікації. Я хотів давно змінити код randomForest, але не вистачало часу на це, додавши ваги, що було б концептуально важким. Час тому я самостійно цікавився, як використовувати випадковий ліс для непідконтрольної кластеризації, і я отримав ідею, але не перевіряв, що, на жаль, це виглядає досить обчислювально вимогливим - numerofobservation ^ 2.
Qbik

0

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

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


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