[PYTHON] [Übersetzung] scikit-learn 0.18 Benutzerhandbuch 3.2. Optimieren der Hyperparameter des Schätzers

google übersetzte http://scikit-learn.org/0.18/modules/grid_search.html [scikit-learn 0.18 Benutzerhandbuch 3. Modellauswahl und -bewertung](http://qiita.com/nazoking@github/items/267f2371757516f8c168#3-%E3%83%A2%E3%83%87%E3%83] Von% AB% E3% 81% AE% E9% 81% B8% E6% 8A% 9E% E3% 81% A8% E8% A9% 95% E4% BE% A1)


3.2. Optimieren der Schätzer-Hyperparameter

Hyperparameter sind Parameter im Schätzer, die nicht direkt trainiert werden. In scikit-learn werden sie als Argumente an den Konstruktor der Schätzerklasse übergeben. Typische Beispiele sind die Unterstützungsvektorklassifizierer "C", "Kernel", "Gamma" und LASSO "Alpha". Es ist möglich und empfohlen, den Hyperparameterbereich mit einer Bewertung von Optimal Cross Validation: Estimator Performance (http://qiita.com/nazoking@github/items/13b167283590f512d99a) zu durchsuchen. Alle Parameter, aus denen der Schätzer besteht, können auf diese Weise optimiert werden. Um die Namen und aktuellen Werte aller Parameter eines bestimmten Schätzers zu ermitteln:

estimator.get_params()

Die Suche sieht folgendermaßen aus:

--Estimator (unabhängige Variable oder Klassifikator wie sklearn.svm.SVC ())

Einige Modelle ermöglichen die unten beschriebenen speziellen und effizienten Strategien zum Abrufen von Parametern. GridSearchCV kombiniert alle Parameter für den angegebenen Wert gründlich. RandomizedSearchCV wird aus dem Parameterbereich mit der angegebenen Verteilung angegeben. Sie können die Anzahl der Kandidaten abtasten. Nach der Erläuterung dieser Tools werden die Best Practices beschrieben, die auf beide Ansätze angewendet werden können. Eine kleine Teilmenge dieser Parameter kann einen erheblichen Einfluss auf die Vorhersage- oder Rechenleistung des Modells haben, und es ist üblich, dass andere Parameter auf ihren Standardwerten belassen werden. Es ist wahrscheinlich eine gute Idee, die der Literatur beigefügten Referenzen zu lesen und die Dokumentation der Schätzerklasse zu lesen, um ein besseres Verständnis des erwarteten Verhaltens zu erhalten.

3.2.1 Vollständige Rastersuche

Die von GridSearchCV bereitgestellte Rastersuche generiert gründlich Kandidaten aus dem Raster von Parameterwerten, die durch den Parameter param_grid angegeben werden. Zum Beispiel das folgende param_grid:

param_grid = [
  {'C': [1, 10, 100, 1000], 'kernel': ['linear']},
  {'C': [1, 10, 100, 1000], 'gamma': [0.001, 0.0001], 'kernel': ['rbf']},
 ]

C-Wert des linearen Kernels und [1, 10, 100, 1000], zwei Gitter mit RBF-Kernel und äußeres Produkt des C-Werts mit [1, 10, 100, 1000], "Gamma" -Wert [0,001, 0,0001] Gibt es. Die GridSearchCV-Instanz implementiert die reguläre Schätzer-API. Wenn Sie in einen Datensatz "passen", werden alle möglichen Kombinationen von Parameterwerten ausgewertet und die beste Kombination bleibt erhalten.

--Beispiel: --Für ein Berechnungsbeispiel für die Rastersuche nach Ziffern-Datensatz [Parameterschätzung mithilfe der Rastersuche mit gegenseitiger Überprüfung](http://scikit-learn.org/0.18/auto_examples/model_selection/grid_search_digits.html#sphx-glr- Siehe Auto-Beispiele-Modellauswahl-Raster-Suchziffern-py).

3.2.2 Randomisierte Parameteroptimierung

Die Verwendung eines Rasters von Parametereinstellungen ist derzeit die am weitesten verbreitete Methode zur Parameteroptimierung, andere Suchmethoden weisen jedoch günstigere Eigenschaften auf. RandomizedSearchCV implementiert eine zufällige Suche für jeden Parameter. Jede Einstellung wird aus einer Verteilung auf mögliche Parameterwerte abgetastet. Dies hat zwei Hauptvorteile gegenüber einer umfassenden Suche.

Verwenden Sie ein Wörterbuch, um anzugeben, wie Parameter abgetastet werden. Dies ist der Angabe der GridSearchCV-Parameter sehr ähnlich. Zusätzlich wird das berechnete Budget, dh die Anzahl der abgetasteten Stichproben oder die Anzahl der Stichprobeniterationen, unter Verwendung des Parameters "n_iter" angegeben. Für jeden Parameter können Sie eine Verteilung für mögliche Werte oder eine Liste diskreter Auswahlmöglichkeiten (einheitlich abgetastet) angeben.

{'C': scipy.stats.expon(scale=100), 'gamma': scipy.stats.expon(scale=.1),
  'kernel': ['rbf'], 'class_weight':['balanced', None]}

In diesem Beispiel wird das Modul "scipy.stats" verwendet, das viele Verteilungen enthält, die bei Stichprobenparametern wie "Expon", "Gamma", "Uniform" oder "Randint" hilfreich sind. In der Regel können Sie eine Funktion übergeben, die eine "rvs" -Methode (Random Variate Sample) zum Abtasten des Werts bereitstellt. Aufrufe der Funktion rvs sollten eine Zufallsstichprobe liefern, die unabhängig von den Parameterwerten ist, die bei kontinuierlichen Aufrufen möglich sind.

** Warnung ** In scipy.stats vor scipy 0.16 können Sie keinen zufälligen Status angeben. Verwenden Sie stattdessen einen globalen numpy-Zufallsstatus, der über np.random.seed gesetzt oder mit np.random.set_state festgelegt werden kann. Wenn jedoch scikit-learn 0.18 gestartet wird, kann das Modul scley.model_selection auch scipy> = 0.16 verwenden Wenn, legt einen vom Benutzer bereitgestellten Zufallsstatus fest.

Für kontinuierliche Parameter wie "C" oben ist es wichtig, eine kontinuierliche Verteilung anzugeben, um die Randomisierung voll auszunutzen. Auf diese Weise führt das Erhöhen von "n_iter" immer zu einer feineren Suche.

--Beispiel:

3.2.3 Tipps zur Parametersuche

3.2.3.1 Festlegen objektiver Metriken

Standardmäßig verwendet die Parametersuche die Score-Funktion des Schätzers, um die Parametereinstellungen auszuwerten. Dies sind [sklearn.metrics.accuracy_score] zur Klassifizierung (http://scikit-learn.org/0.18/modules/generated/sklearn.metrics.accuracy_score.html#sklearn.metrics.accuracy_score) und zur Regression. Es gibt sklearn.metrics.r2_score. Andere Bewertungsmerkmale sind für einige Anwendungen besser geeignet (z. B. sind Genauigkeitsbewertungen für unverhältnismäßige Klassifizierungen oft nicht hilfreich). Sie können verschiedene Bewertungsfunktionen mithilfe von GridSearchCV, RandomizedSearchCV und dem Parameter "Bewertung" des unten beschriebenen speziellen Kreuzvalidierungswerkzeugs angeben. Weitere Informationen finden Sie unter Bewertungsparameter: Definieren von Modellbewertungsregeln (http://qiita.com/nazoking@github/items/958426da6448d74279c7#331-%E5%BE%97%E7%82%B9%E3%) 83% 91% E3% 83% A9% E3% 83% A1% E3% 83% BC% E3% 82% BF% E3% 83% A2% E3% 83% 87% E3% 83% AB% E8% A9% Siehe 95% E4% BE% A1% E3% 83% AB% E3% 83% BC% E3% 83% AB% E3% 81% AE% E5% AE% 9A% E7% BE% A9).

3.2.3.2 Synthetischer Schätzer und Parameterraum

[Pipeline: Kettenschätzung](http://qiita.com/nazoking@github/items/fdfd207b3127d6d026e0#411-%E3%83%91%E3%82%A4%E3%83%97%E3%83%A9 % E3% 82% A4% E3% 83% B3% E9% 80% A3% E9% 8E% 96% E6% 8E% A8% E5% AE% 9A) ist eine synthetische Schätzung, mit der Sie den Parameterraum mit diesen Werkzeugen durchsuchen können. Erklärt, wie man ein Schiff baut.

3.2.3.3 Modellauswahl: Entwicklung und Bewertung

Die Modellauswahl durch Auswertung verschiedener Parametereinstellungen kann als eine Möglichkeit angesehen werden, beschriftete Daten zu verwenden, um die Parameter des Gitters zu "trainieren". Bei der Bewertung des resultierenden Modells ist es wichtig, Stichproben zu bewerten, die während des Rastersuchprozesses nicht verwendet wurden. Wir empfehlen, die Daten in ** Entwicklungssätze ** (für GridSearchCV-Instanzen bereitgestellt) und ** Bewertungssätze ** aufzuteilen, um Leistungsmetriken zu berechnen. Dies kann mit der Dienstprogrammfunktion train_test_split erfolgen.

3.2.3.4. Parallel

GridSearchCV und RandomizedSearchCV werten jede Parametereinstellung einzeln aus. Wenn Ihr Betriebssystem dies unterstützt, können Sie das Schlüsselwort n_jobs = -1 verwenden, um Berechnungen parallel durchzuführen. Weitere Informationen finden Sie unter Funktionssignaturen.

3.2.3.5 Robustheit gegenüber Behinderungen

Einige Parametereinstellungen können einen Fehler in "fit" verursachen. Standardmäßig schlägt die gesamte Suche fehl, auch wenn die anderen Parametereinstellungen vollständig ausgewertet werden können. Wenn Sie "error_score = 0" (oder = np.NaN) einstellen, wird eine Warnung ausgegeben, und die Punktzahl zu diesem Zeitpunkt wird auf 0 (oder NaN) gesetzt, die Suche wird jedoch abgeschlossen.

3.2.4. Alternative zur Brute-Force-Parametersuche

3.2.4.1. Modellspezifische gegenseitige Validierung

In einigen Modellen können Daten in einem Wertebereich für einen Parameter genauso effizient an einen einzelnen Wert für diesen Parameter angepasst werden wie für die Anpassung eines Schätzers. Sie können diese Funktion nutzen, um eine effizientere Kreuzvalidierung durchzuführen, die für die Modellauswahl für diesen Parameter verwendet wird. Der häufigste Parameter, der dieser Strategie folgt, ist der Parameter, der die Stärke des Regularisierers codiert. In diesem Fall soll der ** Normalisierungspfad ** des Schätzers berechnet werden. Eine Liste solcher Modelle finden Sie hier:

3.2.4.2. Informationsstandards

Einige Modelle können eine informationstheoretische geschlossene Form optimaler Schätzungen von Regularisierungsparametern liefern (und nicht einige, wenn Kreuztests verwendet werden). Nachfolgend finden Sie eine Liste der Modelle, die für die automatische Modellauswahl vom Aikike Information Criterion (AIC) oder Bayesian Information Criterion (BIC) profitiert haben.

3.2.4.3. Taschenschätzung

Bei Verwendung des auf Absacken basierenden Ensemble-Verfahrens, d. H. Bei der Erzeugung eines neuen Trainingssatzes unter Verwendung von Stichproben mit Substitution, bleibt ein Teil des Trainingssatzes unbenutzt. Für jeden Klassifikator im Ensemble werden verschiedene Teile des Trainingssatzes ausgeschlossen. Dieser verbleibende Teil kann verwendet werden, um Generalisierungsfehler zu schätzen, ohne sich auf einen separaten Satz von Validierungen zu verlassen. Diese Schätzung ist "kostenlos", da sie keine zusätzlichen Daten erfordert und für die Modellauswahl verwendet werden kann. Es ist derzeit in der folgenden Klasse implementiert:


[scikit-learn 0.18 Benutzerhandbuch 3. Modellauswahl und -bewertung](http://qiita.com/nazoking@github/items/267f2371757516f8c168#3-%E3%83%A2%E3%83%87%E3%83] Von% AB% E3% 81% AE% E9% 81% B8% E6% 8A% 9E% E3% 81% A8% E8% A9% 95% E4% BE% A1)

© 2010 - 2016, Entwickler von Scikit-Learn (BSD-Lizenz).

Recommended Posts

[Übersetzung] scikit-learn 0.18 Benutzerhandbuch 3.2. Optimieren der Hyperparameter des Schätzers
[Übersetzung] scikit-learn 0.18 Benutzerhandbuch 3.1. Kreuzvalidierung: Bewerten Sie die Leistung des Schätzers
[Übersetzung] scikit-learn 0.18 Benutzerhandbuch Inhaltsverzeichnis
[Übersetzung] scikit-learn 0.18 Benutzerhandbuch 3.3. Modellbewertung: Quantifizieren Sie die Qualität der Vorhersage
[Übersetzung] scikit-learn 0.18 Benutzerhandbuch 4.8. Konvertieren Sie das Vorhersageziel (y)
[Übersetzung] scikit-learn 0.18 Benutzerhandbuch 2.7. Erkennung von Neuheiten und Ausreißern
[Übersetzung] scikit-learn 0.18 Benutzerhandbuch 4.5. Zufällige Projektion
[Übersetzung] scikit-learn 0.18 Benutzerhandbuch 1.11. Ensemble-Methode
[Übersetzung] scikit-learn 0.18 Benutzerhandbuch 1.15. Isotonische Regression
[Übersetzung] scikit-learn 0.18 Benutzerhandbuch 4.2 Merkmalsextraktion
[Übersetzung] scikit-learn 0.18 Benutzerhandbuch 1.16. Wahrscheinlichkeitskalibrierung
[Übersetzung] scikit-learn 0.18 Benutzerhandbuch 1.13 Funktionsauswahl
[Übersetzung] scikit-learn 0.18 Benutzerhandbuch 3.4. Modellpersistenz
[Übersetzung] scikit-learn 0.18 Benutzerhandbuch 2.8. Dichteschätzung
[Übersetzung] scikit-learn 0.18 Benutzerhandbuch 4.3. Datenvorverarbeitung
[Übersetzung] scikit-learn 0.18 Benutzerhandbuch 4.4. Unüberwachte Dimensionsreduzierung
[Übersetzung] scikit-learn 0.18 Benutzerhandbuch 1.4. Support Vector Machine
[Übersetzung] scikit-learn 0.18 Benutzerhandbuch 4.1. Pipeline- und Feature-Union: Kombination von Schätzern
[Übersetzung] scikit-learn 0.18 Benutzerhandbuch 3.5. Verifizierungskurve: Zeichnen Sie die Punktzahl, um das Modell zu bewerten
[Übersetzung] scikit-learn 0.18 Benutzerhandbuch 2.5. Zerlegen von Signalen in Komponenten (Matrixzerlegungsproblem)
[Übersetzung] scikit-learn 0.18 Benutzerhandbuch 1.12. Mehrklassenalgorithmus und Mehrfachetikettenalgorithmus
Rastersuche von Hyperparametern mit Scikit-learn
Japanische Übersetzung des e2fsprogs-Handbuchs
[Übersetzung] scikit-learn 0.18 Tutorial Inhaltsverzeichnis
Japanische Übersetzung des man-db Handbuchs
Japanische Übersetzung des Util-Linux-Handbuchs
Japanische Übersetzung des iproute2-Handbuchs
Pandas Benutzerhandbuch "Zusammenführen und Verbinden und Verketten" (offizielles Dokument Japanische Übersetzung)
Lassen Sie uns die Hyperparameter des Modells mit scikit-learn abstimmen!
[Übersetzung] scicit-learn 0.18 Tutorial Auswahl des richtigen Modells
Japanische Übersetzung: PEP 20 - Das Zen von Python
Über die Verarbeitungsgeschwindigkeit von SVM (SVC) von Scikit-Learn
Prognostizieren Sie die zweite Runde des Sommers 2016 mit scikit-learn
[Übersetzung] scikit-learn 0.18 Einführung in maschinelles Lernen durch Tutorial scikit-learn
[Übersetzung] scikit-learn 0.18 Tutorial Statistisches Lernen Tutorial für die wissenschaftliche Datenverarbeitung Unbeaufsichtigtes Lernen: Suche nach Datendarstellung