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


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.