Umgang mit sehr variablen Feature-Set-Größen
Ich versuche, maschinelles Lernen für die Klassifizierung von Sicherheitsereignissen zu verwenden. Mein Ziel ist es, das Ergebnis (richtig positiv oder falsch positiv) eines bestimmten Ereignisses vorherzusagen. Ein Ereignis enthält eine Reihe von Variablen, die als Observablen bezeichnet werden. Dies können URLs, IP-Adressen, Datei-Hashes usw. sein (insgesamt 8 Typen). Ein Ereignis kann jedoch eine kleine Anzahl von Observablen oder auch eine große Anzahl enthalten. Da ich das Ergebnis basierend auf diesen Observablen vorhersagen möchte, variiert meine Feature-Größe in der Länge - zwischen 1 und 2500. Dies in einem Beispiel des Datensatzes:
['user1', '1.1.1.1', 'explorer.exe', NULL, NULL, NULL ...]
['google.com', 'msword.exe', NULL, NULL, NULL ...]
['user3', '1.1.1.9', 'explorer.exe', 'e0d123e5f316bef78bfdf5a008837577', 'http://google.com, NULL ...]
Wie kann ich mit diesem Szenario umgehen? Zum Vergleich möchte ich auch eine Klassifikation sowie neuronale Netze ausprobieren.
Bearbeiten
Ich habe letztendlich den Bag of Words-Ansatz verwendet, da die von mir erwähnten "Observablen" als Wörter in einem Dokument interpretiert werden können. Von da an ist mein Fall ein relativ bekanntes Problem bei der Textklassifizierung, und ich habe mit Naive Bayes-Algorithmen und Hash-Vektorisierung gute Ergebnisse erzielt.
Antworten
Bevor ich mir überlege, welche Art von Algorithmus Sie verwenden könnten, würde ich mir überlegen, wie Sie Ihre Daten richtig vorverarbeiten können. Abhängig davon, wie viele mögliche Werte Sie für jeden Ihrer 8 möglichen Typen haben könnten (wenn ich das richtig verstanden habe), könnten Sie einen 0- und 1-Datensatz erstellen, der das Vorhandensein oder Fehlen jedes möglichen Werts in jedem Ereignis anzeigt.
Dies würde dazu führen, dass Sie eine spärliche Matrix haben, aber das ist etwas, mit dem Sie mit einigen Werkzeugen umgehen können. Ein möglicherweise schönes Beispiel finden Sie in diesem Link
Fazit:
- Ich würde zuerst versuchen herauszufinden, ob es feste mögliche Werte für jeden Ihrer Typen gibt (durch Erstellen von Gruppen von IPs nach Region? Gibt es eine feste Anzahl möglicher EXE-Dateien, URLs ...?)
- Verarbeiten Sie Ihre Daten vor, so dass http://google.comund google.com haben denselben Wert (dh durch Löschen von http: // aus URLs).
- Wenn Sie der Meinung sind, dass die Anzahl der möglichen Werte nicht lächerlich groß ist, können Sie versuchen, die Sparse-Matrix zu erstellen
Danach könnten Sie sich vorstellen, welche Art von Algorithmus angewendet werden soll, und von Anfang an nicht verrückt nach einem neuronalen Netzwerk werden.
Ich stimme dem deutschen CM zu, Ihre Daten sind strukturiert, obwohl sie nicht vollständig strukturiert sind. Die erste Aufgabe besteht also darin, die Daten in Funktionen umzuwandeln, die von ML genutzt werden können. Dies ist ein typisches Feature-Engineering: Die Idee ist, zu versuchen, die verschiedenen Arten von Elementen in den Daten so zu organisieren, dass sie nützliche Hinweise für den Algorithmus liefern können. Viele Lernalgorithmen können mit fehlenden Werten umgehen, sodass das Fehlen einer bestimmten Art von Informationen nicht unbedingt ein Problem darstellt. Natürlich ist es schwierig, präzise Ratschläge zu geben, da diese Phase Expertenwissen erfordert.
Beachten Sie, dass es technisch gesehen Methoden gibt, die solche Sequenzen variabler Länge als Eingabe verwenden. Es ist jedoch höchst unwahrscheinlich, dass dies gut funktioniert, wenn der Algorithmus alles selbst erraten muss.