Wie führe ich ein Feature-Engineering für unbekannte Features durch?


19

Ich nehme an einem Kaggle-Wettbewerb teil. Der Datensatz hat ungefähr 100 Funktionen und alle sind unbekannt (in Bezug darauf, was sie tatsächlich darstellen). Im Grunde sind es nur Zahlen.

Die Leute führen eine Menge Feature-Engineering für diese Features durch. Ich frage mich, wie genau man Feature-Engineering für unbekannte Features durchführen kann. Kann mir bitte jemand helfen, dies zu verstehen, und einige Tipps dazu, wie ich ein Feature-Engineering für unbekannte Features durchführen kann?

Antworten:


19

Sie benötigen keine Domänenkenntnisse (das Wissen darüber, was Ihre Daten bedeuten ), um Features zu entwickeln (aussagekräftigere Möglichkeiten zur Gestaltung Ihrer Daten zu finden).


Wie Tu N. erklärte , können Sie "schnelle und schmutzige" Kombinationen von Funktionen finden, die ziemlich einfach hilfreich sein könnten. Ausgehend von einer Ausgabe und einem einzelnen Merkmal können Sie die folgenden Transformationen durchführen: . Eine schnelle Überprüfung der Nützlichkeit der Transformation ist, wenn die Korrelation zwischen höher ist als die Korrelation zwischen .x x '{ e x , log ( x ) , x 2 , x 3 , tanh ( x ) } { y , x ' } { y , x }yxx{ex,log(x),x2,x3,tanh(x)}{y,x}{y,x}

Warnung zur Korrelation: Die Korrelation zeigt nicht alles an. Abhängig vom verwendeten Modell (stark nichtlinear wie NN oder RF) und der Interaktion mit anderen Variablen kann eine Änderung der Korrelation nichts bedeuten.

Wenn Sie jedoch ein einfaches lineares Modell wie die logistische Regression verwenden, ist dies ein OK-Indikator für die Leistung. Der beste Weg , eine solche Transformation, jedoch zu bewerten, wie von dem bekannten Fokhruz Zaman , wäre ein Modell mit und ohne Ihre transformierten Merkmals zu bauen, und sehen , wie die Validierungsfehler (auf der Kreuzvalidierung Falten) entwickelt.

Auf diese Weise lassen sich Transformationen mit nur einem Merkmal relativ leicht erkennen. Diese beziehen sich auf eine Vielzahl von Daten, bei denen eine aussagekräftigere Beziehung zwischen Ihrer Eingabe und Ihrer Ausgabe in einem anderen Maßstab bestehen kann. Zum Beispiel scheint die Beziehung zwischen Einkommen und "Glück" logarithmisch zu sein, aber Sie würden niemals das Protokoll des Einkommens eines Teilnehmers direkt aufzeichnen.


Das Finden von Merkmalskombinationen ist schwieriger. Wenn Sie zunächst jede Addition von 2 Features testen möchten und über Features verfügen, müssen Sie eine Reihenfolge von Transformationen testen. Um solche Transformationen zu finden, können Sie ein nichtlineares Modell (wie z. B. NN oder RF) auf das Problem anwenden und versuchen, herauszufinden, was es gerade lernt. Wenn Sie feststellen können, was eine Zwischenebene in einem NN gerade tut, können Sie das Ergebnis vorberechnen und als neues Feature hinzufügen. Es muss nicht erneut berechnet werden und wird wahrscheinlich versuchen, etwas Neues zu lernen.D 2DD2

Es kann schwierig sein, die interne Darstellung eines NN zu interpretieren oder die Wichtigkeit von Features in einer zufälligen Gesamtstruktur zu interpretieren. Eine einfachere und wahrscheinlich geeignetere Methode für diesen Zweck wäre Boosting mit Entscheidungsbäumen. Es gibt eine Menge Bibliotheken, die Boosting implementieren, und wenn Sie an einem Kaggle-Wettbewerb interessiert sind, wie Ihr Beitrag zu implizieren scheint , wird XGBoost anscheinend von vielen Teilnehmern verwendet, sodass Sie möglicherweise einige Hilfe / Tutorials zu dem finden, was ich beschreiben werde.

