Nutzen des Feature-Engineerings: Warum neue Features basierend auf vorhandenen Features erstellen?

30

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?

Matthieu Veron
quelle
Verwandte: stats.stackexchange.com/questions/349155/…
Sycorax sagt Reinstate Monica

Antworten:

30

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!xyz=xyz>0

XOR problem

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.

Tim
quelle
Danke, es ist sehr gut erklärt und sehr interessant!
Matthieu Veron
Ich finde deine Antwort sehr gut, aber ich denke, es ist besser, sie ein bisschen zu qualifizieren. Insbesondere denke ich, dass Feature-Engineering in Bezug auf Interaktionsterme die Dinge für Algorithmen wie RFs nicht so sehr vereinfacht (obwohl es immer noch hilfreich sein kann), da RFs die Interaktionsterme zu einem gewissen Grad selbst erfassen. Lassen Sie mich wissen, wenn mir etwas Wichtiges fehlt. Aber ja, im Allgemeinen vereinfacht und hilft das Feature-Engineering einiges.
Poete Maudit
@PoeteMaudit Es ist wahr, dass der Entscheidungsbaum (und damit RF) eine große Interaktion modelliert, aber es ist eine bestimmte Art von Interaktionen, nicht jede mögliche Interaktion. Darüber hinaus geht es beim Feature Engineering nicht nur um Interaktionen.
Tim
Sicher stimme ich Ihren Punkten zu. Erstens modellieren diese RFs eine bestimmte Art von Interaktionen (Sie meinen hauptsächlich x * y?). Zweitens geht es beim Feature Engineering nicht nur um Interaktionen.
Poete Maudit
14

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.

Daniel López
quelle
OK ich verstehe ! Aber woher kann ich wissen, ob meine von mir erstellten Funktionen aussagekräftig und informativ sind? Ich meine, Probleme können kontraintuitive Erklärungen haben. Nach meinem Verständnis ist das Erstellen von Features eine Möglichkeit, den Algorithmus in eine Richtung zu lenken, um Zeit bei seinen Vorhersagen zu sparen. In einigen Punkten beeinflussen wir den Algorithmus. Wie können wir überprüfen, ob wir richtig beeinflussen?
Matthieu Veron
2
Nun, hier kommt das Fachwissen ins Spiel. Wenn Sie beispielsweise ein medizinisches Diagnosesystem entwerfen, können Sie mit Ärzten sprechen und sie fragen, welche Informationen sie zur Diagnose eines Patienten verwenden. Zum Beispiel, wenn ein Arzt sagt "Wenn der Patient sowohl Fieber als auch Kopfschmerzen hat, dann ist es wahrscheinlich, dass er eine Grippe hat". Dieser Satz könnte darauf hinweisen, dass die Aufnahme einer neuen Flag-Funktion, die das Vorhandensein von Fieber und Kopfschmerzen anzeigt, eine gute Idee sein könnte (insbesondere, wenn Sie einen linearen Klassifikator verwenden, der Polynom-Interaktionsfunktionen für sich nicht "sehen" kann).
Daniel López
1
Trotzdem ist dies eher eine Kunst als eine Wissenschaft. Am Ende müssen Sie die Wirksamkeit Ihrer handgefertigten Funktionen überprüfen, indem Sie Ihre Modelle an einem Testset mit einem unvoreingenommenen Versuchsprotokoll testen ...
Daniel López,
3

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.

  1. Bei einigen Modellen wie der linearen Regression wird die Nichtlinearität nicht automatisch verarbeitet. In diesem Fall müssen Sie zusätzliche Features erstellen, um diese zu unterstützen. Zum Beispiel unten: Wenn Sie den folgenden Datensatz haben, der alleY.=1 der Zielvariablen gruppiert in der Mitte eines Kreises wie Fläche.

Circle Boundary

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+c1x12+c2x22.

  1. 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.

  2. 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.

Anthony Lei
quelle