Как контролировать стоимость ошибочной классификации в случайных лесах?

21

Можно ли контролировать стоимость ошибочной классификации в пакете R randomForest ?

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

user5944
источник

Ответы:

8

Не совсем, если не вручную, делая RF-клон, делающий упаковку rpartмоделей.

Некоторый вариант исходит из того факта, что результат RF является фактически непрерывной оценкой, а не четким решением, то есть долей деревьев, которые проголосовали за некоторый класс. Его можно извлечь predict(rf_model,type="prob")и использовать, например, для построения кривой ROC, которая покажет лучший порог, чем .5 (который впоследствии может быть включен в RF-обучение с cutoffпараметром).

classwt Подход также кажется верным, но на практике он работает не очень хорошо - переход между сбалансированным предсказанием и тривиальным приведением одного и того же класса независимо от атрибутов имеет тенденцию быть слишком резким, чтобы его можно было использовать.


источник
MBQ. Большое спасибо. (i) Кривая ROC: в этом случае мне не требуется кривая ROC, поскольку у меня есть свои собственные априорные значения того, каким должен быть весовой коэффициент. (ii) classwt: Да, я обнаружил, что на практике и в соответствии с другими пользователями результаты не такие, как ожидалось. (iii) cutoff: мне не ясно, как использовать cutoffв этом случае, и я буду рад любым дальнейшим советам.
user5944
3

Существует несколько способов учета затрат.
(1) Избыточная / недостаточная выборка для каждого дерева в мешках (стратифицированная выборка) является наиболее распространенным методом введения затрат. Вы намеренно несбалансированны в наборе данных.
(2) Взвешивание. Никогда не работает. Я думаю, что это подчеркивается в документации. Некоторые утверждают, что вам просто нужно взвешиваться на всех этапах, включая разделение Джини и окончательное голосование. Если это сработает, это будет сложная реализация.
(3) Функция метакоста в Weka.
(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.

pablo_sci
источник
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.

MH TING
источник