Предположим, у меня есть классификатор (это может быть любой из стандартных классификаторов, таких как дерево решений, случайный лес, логистическая регрессия и т. Д.) Для обнаружения мошенничества с использованием приведенного ниже кода
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
?
Это правильный подход? или есть какой-то другой способ подправить модель вместо того, чтобы строить ее с нуля?
источник
Ответы:
Стратегия повышения может улучшить производительность вашей модели, поэтому стоит попробовать. Что касается инкрементного / онлайн-обучения, я не знаю ни одного пакета в R, который бы его реализовывал (другие, пожалуйста, исправьте меня, если я ошибаюсь). В Scikit Learn есть специальные классификаторы, которые допускают пошаговое обучение. Однако, если вы привязаны к использованию R, у вас может не быть иного выбора, кроме как написать собственную инкрементную модель. В любом случае, изучив внешние классификаторы Scikit Learn, вы сможете понять, с чего начать.
Еще одна деталь, о которой следует помнить, - это степень, в которой обновление модели в отношении одного ложного положительного или ложного отрицательного результата улучшит производительность модели. В сфере мошенничества, как правило, в тысячи-миллионы раз больше случаев не мошенничества, чем мошенничества. Поэтому важно попытаться научиться правильно распознавать каждый случай мошенничества, но обновление модели для одного случая мошенничества, скорее всего, не изменит модель значительно. Рассмотрим другие стратегии, чтобы заставить модель придавать большее значение случаям мошенничества.
Самый простой способ улучшить вашу контролируемую модель, основанную на обратной связи от исследователей-людей, состоит в том, чтобы построить отдельную модель из исправленных экземпляров (т. Е. Неправильно предсказанных случаев, которые были должным образом помечены). Затем вы могли бы получить две ваши модели «голосования» за классификацию будущих экземпляров путем агрегирования их прогнозируемого членства в классе. Например, ModelA может полагать, что Instance1 равен [Мошенничество: 0,65, Non-Fraud: 0,35], в то время как ModelB полагает, что Instance1 равен [Fraud: 0,47, Non-Fraud: 0,53]. Таким образом, прогнозирование ансамбля будет следующим: [Мошенничество: (0,65 + 0,47) /2=0,56, Без мошенничества: (0,35 + 0,53) /2=0,44].
Если ваша исходная модель работает лучше, чем случайность, то число экземпляров, которые она правильно классифицирует, будет больше, чем число неправильно классифицированных. Таким образом, вы не хотите приписывать модели одинаковый вес, если они обучены на непропорциональном количестве экземпляров. Есть два простых способа справиться с этим несоответствием: 1) подождать, пока вы накопите достаточно исправленных экземпляров, чтобы приблизительно равняться количеству, на котором обучалась исходная модель, или 2) назначить вес каждой модели на основе того, как модель работает на наборе проверки.
источник
В прошлом я проводил некоторые исследования в области онлайн и дополнительного обучения. Есть некоторые идеи, которые вы должны принять во внимание.
Каждый классификатор может «делать» инкрементальное обучение, единственная проблема в том, что с некоторыми из них это сделать гораздо сложнее. Не существует алгоритма инкрементного обучения как такового, а есть только способ достичь этой цели, используя обычные алгоритмы. Обычно вы выбираете один из них и адаптируете способ его обучения и подаете данные либо в пакетном режиме, либо в режиме онлайн.
Это можно сделать двумя способами: a) Извлекать модель с нуля каждый раз, когда поступает новый образец (или набор образцов). Очевидно, что это не идеально, но если ваша модель не слишком сложна (то есть вы можете выполнить целое обучение между приходящими экземплярами), и вы ограничиваете размер набора данных (отбрасываете старые данные, новые данные или случайные данные и сохраняете постоянное количество обучающих экземпляров). ), это может работать в некоторых сценариях. Хороший пример этого «псевдоинкрементального» обучения с помощью машин опорных векторов можно найти здесь .
б) Найдите способ обновить параметры / веса вашей модели, лишь немного «изменив» эти параметры, когда прогноз был неверным. Нейронные сети, естественно, отлично подходят для этого, так как вы можете тренировать модель, сохранять веса, а затем переучиваться с новыми пакетами данных по мере их поступления. Кроме того, вы можете настроить скорость обучения, чтобы придать более / менее релевантность вашим новым входам. Если вы можете выбрать любой алгоритм для вашего случая, это был бы мой выбор. Однако есть много других методов: например, в байесовских подходах вы можете модифицировать распределения, применяя числовые приращения / убывания к определенным параметрам (см. Это для другого примера.)
Прочитайте и найдите предыдущие подходы, которые соответствуют вашему поведению алгоритма обучения. Вначале может показаться пугающим настроить все для себя, а не использовать ту или иную библиотеку, но это становится суперохлаждением, когда вы приближаетесь к точке, в которой вы чувствуете ответственность за весь процесс обучения вашей модели.
Удачи!
источник