Bonjour.
Du coup, je me suis intéressé au machine learning et au deep learning, j'ai donc récemment participé au concours kaggle. kaggle a une fonction Notebook, donc j'étais enthousiaste à l'idée de comprendre le code!
"Je ne sais pas du tout ce que cela signifie"
Je n'avais aucune connaissance en programmation, alors quand j'ai regardé le code dans le cahier de Kaggle, cela ressemblait à un chiffrement (rires). Par conséquent, j'ai pensé que je comprendrais lentement chacun d'eux, alors j'aimerais l'écrire ici comme s'il s'agissait d'un journal.
Cette fois, il s'agit de "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
Pour le moment, j'ai accédé au site suivant. sklearn.pipeline.Pipeline — scikit-learn 0.23.2 documentation
Selon cela, la forme de base est
from sklearn.pipeline import Pipeline pipe = Pipeline ([(méthode de prétraitement), (méthode d'apprentissage)]) pipe.fit (variable explicative, variable objective)
Il semble que le code puisse être simplifié.
Sur cette base, j'ai formé les données d'iris dans une forêt aléatoire.
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
Sur la base de ce qui précède, nous avons standardisé les variables explicatives et nous nous entraînons dans une forêt aléatoire. En les rassemblant dans Pipeline de cette manière, le code devient "concis".
Ci-dessous le code de confirmation.
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() #Copie pour chèque
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
J'ai pu faire correspondre le calcul, donc je savais que le prétraitement de Pipeline fonctionnait correctement.
Je vois, j'ai en quelque sorte appris sur Pipeline. Mais même s'il existe de nombreux pré-processus, un seul peut-il être exécuté?
Apparemment, il semble que plusieurs processus puissent être combinés.
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')), #Processus de suppression des valeurs manquantes
('onehot', OneHotEncoder(handle_unknown='ignore'))]) #Un encodage à chaud
rf = Pipeline([
('preprocess', preprocessing),
('classifier', RFC())])
rf.fit(X_train, y_train)
de cette façon, Tube de formulaire de base = Pipeline ([(méthode de prétraitement), (méthode d'apprentissage)]) En ce qui concerne la (méthode de pré-traitement), il semble qu'une méthode consiste à chevaucher les pipelines sous la forme d'une image comme la notation BNF (ce n'est qu'une histoire d'image).
Recommended Posts