[PYTHON] Seit der Veröffentlichung von DataLiner 1.2.0 werden wir die neu hinzugefügte Vorverarbeitung einführen.

Einführung

Wir haben DataLiner 1.2.0 veröffentlicht, eine Vorverarbeitungsbibliothek für maschinelles Lernen. Dieses Mal habe ich ungefähr 6 neue Vorverarbeitungen hinzugefügt, daher möchte ich sie vorstellen.

GitHub: https://github.com/shallowdf20/dataliner PyPI: https://pypi.org/project/dataliner/ Document: https://shallowdf20.github.io/dataliner/preprocessing.html

Installation

Mit pip installieren.

! pip install -U dataliner

Datenaufbereitung

Verwenden Sie die Titanic-Daten wie gewohnt.

import pandas as pd
import dataliner as dl

df = pd.read_csv('train.csv')
target_col = 'Survived'

X = df.drop(target_col, axis=1)
y = df[target_col]
PassengerId Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked
1 3 Braund, Mr. Owen Harris male 22 1 0 A/5 21171 7.250 NaN S
2 1 Cumings, Mrs. John Bradley (Florence Briggs Thayer) female 38 1 0 PC 17599 71.283 C85 C
3 3 Heikkinen, Miss. Laina female 26 0 0 STON/O2. 3101282 7.925 NaN S
4 1 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35 1 0 113803 53.100 C123 S
5 3 Allen, Mr. William Henry male 35 0 0 373450 8.050 NaN S

Lassen Sie uns jetzt einen Blick darauf werfen.

AppendArithmeticFeatures Zwischen den in den Daten enthaltenen Merkmalsmengen werden vier Regeln ausgeführt, und eine neue Merkmalsmenge mit einem höheren Bewertungsindex als der in der Berechnung verwendeten Merkmalsmenge wird neu hinzugefügt. Die Bewertung erfolgt durch logistische Regression. Standardmäßig sind Multiplikations- und Bewertungsindex AUC, aber auch Addition, Subtraktion und Division, Genauigkeit usw. sind verfügbar. Es ist notwendig, die fehlenden Werte vor der Verwendung einzugeben.

process = make_pipeline(
    dl.ImputeNaN(),
    dl.AppendArithmeticFeatures(metric='roc_auc', operation='multiply')
)
process.fit_transform(X, y)
PassengerId Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked PassengerId_multiply_Age PassengerId_multiply_SibSp PassengerId_multiply_Parch Pclass_multiply_Age
1 3 Braund, Mr. Owen Harris male 22 1 0 A/5 21171 7.250 B96 B98 S 22 1 0 66
2 1 Cumings, Mrs. John Bradley (Florence Briggs Thayer) female 38 1 0 PC 17599 71.283 C85 C 76 2 0 38
3 3 Heikkinen, Miss. Laina female 26 0 0 STON/O2. 3101282 7.925 B96 B98 S 78 0 0 78
4 1 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35 1 0 113803 53.100 C123 S 140 4 0 35
5 3 Allen, Mr. William Henry male 35 0 0 373450 8.050 B96 B98 S 175 0 0 105

Auf diese Weise werden neue Funktionen hinzugefügt.

RankedEvaluationMetricEncoding Nachdem jede Kategorie zu einer Dummy-Variablen gemacht wurde, wird mit jeder Kategoriespalte und Zielvariablen eine logistische Regression durchgeführt. Erstellen Sie ein Ranking mit der resultierenden Metrik (standardmäßig AUC) und codieren Sie die ursprüngliche Kategorie mit diesem Ranking. Da jeder Kategorie eine fünffache logistische Regression zugeordnet ist, ist der Rechenaufwand für Merkmale mit hoher Kardinalität im Voraus enorm Es wird empfohlen, die Kardinalität mithilfe der Kategorie "Hohe Kardinalität" oder "Seltene Gruppe" zu verringern.

process = make_pipeline(
    dl.ImputeNaN(),
    dl.RankedEvaluationMetricEncoding()
)
process.fit_transform(X, y)
PassengerId Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked
1 3 640 2 22 1 0 288 7.250 1 1
2 1 554 1 38 1 0 284 71.283 77 2
3 3 717 1 26 0 0 256 7.925 1 1
4 1 803 1 35 1 0 495 53.100 112 1
5 3 602 2 35 0 0 94 8.050 1 1

