scikit-learn ist eine praktische Bibliothek für maschinelles Lernen für Python, die problemlos mit Numpy, Scipy und Matplotlib verwendet werden kann. scikit-learn wird viel einfacher zu verwenden, sobald Sie das API-Entwurfsmuster kennen.
Dieses Mal werde ich den Charme von Scikit-Learn anhand des Artikels des Autors von Scikit-Learn erläutern.
Die Scikit-Lernobjekte werden nach verschiedenen Mustern entworfen, um die API konsistent zu halten. ** Wenn Sie dieses Muster verstehen, können Sie jedes Objekt ohne Unannehmlichkeiten verwenden. ** ** **
Estimator scikit-learn basiert auf einer Schnittstelle namens Estimator. ** Der Schätzer trainiert ein Modell (Parameter) basierend auf den Daten. ** ** ** Es hat immer eine Methode namens "fit" und lernt, indem Daten an das Argument "fit" übergeben werden. Sie können auch die für das Training erforderlichen Hyperparameter festlegen (im Konstruktor oder in der Methode "set_params").
Eine Klasse namens "LogisticRegression", die eine logistische Regression durchführt, ist ebenfalls einer der Schätzer.
from sklearn.linear_model import LogisticRegession
clf = LogisticRegression(penalty="l1") #Hyper-Parametereinstellungen
clf.fit(X_train, y_train) #Lernen Sie das Modell anhand von Trainingsdaten
Predictor
Viele Schätzer führen auch Predictor-Schnittstellen ein.
** Predictor macht Vorhersagen (Outputs) basierend auf dem in fit
erlernten Modell. ** ** **
Das Übergeben von Daten als Argument an die "Vorhersage" -Methode gibt eine Vorhersage zurück.
Es gibt auch eine Methode namens "Score", mit der Sie das Modell bewerten können, indem Sie einen Datensatz und eine Beschriftung übergeben.
Beispielsweise ist "LogisticRegression" ein Prädiktor, sodass Sie die Methoden "Predict" und "Score" problemlos verwenden können.
clf.predict(X_test) #Vorhersage über Testdaten
clf.score(X_test, y_test) #Vergleichen Sie die Erwartungen und tatsächlichen Antworten zu Testdaten
Transformer Neben Predictor gibt es auch eine Klasse, die eine Schnittstelle namens Transformer einführt. Wie der Name schon sagt, kann ** Transformer Daten transformieren. ** ** ** Es wird in Datenverarbeitungs-APIs häufiger verwendet als in Modellen für maschinelles Lernen. Gibt die transformierten Daten mit einer Methode namens "transform" zurück. Mit der Methode "fit_transform" wird außerdem so gestaltet, dass Lernen und Transformation gleichzeitig durchgeführt werden können.
Das folgende Beispiel implementiert eine Transformation von "StandardScaler", die das Dataset standardisiert. Für "StandardScaler" lernen Sie den Mittelwert und die Varianz jeder Kurve und nicht ein komplexes Modell.
from sklearn.preprocessing import StandardScaler
scaler = StandScaler()
X_train = scaler.fit_transform(X_train) #Trainingsdaten lernen und transformieren
X_test = scaler.transform(X_test) #Verformung ohne Lerntestdaten (unter Verwendung des Durchschnitts / der Varianz der Trainingsdaten)
Außerdem können die Schnittstellen Predictor und Transformer gleichzeitig installiert werden.
Die von Ihnen eingestellten Hyperparameter und die gelernten Parameter werden im Objekt gespeichert. (Namen der gelernten Parameter enden mit einem Unterstrich) Informationen zum Zugriff auf Parameter und Hyperparameter finden Sie unter "Attribute" in der Dokumentation für jedes Objekt.
Beispiel: Ermitteln Sie den Mittelwert und die Varianz, die von StandardScaler
gelernt wurden
#Weiter von vorne
mean = scaler.mean_
variance = scaler.var_
Daher jeder Schätzer
Da alle Schätzer dieselbe Methode haben **, können Sie problemlos mehrere Schätzer kombinieren. ** ** ** Verwenden Sie "Pipeline" für die Parallelverarbeitung und "FeatureUnion" für die Parallelverarbeitung.
Wenn Sie beispielsweise Ihre Daten standardisieren und eine logistische Regression durchführen möchten, können Sie den Prozess mithilfe einer Pipeline sauber implementieren.
from sklearn.pipeline import Pipeline
pipe = Pipeline([
{'std_scaler', StandardScaler()},
{'log_reg', LogisticRegression()} #Verformte Daten des Transformators empfangen
])
pipe.fit(X_train, y_train)
pipe.score(X_test, y_test)
Mit scikit-learn können Sie Hyperparameter mithilfe von Klassen wie "GridSearchCV" und "RandomSearchCV" validieren. Diese führen auch die Estimator-Oberfläche ein und verwenden "fit" zum Lernen.
Beispiel: Verwenden Sie die Rastersuche, um die optimalen Hyperparameter für die logistische Regression zu finden
from sklearn.model_selection import GridSearchCV
clf = GridSearchCV(
estimator=LogisticRegression(),
param_grid={
'C' = [1, 3, 10, 30, 100]
}
)
clf.fit(X_train, y_train) # param_Trainieren Sie mehrere Modelle, indem Sie die Hyperparameter einzeln im Raster anwenden
best_clf = clf.best_estimator_ #Holen Sie sich den besten Schätzer!
Durch Erstellen einer Klasse mit in der Schnittstelle definierten Methoden, z. B. "fit", ** können Sie diese problemlos für Pipelines und Validierungen verwenden. ** ** ** Wenn Sie einen Schätzer erstellen, erben Sie "BaseEstimator", und wenn Sie einen Transformer usw. erstellen, erben Sie gleichzeitig das entsprechende "Mixin".
Transformator Beispiel:
from sklearn.base import BaseEstimator, TransformerMixin
class MyTransformer(BaseEstimator, TransformerMixin):
def __init__(self, param_1, param_2):
#Hyper-Parameter-Verarbeitung
self.param_1 = param_1
# ...
def fit(self, X, y=None):
#wird bearbeitet
return self
def transform(self, X, y=None):
#Numpy Matrix Verarbeitung
# X = ...
return X
# fit_Die Transformation wird automatisch von Transformer Mixin implementiert
transformer = MyTransformer()
X_transformed = transformer.fit_transform(X_train)
Obwohl scikit-learn Objekte bereitstellt, die verschiedene Methoden des maschinellen Lernens implementieren, können Sie sie alle verwenden, auch wenn Sie die Entwurfsmuster von Estimator, Predictor und Transformer verstehen, auch wenn Sie den Inhalt nicht verstehen. Die Scikit-Learn-API ist attraktiv, weil sie sehr konsistent ist und Sie problemlos mit maschinellem Lernen fortfahren können.
Recommended Posts