Ich sehe oft Leute, die neue Funktionen basierend auf vorhandenen Funktionen bei einem maschinellen Lernproblem erstellen. Zum Beispiel hier: https://triangleinequality.wordpress.com/2013/09/08/basic-feature-engineering-with-the-titanic-data/ Personen haben die Größe der Familie einer Person als neues Feature betrachtet auf die Anzahl der Brüder, Schwestern und Eltern, die vorhandene Merkmale waren.
Aber wozu das? Ich verstehe nicht, warum die Erstellung von korrelierten neuen Funktionen nützlich ist. Ist es nicht die Aufgabe des Algorithmus, dies alleine zu tun?
machine-learning
feature-engineering
Matthieu Veron
quelle
quelle
Antworten:
Das einfachste Beispiel zur Veranschaulichung ist das XOR-Problem (siehe Abbildung unten). Stellen Sie sich vor, Sie erhalten Daten, die und y- koordinierte und die vorherzusagende Binärklasse enthalten. Sie könnten erwarten, dass Ihr Algorithmus für maschinelles Lernen die richtige Entscheidungsgrenze selbst ermittelt. Wenn Sie jedoch das zusätzliche Merkmal z = x y generiert haben , wird das Problem trivial, da z > 0 Ihnen ein nahezu perfektes Entscheidungskriterium für die Klassifizierung gibt und Sie es einfach verwendet haben Arithmetik!x y z=xy z>0
Während Sie in vielen Fällen vom Algorithmus erwarten können, die Lösung zu finden, können Sie das Problem alternativ durch Feature-Engineering vereinfachen . Einfache Probleme sind einfacher und schneller zu lösen und erfordern weniger komplizierte Algorithmen. Einfache Algorithmen sind oft robuster, die Ergebnisse sind oft interpretierbarer, skalierbarer (weniger Rechenressourcen, Zeit bis zum Training usw.) und portabel. Weitere Beispiele und Erklärungen finden Sie in dem wunderbaren Vortrag von Vincent D. Warmerdam auf der PyData-Konferenz in London .
Glauben Sie außerdem nicht alles, was die Vermarkter für maschinelles Lernen Ihnen sagen. In den meisten Fällen werden die Algorithmen nicht "von selbst lernen". Normalerweise haben Sie nur begrenzte Zeit, Ressourcen und Rechenleistung, und die Daten sind normalerweise nur begrenzt groß und verrauscht. Beides hilft nicht.
Im Extremfall könnten Sie Ihre Daten als Fotos von handschriftlichen Notizen des Versuchsergebnisses bereitstellen und an ein kompliziertes neuronales Netzwerk weitergeben. Es würde zuerst lernen, die Daten auf Bildern zu erkennen, dann zu verstehen und Vorhersagen zu treffen. Dazu benötigen Sie einen leistungsstarken Computer und viel Zeit zum Trainieren und Optimieren des Modells. Außerdem benötigen Sie aufgrund der Verwendung eines komplizierten neuronalen Netzwerks große Datenmengen. Die Bereitstellung der Daten in computerlesbarem Format (als Zahlentabellen) vereinfacht das Problem erheblich, da Sie nicht die gesamte Zeichenerkennung benötigen. Sie können sich das Feature-Engineering als nächsten Schritt vorstellen, in dem Sie die Daten so transformieren, dass sie erstellt werden aussagekräftig werdenFunktionen, so dass Sie Algorithmus hat noch weniger auf eigene Faust herauszufinden. Um eine Analogie zu geben, es ist, als wollten Sie ein Buch in einer Fremdsprache lesen, sodass Sie zuerst die Sprache lernen mussten, anstatt sie in die Sprache zu übersetzen, die Sie verstehen.
Im Beispiel für Titanic-Daten müsste Ihr Algorithmus herausfinden, dass die Summierung von Familienmitgliedern sinnvoll ist, um die Funktion "Familiengröße" zu erhalten (ja, ich personalisiere sie hier). Dies ist ein offensichtliches Merkmal für einen Menschen, aber es ist nicht offensichtlich, wenn Sie die Daten nur als einige Spalten der Zahlen sehen. Wenn Sie nicht wissen, welche Spalten zusammen mit anderen Spalten sinnvoll sind, kann der Algorithmus dies durch Ausprobieren jeder möglichen Kombination solcher Spalten herausfinden. Sicher, wir haben clevere Methoden, aber es ist viel einfacher, wenn die Informationen sofort an den Algorithmus weitergegeben werden.
quelle
Wenn Sie vorhaben, einen einfachen linearen Klassifikator zu verwenden, ist es absolut sinnvoll, neue Features zu generieren, die eine nichtlineare Funktion der vorhandenen sind. Dies gilt insbesondere dann, wenn Ihre Domänenkenntnisse darauf hinweisen, dass das resultierende Feature aussagekräftig und informativ ist. Beachten Sie, dass ein linearer Klassifikator diese komplexen Features nur berücksichtigen kann, wenn Sie sie explizit angeben.
Wenn Sie einen ausreichend leistungsfähigen nichtlinearen Klassifizierungsalgorithmus verwenden, sollte dieser in der Lage sein, eine Entscheidungsgrenze zu erstellen, die willkürliche nichtlineare Transformationen der Eingabe-Features berücksichtigt, wenn diese für die Klassifizierung informativ sind. In der Praxis betrachten die meisten nichtlinearen Klassifikatoren jedoch nur einige Arten von Transformationen. Eine polynomiale Kernel-SVM berücksichtigt beispielsweise polynomiale Interaktionen zwischen Features, aber möglicherweise kann ein informativeres Feature durch Anwenden anderer Transformationstypen erstellt werden ...
Kurz gesagt, wenn das Domänenwissen darauf hinweist, dass eine handgefertigte nichtlineare Kombination von Features möglicherweise informativ ist, ist es sinnvoll, diese zu den vorhandenen Features hinzuzufügen.
quelle
Es ist wahr, dass einige der Modelle des maschinellen Lernens die Fähigkeit haben, mit der Nichtlinearität und Interaktion zwischen Variablen umzugehen, jedoch hängt es von der Situation ab, ich sehe drei Gründe, warum dies notwendig wird.
Wenn Sie nur zwei Funktionen erhalten,x1 and x2 . A simple linear model of y=x0+c1x1+c2x2 will not find any way to classify the target variable. So, instead, you need new quartic features to capture the non-linearity: y=x0+c1x21+c2x22 .
If you know in advance that some features (from business knowledge or experience), it may help create them to speed up the runtime of the model and make it easy for your model. For example, in your example of the Titanic data and if you are using a decision tree classification model. If you know that old ladies (age & gender) are more likely to survive, by creating a single feature that captures the information, your tree can make one split on the new variable instead of making two split on the two variables. It may speed up the computation time if you know in advance that the feature is significant.
In the real world, you won't get a single dataset like Kaggle provides. Instead, you get information from all over the place. For example, if you want to predict customer attrition for an online retail company like Amazon, you have customer demography info, purchase transaction info. You need to generate a lot of feature from different sources, in this case, You will find a lot of useful features can be obtained/aggregated from the transaction level. As Andrew Ng puts it: Often times, the ability to do feature-engineering defines the success or failure of a machine learning project.
quelle