Інкрементальне навчання класифікаційним моделям в R


11

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

library(randomForest)
rfFit = randomForest(Y ~ ., data = myData, ntree = 400) # A very basic classifier 

Say, Y is a binary outcome - Fraud/Not-Fraud

Тепер я передбачив небачений набір даних.

pred = predict(rfFit, newData)

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

Один із варіантів, який я можу подумати, - це побудувати adaboost classifierтак, щоб новий класифікатор виправляв помилку старого. або я що - то чув про Incremental Learningчи Online learning. Чи існують якісь реалізації (пакети) R?

Це правильний підхід? або Чи є інший спосіб налаштувати модель, а не будувати її з нуля?


Ви знайшли рішення? У мене те саме питання.
Blu3nx

@ Blu3nx, будь ласка, не використовуйте відповіді для коментування питань. Відповіді мають на меті відповісти на них.
Тім

Не відповідь, але що заважає тобі просто перейти на myData $ Fraud [positionofincorrectvariable] = Правильне значення?
Дейл C

Відповіді:


2

Розгорнута стратегія може покращити продуктивність вашої моделі, тому варто спробувати. Що стосується додаткового / онлайн-навчання, я не знаю жодного пакету в R, який його реалізує (інші, будь ласка, виправте мене, якщо я помиляюся). У Scikit Learn є позакласні класифікатори, які дозволяють поступово навчатись. Однак якщо ви прив’язані до використання R, у вас, можливо, не залишиться нічого іншого, як написати власну додаткову модель. У будь-якому випадку, вивчаючи позапрофільні класифікатори Scikit Learn, можна дати вам уявлення про те, з чого почати.

Ще одна деталь, яку слід пам’ятати, - ступінь оновлення моделі на один хибний позитивний чи хибний негатив покращить продуктивність моделі. У сфері шахрайства, як правило, тисячі до мільйонів разів більше випадків не шахрайства, ніж шахрайства. Отже, важливо намагатися навчитися правильно розмежувати кожен екземпляр шахрайства, але оновлення моделі на одному екземплярі шахрайства, ймовірно, не змінить модель суттєво. Розглянемо інші стратегії для того, щоб модель надала більше значення випадкам шахрайства.

Найпростішим способом вдосконалення вашої контрольованої моделі, заснованої на зворотній зв’язку з людськими слідчими, було б побудувати окрему модель від виправлених випадків (тобто випадки, передбачені неправильно, які були належним чином марковані). Тоді ви зможете дві моделі "проголосувати" за класифікацію майбутніх екземплярів шляхом узагальнення їх передбачуваних членських класів. Наприклад, ModelA може вважати, що Instance1 є [Шахрайство: 0,65, Не шахрайство: 0,35], тоді як ModelB вважає, що Instance1 є [Шахрайство: 0,47, Не шахрайство: 0,53]. Таким чином, передбачення ансамблю буде [Шахрайство: (0,65 + 0,47) /2=0,56, Не шахрайство: (0,35 + 0,53) /2=0,44].

Якщо ваша оригінальна модель працює краще, ніж випадкові, кількість примірників, які вона правильно класифікує, буде більшою, ніж кількість неправильно класифікованих. Таким чином, ви не хочете надавати однаковій вазі моделям, якщо вони навчаються на непропорційній кількості примірників. Для вирішення цієї невідповідності є два простих варіанти: 1) зачекайте, поки ви накопичите достатньо виправлених екземплярів, щоб приблизно дорівнювати кількості, на яких навчалась початкова модель, або 2) присвоїти вагу кожній моделі на основі того, як модель працює на валідаційному наборі.


0

У минулому я робив деякі дослідження щодо онлайн та інкрементального навчання. Є кілька ідей, які потрібно врахувати.

Кожен класифікатор може зробити «додаткове» навчання, лише проблема полягає в тому, що з деякими це зробити набагато складніше. Не існує алгоритму додаткового навчання як такого, лише спосіб досягнення цієї покупки за допомогою загальних алгоритмів. Зазвичай ви вибираєте одну з них і адаптуєте спосіб її навчання та подачу даних в партії чи в Інтернеті.

Зробити це можна двома способами: a) Перевторюйте модель з нуля щоразу, коли надходить новий зразок (або набір зразків). Очевидно, це не ідеально, але якщо ваша модель не надто складна (це означає, що ви можете виконувати цілу підготовку між прихідними екземплярами), і ви обмежуєте розмір вашого набору даних (відкидання старих даних, нових даних або випадкових даних та збереження постійної кількості навчальних екземплярів ), це може працювати в деяких сценаріях. Приємний приклад цього «псевдо-інкрементального» навчання за допомогою векторів підтримки можна знайти тут .

b) Знайдіть спосіб оновити параметри / ваги моделі, лише змінивши «трохи» ці параметри, коли прогноз був неправильним. Нейронні мережі, звичайно, чудово підходять для цього, оскільки ви можете тренувати модель, зберігати ваги, а потім перенавчатися з новими партіями даних по мірі надходження. Крім того, ви можете налаштувати рівень навчання, щоб надати більше / менш відповідність вашим новим ресурсам. Якщо ви можете вибрати будь-який алгоритм для вашого випадку, це був би мій вибір. Однак існує багато інших методів: наприклад, в байєсівських підходах ви можете змінювати розподіли, застосовуючи числові прирости / зменшення до певних параметрів (див. Це для іншого прикладу.)

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

Удачі!

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