Führen Sie zunächst Ihren Boosting-Algorithmus aus, indem Sie nur Stümpfe und einstufige Entscheidungsbäume verwenden. Stümpfe sind sehr schwach, aber Boosting macht es zu einem vernünftigen Modell. Dies wird als Basis dienen. Abhängig von der von Ihnen verwendeten Bibliothek sollten Sie in der Lage sein, die am häufigsten verwendeten Funktionen recht einfach anzuzeigen, und Sie sollten sie mit der Antwort abgleichen (oder ein Histogramm erstellen, wenn die Antwort kategorisch ist), um ein bestimmtes Muster zu identifizieren. Dies könnte Ihnen eine Vorstellung davon geben, was eine gute Einzelmerkmalumwandlung wäre.

Führen Sie als Nächstes den Boosting-Algorithmus mit Entscheidungsbäumen auf zwei Ebenen aus. Dieses Modell ist viel komplexer als das vorherige. Wenn zwei Variablen zusammengenommen mehr Leistung haben als einzeln genommen, sollte dieses Modell Ihre vorherige übertreffen (wiederum nicht in Bezug auf Trainingsfehler, sondern auf Validierungsfehler!). Auf dieser Grundlage sollten Sie in der Lage sein, zu extrahieren, welche Variablen häufig zusammen verwendet werden, und dies sollte Sie zu potenziellen Transformationen mit mehreren Features führen.


Zu verwandten Materialien würde ich die folgenden Videos empfehlen, da sie leicht zu verfolgen sind


4

Sie können verschiedene Merkmalskombinationen verwenden, z. B. die Summe der Merkmale: feat_1 + feat_2 + feat_3... oder deren Produkt. Sie können Features auch nach Protokoll, Exponential, Sigmoid usw. transformieren oder das numerische Feature in ein kategoriales diskretisieren. Es ist ein unendlicher Raum zum Erkunden.

Unabhängig davon, welche Kombination oder Transformation Ihre Cross-Validation- oder Test-Set-Leistung erhöht, sollten Sie sie verwenden.


2
Ich würde ein kleines Problem mit "Welche Kombination oder Transformation auch immer Ihre Cross-Validation- oder Test-Set-Leistung erhöht, dann sollten Sie sie verwenden." Das blinde Ausprobieren von Dingen, bis etwas Ihre Leistungsmetrik verbessert, kann dazu führen, dass eine Beziehung entdeckt wird, die keinen Sinn ergibt und zu Überanpassung führt. Dies könnte die Leistung bei neuen Beobachtungen in der Zukunft erheblich beeinträchtigen.
Hersheezy

1

Können Sie uns bitte anhand konkreter Beispiele Ihre folgende Aussage näher erläutern?

The dataset has around 100 features and all are unknown (in terms of what actually they represent). Basically they are just numbers.

Ich bin mir nicht sicher, wie Sie Feature-Engineering durchführen können, ohne Ihr Daten-Set und die angegebenen Attribute zu verstehen !!

Tabellarische Daten werden als Beobachtungen oder Instanzen (Zeilen) beschrieben, die aus Variablen oder Attributen (Spalten) bestehen. Ein Attribut kann ein Feature sein.

"Die Idee eines Merkmals, das von einem Attribut getrennt ist, ist im Kontext eines Problems sinnvoller. Ein Merkmal ist ein Attribut, das für Ihr Problem nützlich oder sinnvoll ist. Es ist ein wichtiger Teil einer Beobachtung zum Erlernen der Struktur von das Problem, das modelliert wird ... ... ...

In der Computersicht ist ein Bild eine Beobachtung, aber ein Merkmal kann eine Linie im Bild sein.

Bei der Verarbeitung in natürlicher Sprache kann ein Dokument oder ein Tweet eine Beobachtung sein, und eine Wort- oder Phrasenanzahl kann ein Merkmal sein.

Bei der Spracherkennung kann eine Äußerung eine Beobachtung sein, ein Merkmal kann jedoch ein einzelnes Wort oder ein Phonem sein. "

Bitte besuchen Sie die folgende URL für weitere Informationen:

Entdecken Sie Feature Engineering, wie Sie Features entwickeln und wie Sie gut damit umgehen


Die Attribute im Fall des OP wurden bis zu dem Punkt anonymisiert, an dem Domänenwissen nicht mehr verwendet werden kann. Dies ist bei Kaggle-Wettbewerben durchaus üblich, es sind jedoch noch begrenzte Formen des Feature-Engineerings möglich. In der Regel werden neue Features in großen Mengen erstellt und dann getestet, anstatt Fachwissen als Leitfaden für ihre Erstellung zu verwenden. Ein Beispiel: kaggle.com/c/bnp-paribas-cardif-claims-management/data
Neil Slater

Wie Neil sagte, sind die Features anonymisiert, das meine ich mit meiner Aussage.
user2409011
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.