Sie können auch überprüfen, wie wichtig jede Kategorie in der kategorialen Variablen ist, indem Sie das Ranking ausgeben.

process['rankedevaluationmetricencoding'].dic_corr_['Embarked']
Category Rank Evaluation_Metric
S 1 0.5688
C 2 0.5678
Q 3 0.4729

AppendClassificationModel Der Klassifizierer wird basierend auf den Eingabedaten trainiert und das Vorhersageergebnis wird als neue Merkmalsgröße hinzugefügt. Das Modell kann ein beliebiges sklearn-kompatibles Modell sein. Auch wenn die prädiktive_proba-Methode implementiert ist Sie können anstelle einer Bezeichnung eine Punktzahl hinzufügen, indem Sie das Argument Wahrscheinlichkeit = True angeben. Da das Modell trainiert wird, sind grundsätzlich die Vervollständigung fehlender Werte und die Verarbeitung kategorialer Variablen erforderlich.

process = make_pipeline(
    dl.ImputeNaN(),
    dl.TargetMeanEncoding(),
    dl.AppendClassificationModel(model=RandomForestClassifier(n_estimators=300, max_depth=5),
                                 probability=False)
)
process.fit_transform(X, y)
PassengerId Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked Predicted_RandomForestClassifier
1 3 0.3838 0.1889 22 1 0 0.3838 7.250 0.3039 0.3390 0
2 1 0.3838 0.7420 38 1 0 0.3838 71.283 0.3838 0.5536 1
3 3 0.3838 0.7420 26 0 0 0.3838 7.925 0.3039 0.3390 1
4 1 0.3838 0.7420 35 1 0 0.4862 53.100 0.4862 0.3390 1
5 3 0.3838 0.1889 35 0 0 0.3838 8.050 0.3039 0.3390 0

Dies ist der Fall, wenn Wahrscheinlichkeit = Wahr. Eine Punktzahl für Klasse 1 wird vergeben.

PassengerId Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked Predicted_RandomForestClassifier
1 3 0.3838 0.1889 22 1 0 0.3838 7.250 0.3039 0.3390 0.1497
2 1 0.3838 0.7420 38 1 0 0.3838 71.283 0.3838 0.5536 0.8477
3 3 0.3838 0.7420 26 0 0 0.3838 7.925 0.3039 0.3390 0.5401
4 1 0.3838 0.7420 35 1 0 0.4862 53.100 0.4862 0.3390 0.8391
5 3 0.3838 0.1889 35 0 0 0.3838 8.050 0.3039 0.3390 0.1514

AppendEncoder Die verschiedenen im DataLiner enthaltenen Encoder ersetzen die Kategoriespalten direkt durch codierte Nummern. In einigen Fällen möchten Sie es jedoch möglicherweise als neue Feature-Menge verwenden, ohne es zu ersetzen. (TargetMeanEncoder usw.) In diesem Fall wird Encoder durch Umschließen in diese Klasse als Feature-Menge hinzugefügt.

process = make_pipeline(
    dl.ImputeNaN(),
    dl.AppendEncoder(encoder=dl.TargetMeanEncoding())
)
process.fit_transform(X, y)
PassengerId Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked Name_TargetMeanEncoding Sex_TargetMeanEncoding Ticket_TargetMeanEncoding Cabin_TargetMeanEncoding Embarked_TargetMeanEncoding
1 3 Braund, Mr. Owen Harris male 22 1 0 A/5 21171 7.250 B96 B98 S 0.3838 0.1889 0.3838 0.3039 0.3390
2 1 Cumings, Mrs. John Bradley (Florence Briggs Thayer) female 38 1 0 PC 17599 71.283 C85 C 0.3838 0.7420 0.3838 0.3838 0.5536
3 3 Heikkinen, Miss. Laina female 26 0 0 STON/O2. 3101282 7.925 B96 B98 S 0.3838 0.7420 0.3838 0.3039 0.3390
4 1 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35 1 0 113803 53.100 C123 S 0.3838 0.7420 0.4862 0.4862 0.3390
5 3 Allen, Mr. William Henry male 35 0 0 373450 8.050 B96 B98 S 0.3838 0.1889 0.3838 0.3039 0.3390

