Jak przewidzieć wynik na podstawie pozytywnych przypadków jako treningu?

21

Dla uproszczenia załóżmy, że pracuję nad klasycznym przykładem wiadomości e-mail ze spamem / bez spamu.

Mam zestaw 20000 e-maili. Wiem, że 2000 to spam, ale nie mam żadnego przykładu wiadomości nie będących spamem. Chciałbym przewidzieć, czy pozostałe 18000 to spam, czy nie. Idealnie, wynik, którego szukam, to prawdopodobieństwo (lub wartość p), że wiadomość e-mail jest spamem.

Jakiego algorytmu (algorytmów) mogę użyć, aby dokonać rozsądnej prognozy w tej sytuacji?

W tej chwili myślę o metodzie opartej na odległości, która powiedziałaby mi, jak podobny jest mój e-mail do znanego spamu. Jakie mam opcje?

Mówiąc bardziej ogólnie, czy mogę zastosować nadzorowaną metodę uczenia się, czy też koniecznie muszę mieć negatywne przypadki w moim zestawie szkoleniowym, aby to zrobić? Czy ograniczam się do metod uczenia się bez nadzoru? Co z metodami częściowo nadzorowanymi?

enricoferrero
źródło
1
Każdy użyty algorytm uczenia się będzie przewidywał, że wszystkie wiadomości będą spamem. Musisz mieć przykłady z dwóch kategorii dla każdego rozsądnego uczenia się.
JohnRos
OK, wykluczałoby to klasyczne podejście do nauki nadzorowanej. Ale czy istnieje algorytm, który zwraca jakieś wskaźniki podobieństwa? Np .: ten e-mail jest bardzo podobny do spamu, ten inny nie jest.
enricoferrero
6
@JohnRos nieprawda, uczenie się na podstawie pozytywnych i nieznakowanych danych jest dużym tematem w częściowo nadzorowanym nauczaniu i nie jest niczym, jak to opisujesz.
Marc Claesen
5
@MarcClaesen: Nie znałem tej (bardzo fajnej) linii badań. Widzę, że ta magia polega na założeniu, że nieoznakowane dane są mieszanką spamu i nie spamu, co sprawia, że ​​problem można rozwiązać.
JohnRos
2
@JohnRos dokładnie i zgadzam się ze współczynnikiem chłodu. To, co wydaje mi się naprawdę fajne, to fakt, że ostatnio byliśmy w stanie pokazać, jak obliczyć tradycyjne miary wydajności oparte na tabelach awaryjnych (np. Dokładność, precyzja, przywołanie, ...) bez znanych negatywów !
Marc Claesen

Odpowiedzi:

19

Nazywa się to uczeniem się na podstawie danych pozytywnych i nieznakowanych lub w skrócie uczeniem się PU i jest aktywną niszą częściowo nadzorowanego uczenia się.

W skrócie, ważne jest wykorzystywanie nieznakowanych danych w procesie uczenia się, ponieważ daje to znacznie ulepszone modele w porównaniu z tak zwanymi klasyfikatorami jednoklasowymi, które są szkolone wyłącznie na znanych pozytywach. Dane nieoznakowane można włączyć na kilka sposobów, przy czym dominują następujące podejścia:

  • jakoś wywnioskować zestaw prawdopodobnych negatywów na podstawie nieznakowanych danych, a następnie wytrenować nadzorowany model, aby odróżnić znane pozytywne od tych wywnioskowanych negatywnych.
  • traktuj nieoznakowany zestaw jako negatywny i w jakiś sposób uwzględniaj szum etykiety, o którym wiadomo, że jest obecny.

Aktywnie działam w tej dziedzinie i zamiast podsumowywać ją tutaj, polecam przeczytać dwa moje artykuły i zawarte w nich odniesienia, aby uzyskać przegląd domeny:

  • Najnowocześniejsza technika uczenia się modeli na podstawie danych pozytywnych i nieznakowanych (oficjalna publikacja dostępna tutaj ): http://arxiv.org/abs/1402.3144
  • Technika obliczania powszechnie używanych wskaźników wydajności bez znanych negatywów (w trakcie przeglądu jest to pierwsza tego typu): http://arxiv.org/abs/1504.06837
