Як контролювати витрати на помилкову класифікацію у випадкових лісах?


21

Чи можна контролювати вартість помилкової класифікації в пакеті R randomForest ?

У моїй власній роботі хибні негативи (наприклад, помилки, що у людини може бути захворювання) набагато дорожчі, ніж помилкові позитиви. Пакет rpart дозволяє користувачеві контролювати витрати на помилкову класифікацію, визначаючи матрицю втрат, щоб по-різному визначити неправильні класифікації. Чи існує щось подібне randomForest? Чи повинен я, наприклад, використовувати classwtпараметр для управління критерієм Джині?

Відповіді:


8

Не дуже, якщо не вручну зробити RF-клон, роблячи пакування rpartмоделей.

Деякий варіант випливає з того, що вихід РФ - це фактично суцільна оцінка, а не чітке рішення, тобто частка дерев, які проголосували за якийсь клас. Він може бути видобутий predict(rf_model,type="prob")і використаний для виготовлення, наприклад, кривої ROC, яка виявить кращий поріг, ніж .5 (який згодом може бути включений у тренувальну роботу з RF з cutoffпараметром).

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


MBQ. Велике дякую. (i) Крива ROC: У цьому випадку я не вимагаю кривої ROC, оскільки у мене є власні пріорі щодо того, якою має бути вагова вагомість. (ii) classwt: Так, я виявив, що на практиці та відповідно до інших користувачів результати не такі, як очікувалося. (iii) cutoff: Мені не зрозуміло, як використовувати cutoffв цьому випадку, і я бажаю будь-якої подальшої поради.
user5944

3

Існує ряд способів включення витрат.
(1) Відбір проб з / під відбору для кожного пакетованого дерева (стратифікований відбір проб) є найпоширенішим методом впровадження витрат. ви навмисно дисбалансує набір даних.
(2) Зважування. Ніколи не працює. Я думаю, що це підкреслено в документації. Дехто стверджує, що потрібно просто зважувати на всіх етапах, включаючи розбиття Джині та остаточне голосування. Якщо це буде працювати, це буде хитрою реалізацією.
(3) Функція метакості у Веці.
(4) Розгляд випадкового лісу як імовірнісного класифікатора та зміна порогу. Найменше мені подобається цей варіант. Ймовірно, через відсутність моїх знань, але навіть незважаючи на те, що алгоритм може виводити ймовірності, не має сенсу ставитися до них так, ніби це імовірнісна модель.

Але я впевнений, що є додаткові підходи.


3

Рекомендується, якщо змінна, яку ви намагаєтеся передбачити, не 50% для, class 1а 50% для class 2(як і більшість випадків), ви налаштуєте cutoffпараметр таким чином, щоб він відображав реальне OOBу підсумку.

Наприклад,

randomForest(data=my_data, formula, ntree = 501, cutoff=c(.96,.04))

У цьому випадку ймовірність мати значення одиниці class 1є, .96хоча мати значення class 2є .04.

Інакше випадкові ліси використовують поріг 0.5.


1

Можна включати costMatrixв randomForestявному вигляді з допомогою parmsпараметра:

library(randomForest)
costMatrix <- matrix(c(0,10,1,0), nrow=2)
mod_rf <- randomForest(outcome ~ ., data = train, ntree = 1000, parms = list(loss=costMatrix))

0

Ви можете включити чутливість до витрат, використовуючи sampsizeфункцію в randomForestпакеті.

model1=randomForest(DependentVariable~., data=my_data, sampsize=c(100,20))

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

Для отримання матриці плутанини, яка відображає витрати на помилку класифікації, потрібен трохи підхід проб і помилок. Погляньте на кримінальні прогнози ризику Річарда Берка : підхід до машинного навчання , с. 82.

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