AppendClusterTargetMean Gruppieren Sie die Daten und weisen Sie eine Clusternummer zu. (Wie bisher Append Cluster) Ersetzen Sie dann jede Clusternummer durch den Durchschnitt der Zielvariablen im Cluster und fügen Sie sie als neue Funktion hinzu. Fehlende Wertvervollständigung und Verarbeitung kategorialer Variablen sind erforderlich.

process = make_pipeline(
    dl.ImputeNaN(),
    dl.TargetMeanEncoding(),
    dl.AppendClusterTargetMean()
)
process.fit_transform(X, y)
PassengerId Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked cluster_mean
1 3 0.3838 0.1889 22 1 0 0.3838 7.250 0.3039 0.3390 0.3586
2 1 0.3838 0.7420 38 1 0 0.3838 71.283 0.3838 0.5536 0.3586
3 3 0.3838 0.7420 26 0 0 0.3838 7.925 0.3039 0.3390 0.3586
4 1 0.3838 0.7420 35 1 0 0.4862 53.100 0.4862 0.3390 0.3586
5 3 0.3838 0.1889 35 0 0 0.3838 8.050 0.3039 0.3390 0.3586

PermutationImportanceTest Dies ist eine Art von Merkmalsauswahlmethode. Mit oder ohne zufälliges Mischen von Daten für eine bestimmte Funktion Die Merkmalsauswahl wird unter dem Gesichtspunkt durchgeführt, um wie viel sich der Bewertungsindex des Modellvorhersageergebnisses verschlechtert. Wenn das zufällige Mischen der Daten keine großen Auswirkungen auf die Metrik hat, löschen Sie die Funktion, da sie nicht funktioniert.

process = make_pipeline(
    dl.ImputeNaN(),
    dl.TargetMeanEncoding(),
    dl.PermutationImportanceTest()
)
process.fit_transform(X, y)
Pclass Sex Age SibSp Ticket Fare Cabin Embarked
3 0.1889 22 1 0.3838 7.250 0.3039 0.3390
1 0.7420 38 1 0.3838 71.283 0.3838 0.5536
3 0.7420 26 0 0.3838 7.925 0.3039 0.3390
1 0.7420 35 1 0.4862 53.100 0.4862 0.3390
3 0.1889 35 0 0.3838 8.050 0.3039 0.3390

Name, PassengerId und Parch wurden entfernt. Sie können die gelöschten Funktionen auch wie folgt überprüfen.

process['permutationimportancetest'].drop_columns_

['PassengerId', 'Name', 'Parch']

Sie können die Empfindlichkeit auch anpassen, indem Sie den Schwellenwert anpassen. Siehe Dokument für Details.

abschließend

Das Obige ist die neu hinzugefügte Vorverarbeitung. RankedEvaluationMetricEncoding ist manchmal genauer als TargetMeanEncoding, daher versuche ich es oft. Außerdem kann der Permutation Importance Test schneller ausgeführt werden als die Boruta- und Step-weise Methoden, sodass es keinen unerwarteten Unterschied gibt. Ich denke, dass es verwendet werden kann, wenn Sie die (?) Feature-Menge ernsthafter als DropLowAUC auswählen möchten.

Artikel veröffentlichen: [Aktualisiert Ver1.1.9] Ich habe eine Datenvorverarbeitungsbibliothek DataLiner für maschinelles Lernen erstellt

Die Vorverarbeitung vor 1.2 wird unten vorgestellt. Versuchen Sie, Titanic-Daten mit der Vorverarbeitungsbibliothek DataLiner (Drop) zu verarbeiten Versuchen Sie, Titanic-Daten mit der Vorverarbeitungsbibliothek DataLiner (Encoding) zu verarbeiten Versuchen Sie, Titanic-Daten mit der Vorverarbeitungsbibliothek DataLiner (Konvertierung) zu verarbeiten Versuchen Sie, Titanic-Daten mit der Vorverarbeitungsbibliothek DataLiner (Anhängen) zu verarbeiten

Recommended Posts

Seit der Veröffentlichung von DataLiner 1.2.0 werden wir die neu hinzugefügte Vorverarbeitung einführen.
In der Mitte der Entwicklung werden wir Alembic vorstellen
Chainer v1.21 wurde veröffentlicht