Hallo.
Plötzlich interessierte ich mich für maschinelles Lernen und tiefes Lernen, deshalb nahm ich kürzlich am Kaggle-Wettbewerb teil. kaggle hat eine Notebook-Funktion, daher war ich begeistert, den Code zu verstehen!
"Ich weiß überhaupt nicht, was das bedeutet"
Ich hatte überhaupt keine Programmierkenntnisse. Als ich mir den Code in Kaggles Notizbuch ansah, sah er aus wie eine Chiffre (lacht). Deshalb dachte ich, ich würde jeden langsam verstehen, also würde ich ihn gerne hier schreiben, als wäre es ein Tagebuch.
Diesmal geht es um "Pipeline".
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
iris_data = datasets.load_iris()
input_data = iris_data.data
correct = iris_data.target
Vorerst habe ich auf die folgende Seite zugegriffen. sklearn.pipeline.Pipeline — scikit-learn 0.23.2 documentation
Demnach ist die Grundform
from sklearn.pipeline import Pipeline Pipe = Pipeline ([(Vorbehandlungsmethode), (Lernmethode)]) pipe.fit (erklärende Variable, Zielvariable)
Es scheint, dass der Code vereinfacht werden kann.
Auf dieser Grundlage habe ich Irisdaten in einem zufälligen Wald trainiert.
from sklearn.ensemble import RandomForestClassifier as RFC
X_train, X_test, y_train, y_test = train_test_split(input_data, correct)
pipe = Pipeline([('scaler', StandardScaler()),
('RandomForestClassifier', RFC())])
pipe.fit(X_train, y_train)
pipe.score(X_test, y_test)
# 0.9473684210526315
Basierend auf dem oben Gesagten haben wir die erklärenden Variablen standardisiert und trainieren in einem zufälligen Wald. Wenn Sie sie auf diese Weise in Pipeline zusammenstellen, wird der Code "prägnant".
Unten finden Sie den Code zur Bestätigung.
X_train, X_test, y_train, y_test = train_test_split(input_data, correct)
tr_x, te_x, tr_y, te_y = X_train.copy(), X_test.copy(), y_train.copy(), y_test.copy() #Zur Überprüfung kopieren
pipe = Pipeline([('scaler', StandardScaler()),
('Classifier', RFC())])
pipe.fit(X_train, y_train)
print("pipe score = " + str(pipe.score(X_test, y_test)))
from sklearn.preprocessing import StandardScaler
stdsc = StandardScaler()
tr_x = stdsc.fit(tr_x).transform(tr_x)
te_x = stdsc.fit(te_x).transform(te_x)
clf = RFC()
clf.fit(tr_x, tr_y)
print("RFC score = ", clf.score(te_x, te_y))
# pipe score = 0.9473684210526315
# RFC score = 0.9473684210526315
Ich konnte die Berechnung anpassen, sodass ich wusste, dass die Vorverarbeitung von Pipeline korrekt funktionierte.
Ich verstehe, ich habe irgendwie etwas über Pipeline gelernt. Aber selbst wenn es viele Vorprozesse gibt, kann nur einer ausgeführt werden?
Anscheinend können mehrere Prozesse kombiniert werden.
from sklearn.pipeline import Pipeline
from sklearn.ensemble import RandomForestClassifier as RFC
from sklearn.preprocessing import OneHotEncoder
from sklearn.impute import SimpleImputer
preprocessing = Pipeline([
('imputer', SimpleImputer(strategy='constant', fill_value='missing')), #Prozess zum Entfernen fehlender Werte
('onehot', OneHotEncoder(handle_unknown='ignore'))]) #Eine heiße Codierung
rf = Pipeline([
('preprocess', preprocessing),
('classifier', RFC())])
rf.fit(X_train, y_train)
auf diese Weise, Grundform Pipe = Pipeline ([(Vorbehandlungsmethode), (Lernmethode)]) Was die (Vorverarbeitungsmethode) betrifft, so scheint es, dass eine Methode darin besteht, Pipelines als Bild wie die BNF-Notation zu überlappen (es ist nur eine Bildgeschichte).
Recommended Posts