Marc Claesen
źródło
1
Doskonały! Wielkie dzięki za referencje. RESVM i zapakowane SVM wydają się działać podobnie w ustawieniach uczenia PU. Czy możesz polecić implementacje (najlepiej w R) dowolnego algorytmu? Niestety, żadne z nich nie jest objęte kursem.
enricoferrero
1
@ enricoferrero Tak, działają one podobnie, chyba że istnieją fałszywe (znane) pozytywy, w którym to przypadku RESVM znacznie przewyższa workmowanie SVM (w tym celu zaprojektowałem RESVM, ponieważ aplikacja, nad którą pracuję, ma fałszywe pozytywy). Nie sądzę, aby były dostępne implementacje R, ale można je łatwo wdrożyć, pakując implementację SVM, taką jak kernlablub e1071. Zauważ, że zarówno spakowanie SVM, jak i RESVM ma wiele hiperparametrów, które musisz zoptymalizować, dla których polecam bibliotekę Optunity (ma interfejs R).
Marc Claesen
1
@ enricoferrero Mam implementację RESVM z wiersza polecenia dostępną na stronie github.com/claesenm/resvm , chociaż ten kod nie jest dobrze dopracowany. To konkretne repozytorium zostało napisane w Pythonie i jest używane jako sterownik dla pakietu EnsembleSVM .
Marc Claesen
Wygląda na to, że kolejną dobrą opcją dla algorytmu SVM z zapakowaniem może być użycie pakietu mlr w R z opakowaniem do pakowania wokół osoby uczącej się SVM .
enricoferrero
7

Zakładam, że w twoich 18000 przypadkach nie ma tylu przypadków spamu. Aby zastosować podejście nadzorowanego uczenia się, musisz mieć więcej niż jedną kategorię / klasę w swoich danych. Ponieważ wiesz, że 2000 przypadków to spam, możesz oznaczyć pozostałe 18000 przypadków jako „nieznaną kategorię” i wyszkolić każdy nadzorowany model uczenia się, aby przewidzieć, czy przypadek znajduje się w spamie, czy w nieznanej kategorii. Następnie sprawdź dokładność modelu przykładowego, aby zobaczyć, jak dobrze model działa, aby rozróżnić 2 kategorie. Jeśli działa dobrze, moje założenie o kilku przypadkach spamu w kategorii „nieznane” jest uzasadnione. Jeśli nie działa dobrze, musisz użyć ucznia bez nadzoru (np. Kmeans itp.), Aby utworzyć klaster i zidentyfikować oddzielne jednorodne grupy w swoich danych. Następnie określ, które klastry zawierają najwięcej 2000 wiadomości e-mail ze spamem, a które nie, i oznacz je odpowiednio jako spam i nie spam. Następnie możesz przystąpić do modelowania za pomocą nadzorowanego ucznia, jak opisałem wcześniej.

FelixNNelson
źródło
2

To, o czym mówi OP, jest jednoklasowym zadaniem klasyfikacyjnym, które jest bardzo trudne.

Istnieje wiele prac na temat tego zadania z różnych dziedzin badawczych. Napisałem również jeden „Schemat skutecznej weryfikacji autorstwa wewnętrznego w oparciu o uczenie się zespołu” . Bardzo łatwo jest go dostosować, aby klasyfikować spam / nie spam, a nie autorów. Spróbuj i daj mi znać, jeśli potrzebujesz dodatkowych informacji ...

Nieobsługiwany wyjątek
źródło
Podczas podążania za linkiem pojawia się błąd 404.
enricoferrero
Była literówka. Przepraszamy za to, powinno działać teraz ;-)
Nieobsługiwany wyjątek