Создание «оценки достоверности» из голосов в случайных лесах?

36

Я рассчитываю обучить классификатор, который будет различать объекты Type Aи Type Bобъекты с достаточно большим обучающим набором, состоящим примерно из 10 000 объектов, около половины из которых есть, Type Aа половина из них Type B. Набор данных состоит из 100 непрерывных элементов, детализирующих физические свойства ячеек (размер, средний радиус и т. Д.). Визуализация данных в парных диаграммах рассеяния и графиках плотности говорит нам о существенном совпадении в распределении раковых и нормальных клеток по многим признакам.

В настоящее время я изучаю случайные леса в качестве метода классификации для этого набора данных, и я вижу некоторые хорошие результаты. Используя R, случайные леса могут правильно классифицировать около 90% объектов.

Одна из вещей, которую мы хотим попробовать сделать, - создать своего рода «показатель достоверности», который будет определять, насколько мы уверены в классификации объектов. Мы знаем, что наш классификатор никогда не будет на 100% точным, и даже если будет достигнута высокая точность прогнозов, мы хотим, чтобы обученные специалисты идентифицировали, какие объекты действительно являются Type Aи чем Type B. Таким образом, вместо предоставления бескомпромиссных прогнозов Type Aили Type B, мы хотим представить оценку для каждого объекта, которая будет описывать, как Aили Bобъект. Например, если мы разработаем оценку в диапазоне от 0 до 10, оценка 0 может указывать, что объект очень похож на Type Aобъекты, а оценка 10 будет означать, что объект очень похож Type B.

Я думал, что мог бы использовать голоса в случайных лесах, чтобы придумать такой счет. Поскольку классификация в случайных лесах осуществляется большинством голосов в лесу сгенерированных деревьев, я предполагаю, что объекты, за которые проголосовали 100% деревьев, Type Aбудут отличаться от объектов, за которые проголосовали, скажем, 51% деревьев. быть Type A.

В настоящее время я попытался установить произвольный порог для доли голосов, которую объект должен получить, чтобы быть классифицированным как Type Aили Type B, и, если порог не пройден, он будет классифицирован как Uncertain. Например, если я навязываю условие, что 80% или более деревьев должны согласовать решение для прохождения классификации, я нахожу, что 99% предсказаний класса верны, но около 40% объектов привязаны как Uncertain.

Тогда имеет ли смысл воспользоваться информацией для голосования, чтобы оценить достоверность прогнозов? Или я иду в неправильном направлении со своими мыслями?

ialm
источник
Убедитесь, что у вас есть отдельные наборы данных обучения и тестирования. Убедитесь, что вы используете свой тестовый набор как можно меньше (в идеале, только один раз).
Борис Горелик
@bgbg Я использую схему обучения / проверки / тестирования в 70/20/10. Я тренирую модель с 70% данных и настраиваю параметры, основываясь на результатах, полученных при проверке 20%. После настройки параметров этих двух наборов я оцениваю модель на 10% тестовом наборе. Хотя Брейман утверждает, что встроенная частота ошибок OOB делает избыточным отдельный набор тестов, я настороженно отношусь к его утверждению.
Ялм

Ответы:

19

Это имеет смысл, и все реализации случайных лесов, с которыми я работал (например, MATLAB), также дают вероятностные результаты для этого.

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

Изменить: Просто взглянул на R, и предикат.randomForest также выводит вероятности.

benhamner
источник
1
Спасибо за ваш ответ. Вы правы, я создал скрипт, который будет выводить долю голосов, которую получает каждый объект. Интересно, насколько полезными будут эти голоса? Есть ли какие-то дальнейшие шаги, которые вы рекомендуете? Должен ли я смотреть на изменчивость пропорций голосования через дополнительные прогоны РФ? Я понимаю, что в РФ есть стохастический элемент. Есть ли диагностика, на которую я должен посмотреть?
Ялм
3
@Jonathan Вы можете попробовать посмотреть на график, показывающий долю реального объекта из некоторого класса как функцию доли голосов за этот класс из леса. Я работал над одной проблемой, которая требовала оценки доверия, и оказалось, что мне удалось получить очень хорошую логистическую кривую.
@mbq Извините, не могли бы вы уточнить, что вы подразумеваете под этим? Я заинтересован в вашем предложении и буду следить за ним завтра!
ialm
1
Кроме того, изменчивость в RF входит в стадию обучения, поэтому многократный запуск тестовых образцов через RF не изменит результаты. Я хотел бы взглянуть на количество AUC в зависимости от количества деревьев в RF, чтобы убедиться, что у вас достаточно деревьев, а затем оптимизировать параметр минимального листа в соответствии с AUC.
Бенхамнер
2
@Jonathan Я думаю, что mbq имеет в виду нечто, называемое калибровкой (хотя могут быть и другие имена). Смотрите, например на эти вопросы: Калибровальна форсированный классификатор мульти-класса , Что делать «реальные ценности» относятся в контролируемой классификации?
Штеффен
17

Если вы используете R, пакет каретки спасет вас от повторного изобретения колеса. Например, в следующем коде используется перекрестная проверка для выбора параметров настройки для модели случайного леса, а затем выводится среднее и стандартное отклонение точности для каждой кратности перекрестной проверки. Наконец, он рассчитывает вероятности класса для модели.

library(caret)
library(PerformanceAnalytics)
data(iris)

#Make a yes/no dataset
Dataset <- iris
Dataset$Class <- ifelse(Dataset$Species=='versicolor','Yes','No')
Dataset$Class  <- as.factor(Dataset$Class)
Dataset$Species<- NULL
chart.Correlation(Dataset[-5], col= Dataset$Class)

#Fit an RF model
model <- train(Class~.,Dataset,
                method='rf',TuneLength=3,
                trControl=trainControl(
                    method='cv',number=10,
                    classProbs = TRUE))
model$results

#Predict class probabilities (i.e. 'certainty' scores)
pred <- predict(model,iris,"prob")
head(pred)

Хорошая особенность карета заключается в том, что он позволяет легко сравнивать различные прогностические модели. Например, если вы хотите попробовать SVM, вы можете заменить текст method='rf'с method='svmLinear'или method='svmRadial'. Вы также можете выбрать параметры настройки , основанные на АУК , а не точность, добавив его к параметру trainControl: summaryFunction=twoClassSummary.

В конце концов, в пакете PerformanceAnalytics есть немного кода chart.Correlation(Dataset[-5], col= Dataset$Class), который не нужен для построения модели, но обеспечивает хорошую визуализацию вашего набора данных.

Zach
источник
Вы делаете меня фанатом пакета карет. Я думаю, что я буду держать второй поток R открытым, просто чтобы попробовать разные методы классификации, а также постараюсь выполнить CV и настройку параметров самостоятельно и посмотреть, получу ли я какие-либо сопоставимые результаты.
Ялм
@ Джонатан рад это слышать! Это замечательная упаковка. Попробуйте modelLookup()команду для получения списка того, что возможно.
Зак
probТип predictтакже доступен с помощью randomForestприручить модели (с использованием или без использования других пакетов , например caretили PerformanceAnalytics).
Hack-R
2

Пакет randomForest в R - довольно приличный пакет для более подробной информации о вашем анализе. Он предоставляет вам голоса (либо в виде дробной части, либо в необработанном виде), а также предлагает встроенную емкость для настройки и перекрестной проверки и может даже дать вам больше информации о ваших функциях (если вы хотите узнать, какие из ваших 100 самое важное в анализе).

Если вы уже используете этот пакет, то, возможно, вам захочется взглянуть на него поближе, а если нет, возможно, проверьте его.

user4673
источник