Ich habe es vor ungefähr zwei Jahren geschrieben und auf der internen Website belassen, aber ich werde es veröffentlichen, weil es eine große Sache ist.
Es ist eine Übersetzung der folgenden Folie (Es ist eher eine Anpassung als eine Übersetzung, weil die Komposition ganz anders ist?) HJvanVeen's "Feature Engineering" https://www.slideshare.net/HJvanVeen/feature-engineering-72376750
Ich denke, dass diese Folie vollständiger ist als ein kleines Buch, wenn sie umfassend ist. Da es sich jedoch um eine Folie handelt, gibt es viele Teile, die mit einer relativ einfachen Beschreibung schwer zu verstehen sind. Möglicherweise haben Sie Ihre Absicht jedoch falsch verstanden, weil Sie die ursprüngliche Ankündigung nicht gehört haben. Einzelheiten zu den einzelnen Themen finden Sie im Grunde genommen auf einer Ebene, die Sie mit Google leicht verstehen können. Ich habe es nicht geschrieben und ich ergänze es nicht. Ich habe ergänzende Erklärungen nur für diejenigen beigefügt, die nicht viele Informationen haben oder schwer zu verstehen sind.
Obwohl auf dieser Folie verschiedene Themen aufgeführt sind, wird nicht viel über bestimmte Verwendungssituationen sowie Vor- und Nachteile geschrieben. Ich werde es so lassen, wie es diesmal ist, aber ich möchte etwas dagegen tun.
Die folgenden Module können verwendet werden, wenn das unten in Python eingeführte Feature-Quantity-Engineering durchgeführt wird.
Hinweis: Die Modulinformationen sind möglicherweise etwas veraltet, da sie vor langer Zeit geschrieben wurden.
pandas
Es kann für die allgemeine Verarbeitung von Tabellendaten verwendet werden. Get_dummies () scheint jedoch für One-Hot-Encoder verwendbar zu sein, kann jedoch fehlende Werte nicht verarbeiten. Daher ist es meiner Meinung nach besser, einen ~~ Transformator-Klassen-Wrapper für Scikit-Learn zu schreiben. Masu ~~ OneHotEncoder
ist einfacher zu bedienen.
scikit-learn
Verschiedene "Transformatoren" der "Vorverarbeitung".
Grundsätzlich kann alles mit den Methoden fit ()
und transform ()
konvertiert werden, wodurch der Quellcode leichter lesbar wird.
Es ist auch möglich, mit Pipeline zu organisieren. Idealerweise wird es mit dieser Pipeline organisiert, aber es sind nicht viele Klassen implementiert.
http://scikit-learn.org/stable/modules/preprocessing.html
Zum Beispiel,
Dieser Bereich hängt auch mit der Geschichte zusammen, die ich zuvor geschrieben habe.
"Damit die Datenanalyse in Python intelligenter funktioniert"
Category Encoders https://contrib.scikit-learn.org/categorical-encoding/ Es werden verschiedene zusätzliche Klassen angeboten, die mit Scikit-Learn verknüpft werden können. Es unterstützt auch "pandas.Series", wird jedoch nicht unter Berücksichtigung der Geschwindigkeit implementiert, sodass die Verarbeitung für große Datenmengen nicht effizient (sehr langsam) ist.
** Nachtrag: Ein kürzlich veröffentlichtes Update macht Scikit-Learn-Contrib, aber schwierig in der Pipeline zu verwenden. Ich denke, es ist einfacher, den Scikit-Learn-Native-Transformator zu verwenden oder selbst zu implementieren. **
Mlxtend Ein erweitertes Modul für die Arbeit mit Scikit-Learn https://rasbt.github.io/mlxtend/
** Nachtrag: Mit einem kürzlich veröffentlichten Update unterstützt scikit-learn auch einfache Lernkurse für Hetero-Ensembles. Usability-Vergleich wurde nicht untersucht **
imbalance-learn Ein Modul, das unter der Annahme erstellt wurde, dass es mit Scikit-Learn funktioniert. Verarbeitung unausgeglichener Daten http://contrib.scikit-learn.org/imbalanced-learn/stable/
imblearn.pipeline.Pipeline
anstelle von scicit-learn ersetzen)[^ imbpost]: Resampling von unausgeglichenen Daten verzerrt die posterioren Wahrscheinlichkeiten und verursacht (offensichtlich) eine Verzerrung der Vorhersage, wenn sie wie für die Klassifizierung verwendet wird. Dieses Problem und diese Lösung wurden theoretisch gezeigt ([10.1109 /]). SSCI.2015.33](https://doi.org/10.1109/SSCI.2015.33)), aber die Idee dieses Papiers wurde schon oft erwähnt. Takuya Kitazawas persönliche Seite enthält eine Zusammenfassung der Ideen in diesem Bereich als Referenz.
fancyimpute Modul zur Vervollständigung fehlender Werte https://github.com/iskandr/fancyimpute
(Ich habe es nie benutzt)
Ich werde kurz vor dem Hauptteil hinzufügen
[^ one-hot-sparse]: Übersetzung: Es gibt Implementierungen wie "pandas.get_dummies" und "sklearn.preprocessing.OneHotEncoder", die beide als spärliche Matrix von "scipy" zurückgegeben werden können .: https: // pandas .pydata.org / pandas-docs / stabile / generierte / pandas.get_dummies.html, http://contrib.scikit-learn.org/categorical-encoding/onehot.html, http://scikit-learn.org/stable /modules/generated/sklearn.preprocessing.OneHotEncoder.html ~~ Da sklearn jedoch numpy-kompatibel ist, sind die Eingabedaten nur vom numerischen Typ ~~ Derzeit ist es recht einfach zu verwenden, da es auch den Objekttyp unterstützt.
Auch als Hashing-Trick bezeichnet, Feature-Hashing [^ Hash-Trick].
[^ Hash-Trick]: In der Originalarbeit (DOI: 10.1145 / 1553374.1553516) ist der Hash-Trick eine Kombination aus Hash-Konvertierung und Kernel-Trick. Es zeigt. In letzter Zeit nennen es viele Leute nur Hash-Konvertierung.
Beachten Sie, dass im Fall eines linearen Modells die Zielvariable und die Anzahl eine lineare Korrelation aufweisen müssen, bevor sie gültig sind.
[^ yuukou]: Übersetzt von: Wie üblich bedeutet es "gültig (manchmal)" [^ tie]: Was tun bei Ranking-Bindungen?
[^ embedded]: Wie üblich gibt es Fälle, in denen es sich nicht um eine universelle Eigenschaft handelt (arXiv: 1604.06737). Es ist effektiv bei "komplizierterer Struktur". Situationen wie das sogenannte Schweizer Rollenproblem.
** Übersetzung **: Polygonale Transformation bedeutet die Verwendung einer Kombination von kategorialen Variablen als Merkmalsgröße. Es können zwei oder mehr Paare oder drei oder mehr Kombinationen sein. Kategorie Die einmalige Konvertierung von cal-Variablen führt häufig zu sehr großen Dimensionen. Wenn Sie also eine Kombination hinzufügen, tritt eine "Kombinationsexplosion" auf. Wenn viele kategoriale cal-Variablen vorhanden sind, umfasst das Lernen die polymorphe Transformation Sie können den Algorithmus Factorlization Machine (10.1109 / ICDM.2010.127) verwenden. Würde
[^ fs]: Möchten Sie es Funktionsauswahl nennen? [^ vw]: Da bin ich mir nicht sicher. VowpalWabbit Algorithmus zur Funktionsauswahl?
Konvertierung numerischer Informationen wie kontinuierlicher Variablen und Zählungen, die für den Algorithmus leichter zu erkennen sind als kategoriale Variablen.
Konvertieren numerischer Variablen in einen bestimmten Bereich.
[^ paarweise]: Übersetzung: Paarweise Entfernung? [^ Schätzung]: Übersetzung: Tobit-Modell oder Mehrfachzuweisungsmethode?
** Übersetzung **: Ein Algorithmus, der fehlende Werte nicht verarbeiten kann, funktioniert möglicherweise nur, aber die drei wichtigsten Methoden sind im Allgemeinen nicht gültig. Das vierte "Modell" In "Schätzen mit" wird "Beachten Sie, dass die Verzerrung des geschätzten Werts addiert wird", aber es ist auch klar, dass die Methode der Interpolation mit dem Durchschnittswert oder dem Medianwert auch der Verteilung der Merkmalsgrößen ein willkürliches Modell auferlegt. Wenn diese Methoden effektiv sind, kann man sagen, dass beispielsweise auch eine Methode zur einheitlichen Umwandlung fehlender Werte in Null effektiv ist.
[^ intui]: Es ist wie ein "Glaube"
So verbessern Sie die Anpassung an das lineare Modell durch nichtlineare Transformation [^ nonlin].
** Übersetzung **: Es gibt keine spezifische Erklärung für ** Blattcodierung **, aber möglicherweise wird ein Entscheidungsbaumalgorithmus wie eine zufällige Gesamtstruktur angewendet, und anstatt den vorhergesagten Wert zu verwenden, werden Informationen darüber angezeigt, welcher Blattknoten gefallen ist. Zufällige Gesamtstrukturen können auch komplexe Strukturen lernen. Daher wird vorgeschlagen, dass Blattknoteninformationen möglicherweise nichtlineare Funktionen in lineare Informationen umwandeln können. Ich weiß nicht, wer es ist, aber zum Beispiel 10.1145 / 2648584.2648589 hat ein Beispiel für seine Verwendung. [^ nonlin]: Die meisten der hier aufgeführten Methoden sind in Bezug auf die Dimension rechenintensiv oder explosionsartig rechenintensiv, so dass viele bei vielen Variablen unpraktisch sind. Für die Geschichte dieses Bereichs kann beispielsweise Akaho "Multivariate Kernel-Analyse" als Referenz verwendet werden.
Variablen, die Datumsangaben usw. darstellen, müssen häufig bestätigt werden. Hier treten wahrscheinlich Fehler auf, die jedoch häufig erheblich verbessert werden können.
** Übersetzung **: Obwohl vom Autor nicht erwähnt, gibt es einen klassischen Weg der "zirkulären Transformation", um die endliche Fourier-Klasse (dreieckige Polynomexpansion) zu verwenden, die zur Approximation periodischer Funktionen verwendet wird. Zum Beispiel Prophet So wird Periodizität ausgedrückt (wenn Sie den Propheten nicht kennen, was ich geschrieben habe und seinen Link ) Es gibt viele andere Techniken, die der Prophet leicht selbst implementieren kann, was beim Umgang mit Zeitvariablen hilfreich sein kann. Natürlich ist es einfacher der Tag, der Tag im Januar, das Jahr. In einigen Fällen können Informationen wie die Anzahl der Tage des Tages durch One-Hot-Conversion als kategoriale Variable ausgedrückt werden.
Räumlicher Standort: GPS-Koordinaten, Städte, Länder / Regionen, Adressen usw.
[^ kriging]: Übersetzung: Möchten Sie das tun? Ich denke, es ist in Ordnung, es zu versuchen, indem Sie dem Funktionsbetrag ein Variogramm hinzufügen.
Überprüfen Sie die Daten und finden Sie Ideen für Datenqualität, Ausreißer, Rauschen und Merkmalsextraktion.
Da das Feature-Quantity-Engineering eine Arbeit ist, die viele Male wiederholt wird, sollten Sie den Arbeitsablauf so gestalten, dass er schnell wiederholt werden kann.
Die Label- / Ziel- / Zielvariable selbst kann als Merkmalsgröße verwendet werden und umgekehrt.
** Übersetzung **: Dieser Artikel ist zu vage, um ihn zu verstehen, aber ich denke, er bezieht sich auf drei Haupttechniken.
Die erste Technik besteht darin, die Anpassung durch Transformation der Zielvariablen zu verbessern. Beispielsweise ist ein einfaches lineares Regressionsmodell tendenziell weniger geeignet, wenn die Verteilung asymmetrisch und verzerrt ist, z. B. logarithmisch oder quadratisch. Möglicherweise passt das lineare Regressionsmodell auch besser, wenn Sie die Zielvariable in transformieren und symmetrisch anpassen. Ein typisches Beispiel ist das ** Generalized Linear Model ** (GLM).
In der zweiten Erwähnung wird erwähnt, dass das Hinzufügen einer auf andere Weise transformierten Zielvariablen zu einem solchen Modell möglicherweise sogar noch besser ist, da die Zielvariable als Merkmalsgröße verwendet wird. Es kann nicht für die tatsächliche Vorhersage verwendet werden, aber es kann verwendet werden, um zu überprüfen, wo die Ursache für die schlechte Anpassung liegt, mit anderen Worten, welche Tendenz die Zielvariable hat, die von dem aktuell getesteten Modell nicht erfasst wird. Mit anderen Worten, wenn wir ein solches Modell mit einem Resthistogramm oder einem qq-Diagramm überprüfen, können wir einen Hinweis erhalten, dass wir die Konvertierungsmethode der in der ersten Technik erwähnten Zielvariablen verbessern können. Der Autor ist in der Statistik. Ich denke, es wird eine Methode erwähnt, die als Restdiagnose bezeichnet wird.
Der dritte ist der Inhalt, der in den letzten beiden "Zweiwertigen Variablen ~" und "Kann nicht in Testdaten verwendet werden ~" erwähnt wird. Wie der Name schon sagt, gibt es nur zwei Werte für binäre Variablen, daher gibt es nur wenige Informationen. Es wird gesagt, dass der Wert, zu dem diese binäre Variable wird, durch eine unbekannte Variable bestimmt wird ** latentes Variablenmodell * Es wird angenommen, dass eine unsichtbare Wahrscheinlichkeit dahinter steckt, wie z. B. *. Bei der Bewertung wird eine Variable erstellt, die die Wahrscheinlichkeit darstellt, die dem Wert einer binären Variablen entspricht, und ** das Klassifizierungsproblem durch ein Regressionsproblem für die Bewertungsvariable ersetzt. Dies bedeutet **, da diese Bewertungsvariable nicht ohne nachzudenken erstellt werden kann (wie üblich entspricht die Auswahl nur des Modells, das am besten zu den Daten passt, der Lösung eines normalen Klassifizierungsproblems). Es wird notwendig sein, Informationen darüber zu erhalten, wie die Wahrscheinlichkeit von außerhalb der Daten bestimmt wird, sogenanntes "Domänenwissen". "Kann nicht in Testdaten verwendet werden ~" dient zur Vorhersage des zukünftigen Merkmalswerts. Dies bedeutet, ein anderes Vorhersagemodell mit anderen Merkmalsgrößen und Zielvariablen als Merkmalsgrößen zu erstellen. Diese können auch als ** fehlende Wertekomplementierung im weiteren Sinne ** angesehen werden. Diese beiden Techniken verwenden ein anderes Vorhersagemodell. Es braucht Zeit, um es zu machen, aber natürlich kann eine solche Methode effektiv sein.
** Übersetzung **: Dieser Abschnitt ist eine sehr rudimentäre Liste von Geschichten ohne spezifische Erklärungen. Sie sollten daher ein anständiges Lehrbuch lesen (z. B. Coronas Reihe zur Verarbeitung natürlicher Sprache).
[^ pcanlp]: Übersetzung: Die Basis für diese Nummer ist unbekannt
[^ dl]: HAHAHA Heute ist kein Aprilscherz! [^ mean-feature]: Ist nicht ein Aspekt der Merkmalsextraktion ein Prozess, um das Problem der ungünstigen Bedingungen zu verbessern und die Optimierungsberechnung überhaupt zu stabilisieren?
Leakage/Golden Features
[^ Leckage]: Leckage ist eine Methode zur Verbesserung der Anpassung von Testdaten durch Verwendung von Informationen, die zum Zeitpunkt des Lernens ursprünglich nicht verfügbar waren. Die unten aufgeführten Techniken für Reverse Engineering und Rule Mining können in jeder Situation eingesetzt werden.
Es wird an verschiedenen Stellen eingefügt, aber ich werde es hier zusammenfassen.
Andrew Ng "Das Buch über die Anwendung des maschinellen Lernens, das sich nur schwer erfassen lässt, Zeit verschwendet und über Fachwissen im Bereich Feature Engineering verfügt." Domingos "Maschinelles Lernen hat sowohl Erfolge als auch Misserfolge. Was ist der Unterschied? Einfach ausgedrückt, der wichtigste Faktor sind die verwendeten Funktionen." Locklin: "Features Engineering ist etwas anderes, das nicht ausreicht, um in gelesenen Papieren oder Lehrbüchern erwähnt zu werden, aber es ist absolut notwendig für den Erfolg des maschinellen Lernens ... Viele erfolgreiche Beispiele für maschinelles Lernen sind tatsächlich Features. Zurück zum Engineering " Miel: "Machen Sie die Eingabedaten für den Algorithmus verständlich" Hal Daume III "Was die meisten Artikel sagen: Feature Engineering ist schwierig und zeitaufwändig, aber wir haben in diesem achtseitigen Artikel einen neuen Weg für neuronale Netze gefunden, der dasselbe tun kann. Es steht geschrieben" Francois Chollet "Um ein gutes Modell zu entwickeln, muss die ursprüngliche Idee bis kurz vor Ablauf der Frist immer wieder wiederholt werden. Es besteht immer das Potenzial, das Modell zu verbessern. Das endgültige Modell befasst sich normalerweise zuerst mit dem Problem. Es unterscheidet sich fast von den damaligen Aussichten, da Apriori-Zeitpläne den Konflikt mit der experimentellen Realität im Prinzip nicht überleben können. "
Recommended Posts