Angenommen, ich arbeite an einem Klassifizierungsproblem. (Betrugserkennung und Kommentar-Spam sind zwei Probleme, an denen ich gerade arbeite, aber ich bin neugierig auf jede Klassifizierungsaufgabe im Allgemeinen.)
Woher weiß ich, welchen Klassifikator ich verwenden soll?
- Entscheidungsbaum
- SVM
- Bayesian
- Neurales Netzwerk
- K-nächste Nachbarn
- Q-Learning
- Genetischen Algorithmus
- Markov Entscheidungsprozesse
- Faltungs-Neuronale Netze
- Lineare Regression oder logistische Regression
- Boosten, Absacken, Ensambling
- Zufälliges Bergsteigen oder simuliertes Tempern
- ...
In welchen Fällen ist einer davon die "natürliche" erste Wahl, und nach welchen Grundsätzen wird dieser gewählt?
Beispiele für die Art der Antworten, nach denen ich suche (aus dem Buch Introduction to Information Retrieval von Manning et al. ):
ein. Wenn Ihre Daten beschriftet sind, Sie aber nur eine begrenzte Menge haben, sollten Sie einen Klassifikator mit hoher Verzerrung verwenden (z. B. Naive Bayes) .
Ich vermute, das liegt daran, dass ein Klassifikator mit höherer Vorspannung eine geringere Varianz aufweist, was aufgrund der geringen Datenmenge gut ist.
b. Wenn Sie eine Menge Daten haben, ist der Klassifikator nicht wirklich wichtig, daher sollten Sie wahrscheinlich nur einen Klassifikator mit guter Skalierbarkeit auswählen.
Was sind andere Richtlinien? Sogar Antworten wie "Wenn Sie Ihr Modell einer Person des oberen Managements erklären müssen, sollten Sie vielleicht einen Entscheidungsbaum verwenden, da die Entscheidungsregeln ziemlich transparent sind" sind gut. Ich kümmere mich jedoch weniger um Implementierungs- / Bibliotheksprobleme.
Gibt es für eine etwas andere Frage neben Standard-Bayes'schen Klassifikatoren auch Standardmethoden nach dem Stand der Technik für die Erkennung von Kommentar-Spam (im Gegensatz zu E-Mail-Spam)?
Antworten:
Zunächst müssen Sie Ihr Problem identifizieren. Es hängt davon ab, welche Art von Daten Sie haben und welche Aufgabe Sie sich wünschen.
In jedem der oben genannten Ansätze gibt es unterschiedliche Algorithmen. Die Wahl eines bestimmten Algorithmus hängt von der Größe des Datensatzes ab.
Quelle: http://scikit-learn.org/stable/tutorial/machine_learning_map/
quelle
Die Modellauswahl mithilfe der Kreuzvalidierung kann das sein, was Sie benötigen.
Kreuzvalidierung
Sie teilen Ihren Datensatz einfach in k nicht überlappende Teilmengen (Falten) auf, trainieren ein Modell mit k-1-Falten und prognostizieren seine Leistung anhand der ausgelassenen Falte. Dies tun Sie für jede mögliche Kombination von Falten (lassen Sie zuerst die 1. Falte aus, dann die 2., ..., dann die k-te und trainieren Sie mit den verbleibenden Falten). Nach Abschluss schätzen Sie die mittlere Leistung aller Falten (möglicherweise auch die Varianz / Standardabweichung der Leistung).
Wie Sie den Parameter k wählen, hängt von Ihrer Zeit ab. Übliche Werte für k sind 3, 5, 10 oder sogar N, wobei N die Größe Ihrer Daten ist (dies entspricht der einmaligen Kreuzvalidierung ). Ich bevorzuge 5 oder 10.
Modellauswahl
Angenommen, Sie haben 5 Methoden (ANN, SVM, KNN usw.) und 10 Parameterkombinationen für jede Methode (abhängig von der Methode). Sie müssen lediglich eine Kreuzvalidierung für jede Kombination aus Methode und Parameter durchführen (5 * 10 = 50) und das beste Modell, die beste Methode und die besten Parameter auswählen. Dann trainieren Sie mit der besten Methode und den besten Parametern für alle Ihre Daten neu und haben Ihr endgültiges Modell.
Es gibt noch einige Dinge zu sagen. Wenn Sie zum Beispiel viele Methoden und Parameterkombinationen für jede verwenden, ist es sehr wahrscheinlich, dass Sie überanpassen. In solchen Fällen müssen Sie eine verschachtelte Kreuzvalidierung verwenden .
Verschachtelte Kreuzvalidierung
In verschachtelter Kreuzvalidierung Sie eine Kreuzvalidierung für den Modellauswahlalgorithmus durch.
Wieder teilen Sie Ihre Daten zuerst in k Falten auf. Nach jedem Schritt wählen Sie k-1 als Ihre Trainingsdaten und die verbleibende als Ihre Testdaten. Anschließend führen Sie für jede mögliche Kombination dieser k Falten eine Modellauswahl (das oben erläuterte Verfahren) durch. Nachdem Sie dies abgeschlossen haben, haben Sie k Modelle, eines für jede Kombination von Falten. Danach testen Sie jedes Modell mit den verbleibenden Testdaten und wählen das beste aus. Nachdem Sie das letzte Modell erhalten haben, trainieren Sie erneut ein neues Modell mit derselben Methode und denselben Parametern für alle Daten, die Sie haben. Das ist dein letztes Modell.
Natürlich gibt es viele Variationen dieser Methoden und anderer Dinge, die ich nicht erwähnt habe. Wenn Sie weitere Informationen dazu benötigen, suchen Sie nach Veröffentlichungen zu diesen Themen.
quelle
Das Buch " OpenCV " hat zwei großartige Seiten dazu auf den Seiten 462-463 . Wenn Sie in der Amazon-Vorschau nach dem Wort "diskriminierend" suchen (wahrscheinlich auch in Google Books), werden die betreffenden Seiten angezeigt. Diese beiden Seiten sind das größte Juwel, das ich in diesem Buch gefunden habe.
Zusamenfassend:
Boosting - oft effektiv, wenn eine große Menge an Trainingsdaten verfügbar ist.
Zufällige Bäume - oft sehr effektiv und können auch eine Regression durchführen .
K-nächste Nachbarn - das Einfachste, was Sie tun können, oft effektiv, aber langsam und erfordert viel Speicher .
Neuronale Netze - Langsam zu trainieren, aber sehr schnell zu laufen , immer noch optimal für die Buchstabenerkennung .
SVM - Zu den besten mit begrenzten Datenmengen , die jedoch nur dann gegen Boosting oder zufällige Bäume verlieren, wenn große Datenmengen verfügbar sind.
quelle
Zu den Dingen, die Sie bei der Auswahl des zu verwendenden Algorithmus berücksichtigen könnten, gehören:
Müssen Sie schrittweise trainieren (im Gegensatz zu Batch)?
Wenn Sie Ihren Klassifikator häufig mit neuen Daten aktualisieren müssen (oder Sie haben Tonnen von Daten), möchten Sie wahrscheinlich Bayesian verwenden. Neuronale Netze und SVM müssen auf einmal an den Trainingsdaten arbeiten.
Bestehen Ihre Daten nur aus kategorialen oder nur numerischen Daten oder aus beiden ? ?
Ich denke, Bayesian funktioniert am besten mit kategorialen / binomialen Daten. Entscheidungsbäume können keine numerischen Werte vorhersagen.
Müssen Sie oder Ihr Publikum verstehen, wie der Klassifikator funktioniert?
Verwenden Sie Bayes'sche oder Entscheidungsbäume, da diese den meisten Menschen leicht erklärt werden können. Neuronale Netze und SVM sind "Black Boxes" in dem Sinne, dass Sie nicht wirklich sehen können, wie sie Daten klassifizieren.
Wie viel Klassifizierungsgeschwindigkeit benötigen Sie?
SVMs sind schnell, wenn es um die Klassifizierung geht, da sie nur bestimmen müssen, auf welcher Seite der "Linie" sich Ihre Daten befinden. Entscheidungsbäume können langsam sein, insbesondere wenn sie komplex sind (z. B. viele Zweige).
Komplexität .
Neuronale Netze und SVMs können komplexe nichtlineare Klassifikationen verarbeiten.
quelle
Wie Prof. Andrew Ng oft feststellt: Beginnen Sie immer mit der Implementierung eines groben, schmutzigen Algorithmus und verfeinern Sie ihn dann iterativ .
Für die Klassifizierung ist Naive Bayes ein guter Starter, da es gute Leistungen erbringt, hoch skalierbar ist und sich an nahezu jede Art von Klassifizierungsaufgabe anpassen kann. Auch 1NN (K-Nearest Neighbors mit nur 1 Nachbarn) ist ein problemloser Best-Fit-Algorithmus (da die Daten das Modell sind und Sie sich daher nicht um die Dimensionsanpassung Ihrer Entscheidungsgrenze kümmern müssen) Das Problem sind die Berechnungskosten (quadratisch, da Sie die Abstandsmatrix berechnen müssen, sodass sie möglicherweise nicht für hochdimensionale Daten geeignet ist).
Ein weiterer guter Starter-Algorithmus sind die Random Forests (bestehend aus Entscheidungsbäumen). Diese sind auf eine beliebige Anzahl von Dimensionen hoch skalierbar und weisen im Allgemeinen durchaus akzeptable Leistungen auf. Schließlich gibt es genetische Algorithmen , die sich bewundernswert gut auf jede Dimension und alle Daten mit minimaler Kenntnis der Daten selbst skalieren lassen, wobei die minimalste und einfachste Implementierung die ist mikrobielle genetische Algorithmus ist (nur eine Zeile C-Code! Von Inman Harvey in 1996) und eines der komplexesten ist CMA-ES und MOGA / e-MOEA.
Und denken Sie daran, dass Sie oft nicht wirklich wissen können, was mit Ihren Daten am besten funktioniert, bevor Sie die Algorithmen wirklich ausprobieren.
Nebenbei bemerkt, wenn Sie möchten, dass ein theoretischer Rahmen Ihre Hypothese und Algorithmen theoretischen Leistungen für ein bestimmtes Problem testet, können Sie den PAC-Lernrahmen (wahrscheinlich ungefähr korrekt) verwenden (Vorsicht: Es ist sehr abstrakt und komplex!), Aber zu Zusammenfassend sagt der Kern des PAC-Lernens, dass Sie den weniger komplexen, aber komplex genug (Komplexität ist die maximale Dimensionalität, die das Algo anpassen kann) -Algorithmus verwenden sollten, der zu Ihren Daten passt. Mit anderen Worten, verwenden Sie das Rasiermesser des Occam.
quelle
Sam Roweis pflegte zu sagen, dass Sie vor allem naive Bayes, logistische Regression, k-nächsten Nachbarn und Fisher's lineare Diskriminante ausprobieren sollten.
quelle
Ich gehe davon aus, dass Sie immer zuerst die Basisklassifizierer ausführen, um einen Eindruck von Ihren Daten zu bekommen. Meistens (zumindest nach meiner Erfahrung) waren sie gut genug.
Wenn Sie also Daten überwacht haben, trainieren Sie einen Naive Bayes-Klassifikator. Wenn Sie unbeaufsichtigte Daten haben, können Sie k-means Clustering ausprobieren.
Eine weitere Ressource ist eines der Vorlesungsvideos der Videoserie Stanford Machine Learning , die ich mir vor einiger Zeit angesehen habe. Ich denke, in Video 4 oder 5 diskutiert der Dozent einige allgemein akzeptierte Konventionen, wenn er Klassifikatoren, Vorteile / Kompromisse usw. trainiert.
quelle
Sie sollten immer die Folgerung gegen die Vorhersage berücksichtigen Kompromiss zwischen .
Wenn Sie die komplexe Beziehung verstehen möchten, die in Ihren Daten auftritt, sollten Sie einen umfassenden Inferenzalgorithmus verwenden (z. B. lineare Regression oder Lasso). Wenn Sie jedoch nur am Ergebnis interessiert sind, können Sie hochdimensionale und komplexere (aber weniger interpretierbare) Algorithmen wie neuronale Netze verwenden.
quelle
Die Auswahl des Algorithmus hängt vom Szenario sowie von der Art und Größe des Datensatzes ab. Es gibt viele andere Faktoren.
Dies ist ein kurzer Spickzettel für das grundlegende maschinelle Lernen.
quelle
Zunächst hängt es davon ab, mit welcher Art von Problem Sie sich befassen, ob es sich um Klassifizierung oder Regression handelt. Dann wählen Sie Ihr Modell mit Bedacht aus. Es hängt von einem bestimmten Modell ab, ob ein bestimmtes Modell andere Modelle übertrifft. Angenommen, Sie arbeiten an wine_dataset aus der sklearn-Bibliothek und haben zuerst versucht, die Daten mit Kernel svm linear zu trainieren, und Sie erhalten eine gewisse Genauigkeit. Dann denken Sie, dass dies nicht zufriedenstellend ist. Dann haben Sie versucht, Ihre Daten mit DecisionTreeClassifier () zu trainieren und dann haben Sie es mit RandomForestClassifier () versucht. Danach können Sie daraus schließen, welche Genauigkeit besser ist oder Sie sagen können, dass sie zu Ihren Daten passt. Es gibt so kleine syntaktische Unterschiede, die Sie feststellen werden, wenn Sie das Modell zum Testen ständig ändern. Also alles Gute und verstehe das Problem gut.
quelle