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


36

Я хочу підготувати класифікатора, який буде розмежовувати об'єкти Type Aта Type Bоб'єкти з досить великим навчальним набором з приблизно 10000 об'єктів, приблизно половина з яких є, 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.

Чи було б тоді сенсом скористатися інформацією про голосування, щоб оцінити визначеність прогнозів? Або я рухаюся в неправильному напрямку зі своїми думками?


Переконайтеся, що у вас є окремі набори даних для навчання та тестування. Переконайтеся, що ви використовуєте свій тестовий набір якомога менше (в ідеалі лише один раз).
Борис Горелик

@bgbg Я використовую схему навчання / валідації / тестування, у розділі 70/20/10. Я треную модель з 70% даних і налаштовую параметри на основі результатів набору для перевірки 20%. Після налаштування параметрів на цих двох наборах я оцінюю модель на 10% тестовому наборі. Хоча Брейман стверджує, що вбудований коефіцієнт помилок OOB робить окремий тестовий набір зайвим, я насторожено ставляюся до його твердження.
ialm

Відповіді:


19

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

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

Редагувати: Просто поглянувши на R, і predict.randomForest також має ймовірність виведення.


1
Дякую за відповідь Ви маєте рацію, я створив сценарій, який видасть частку голосів, які отримує кожен об'єкт. Цікаво, однак, наскільки корисними будуть ці голоси? Чи є наступні кроки, які ви рекомендуєте? Чи варто дивитись на мінливість пропорцій голосування через додаткові прогони РФ? Я розумію, що в РФ є стохастичний елемент. Чи є діагностика, яку я повинен переглянути?
ialm

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

@mbq Вибачте, чи можете ви пояснити, що ви розумієте під цим? Мене зацікавила ваша пропозиція і я продовжуватиму її виконувати завтра!
ialm

1
Крім того, мінливість у RF приходить на етапі тренування, тому виконання тестових зразків кілька разів через РФ не змінить результати. Я переглянув би AUC порівняно з кількістю дерев у РФ, щоб переконатися, що у вас є достатня кількість дерев, а потім оптимізувати мінімальний параметр листя відповідно до AUC.
benhamner

2
@Jonathan Я думаю, що mbq має на увазі те, що називається калібрування (хоча можуть бути й інші назви). Див., Наприклад, ці питання: Калібрування підвищеного класифікатора , що
steffen

17

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

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), який не потрібен для побудови моделі, але забезпечує гарну візуалізацію вашого набору даних.


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

@Jonathan рада почути це! Це чудовий пакет. Спробуйте modelLookup()команду для переліку можливих списків.
Зак

Цей probтип predictтакож доступний randomForestдля тренування вашої моделі (з використанням або без використання інших пакетів, таких як caretабо PerformanceAnalytics).
Hack-R

2

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

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

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