Załóżmy, że mam klasyfikator (może to być dowolny ze standardowych klasyfikatorów, takich jak drzewo decyzyjne, losowy las, regresja logistyczna itp.) Do wykrywania oszustw za pomocą poniższego kodu
library(randomForest)
rfFit = randomForest(Y ~ ., data = myData, ntree = 400) # A very basic classifier
Say, Y is a binary outcome - Fraud/Not-Fraud
Teraz przewidziałem na niewidzialny zestaw danych.
pred = predict(rfFit, newData)
Następnie uzyskałem informacje zwrotne od zespołu dochodzeniowego na temat mojej klasyfikacji i stwierdziłem, że popełniłem błąd, klasyfikując oszustwo jako nieuczciwe (tj. Jeden fałszywy negatywny ) . Czy w każdym razie mogę pozwolić, aby mój algorytm zrozumiał, że popełnił błąd? czyli jakikolwiek sposób dodania pętli sprzężenia zwrotnego do algorytmu, aby mógł poprawić błędy?
Jedną z opcji, które mogę wymyślić z góry głowy, jest zbudowanie takiego, adaboost classifier
aby nowy klasyfikator naprawił błąd starego. lub słyszałem coś o Incremental Learning
lub Online learning
. Czy są jakieś istniejące implementacje (pakiety) w R
?
Czy to właściwe podejście? lub Czy istnieje inny sposób na ulepszenie modelu zamiast budowania go od zera?
źródło
Odpowiedzi:
Strategia wzmocnienia może poprawić wydajność twojego modelu, więc warto spróbować. Jeśli chodzi o nauczanie przyrostowe / online, nie znam żadnego pakietu w języku R, który go wdraża (inni, proszę mnie poprawić, jeśli się mylę). W Scikit Learn istnieją nietypowe klasyfikatory, które pozwalają na stopniowe uczenie się. Jeśli jednak jesteś przywiązany do używania języka R, możesz nie mieć innego wyjścia, jak napisać własny model przyrostowy. W obu przypadkach, przegląd nietypowych klasyfikatorów Scikit Learn może dać ci wyobrażenie, od czego zacząć.
Kolejnym szczegółem, o którym należy pamiętać, jest stopień, w jakim aktualizacja modelu na jednym fałszywie dodatnim lub fałszywie ujemnym poprawi wydajność modelu. W dziedzinie oszustw istnieje zwykle tysiące do milionów razy więcej przypadków nieuczciwości niż oszustw. Dlatego ważne jest, aby nauczyć się prawidłowo rozróżniać każde wystąpienie oszustwa, ale aktualizacja modelu w jednym wystąpieniu oszustwa prawdopodobnie nie zmieni znacząco modelu. Rozważ inne strategie, dzięki którym model będzie miał większe znaczenie dla przypadków oszustw.
Najprostszym sposobem ulepszenia nadzorowanego modelu na podstawie informacji zwrotnych od ludzkich badaczy byłoby zbudowanie oddzielnego modelu od skorygowanych instancji (tj. Instancji niepoprawnie przewidywanych, które zostały odpowiednio oznakowane). Następnie możesz sprawić, aby dwa modele „głosowały” na klasyfikację przyszłych instancji, agregując ich przewidywane członkostwa w klasie. Na przykład ModelA może wierzyć, że Instancja 1 to [Oszustwo: 0,65, Non-Fraud: 0,35], podczas gdy Model B uważa, że Instance1 to [Fraud: 0,47, Non-Fraud: 0,53]. Prognozowanie zespołu byłoby zatem [Oszustwo: (0,65 + 0,47) / 2 = 0,56, Non-oszustwo: (0,35 + 0,53) / 2 = 0,44].
Jeśli Twój oryginalny model działa lepiej niż przypadek, liczba poprawnie sklasyfikowanych wystąpień będzie większa niż liczba nieprawidłowo sklasyfikowanych. Dlatego nie chcesz przypisywać równej wagi modelom, jeśli są one szkolone w nieproporcjonalnej liczbie instancji. Istnieją dwie proste opcje, aby poradzić sobie z tą rozbieżnością: 1) poczekaj, aż zgromadzisz wystarczającą liczbę poprawionych instancji, aby w przybliżeniu równa się liczbie, na której trenowano oryginalny model, lub 2) przypisz wagę każdemu modelowi na podstawie tego, jak model działa na zestawie sprawdzania poprawności.
źródło
W przeszłości przeprowadziłem badania na temat uczenia się online i przyrostowego. Jest kilka pomysłów, które należy wziąć pod uwagę.
Każdy klasyfikator może „uczyć się” przyrostowo, jedynym problemem jest to, że u niektórych jest to o wiele trudniejsze. Nie ma algorytmu uczenia przyrostowego jako takiego, tylko sposób na osiągnięcie tego zakupu przy użyciu wspólnych algorytmów. Zwykle wybrałbyś jeden z nich i dostosowałeś sposób jego szkolenia i karmienia danych albo partią, albo w trybie online.
Możesz to zrobić na dwa sposoby: a) Ponownie wytrenuj model od zera za każdym razem, gdy pojawi się nowa próbka (lub zestaw próbek). Oczywiście nie jest to idealne, ale jeśli twój model nie jest zbyt skomplikowany (co oznacza, że możesz przeprowadzić całe szkolenie między nadchodzącymi instancjami) i ograniczysz rozmiar zestawu danych (odrzucając stare dane, nowe dane lub dane losowe i utrzymując stałą liczbę instancji treningowych ), może działać w niektórych scenariuszach. Dobry przykład tego „pseudo-przyrostowego” uczenia się za pomocą maszyn wektorów wsparcia można znaleźć tutaj .
b) Znajdź sposób na zaktualizowanie parametrów / wag modelu, modyfikując tylko „trochę” te parametry, gdy prognoza była błędna. Sieci neuronowe są oczywiście do tego świetne, ponieważ możesz trenować model, oszczędzać ciężary, a następnie przekwalifikowywać się z nowymi partiami danych, jak tylko się pojawią. Ponadto możesz dostosować szybkość uczenia się, aby nadać więcej / mniej trafności nowym wkładom. Jeśli możesz wybrać dowolny algorytm dla swojej sprawy, byłby to mój wybór. Istnieje jednak wiele innych metod: np. W podejściach bayesowskich można modyfikować rozkłady, stosując przyrosty / dekrecje liczbowe do niektórych parametrów (zobacz to na innym przykładzie).
Przeczytaj trochę i poszukaj wcześniejszych podejść, które pasują do tego, co chcesz zachować algorytm uczenia się. Na początku może wydawać się trudne, aby skonfigurować wszystko dla siebie zamiast korzystać z tej lub innej biblioteki, ale staje się super chłodny, gdy dojdziesz do momentu, w którym czujesz się odpowiedzialny za cały proces uczenia się swojego modelu.
Powodzenia!
źródło