[PYTHON] Einführung von Scikit-Optimize

Dieser Artikel ist der Artikel zum 17. Tag des Adventskalenders für maschinelles Lernen 2016.

Dieses Mal möchte ich eine Bibliothek namens scicit-optimize vorstellen, die die Parameter schätzen kann, die die Black-Box-Funktion minimieren.

Installation

Die diesmal getestete Umgebung ist wie folgt.

Die Installation ist einfach von pip.

pip install scikit-optimize

Example

Erste Schritte in README.md auf Github ist eine Funktion, bei der Rauschen hinzugefügt wird. Es wäre schön, die Funktion zu kennen, aber in Wirklichkeit kann die Funktion unbekannt sein. Wenn die Funktion die Funktion nicht kennt, aber in einem solchen Fall den Datenpunkt x auswerten kann, kann das zu minimierende x unter Verwendung einer als Bayes'sche Optimierung bezeichneten Methode erhalten werden.

import numpy as np
from skopt import gp_minimize

def f(x):
    return (np.sin(5 * x[0]) * (1 - np.tanh(x[0] ** 2)) * np.random.randn() * 0.1)

res = gp_minimize(f, [(-2.0, 2.0)])

Dieses Res hat die folgenden Variablen.

fun = min(func_vals)

For Machine Learning

In Bezug auf maschinelles Lernen (insbesondere überwachtes Lernen) besteht der Zweck darin, ein Modell aus einem Datensatz zu erstellen und die Vorhersageleistung für unbekannte Daten zu verbessern. Zu diesem Zeitpunkt bewertet maschinelles Lernen das Modell anhand des Kreuztests und verschiedener Bewertungsindizes. Wenn Sie ein Modell mit höherer Leistung erstellen möchten, ist die Optimierung von Hyperparametern unabdingbar. Dieses Mal werde ich versuchen, diesen Hyperparameter mit skopt abzustimmen.

Vorbereitung

Bestimmen Sie das Modell für Daten und maschinelles Lernen. Diese Seite hat auch ein Beispiel, aber da es eine große Sache ist, werde ich ein etwas anderes Modell ausprobieren.

Verfahren

  1. Bereiten Sie die Daten und das Modell vor.
from sklearn.datasets import load_breast_cancer
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.model_selection import cross_val_score

data = load_breast_cancer()
X, y = data.data, data.target
n_features = len(X)
model = GradientBoostingClassifier
  1. Definieren Sie eine Blackbox-Funktion.
def objective(params):
    max_depth, lr, max_features, min_samples_split, min_samples_leaf = params
    
    model.set_params(max_depth=max_depth,
                     max_features=max_features,
                     learning_rate=lr,
                     min_samples_split=min_samples_split,
                     min_samples_leaf=min_samples_leaf)
    
    # gp_Da Minimieren nur minimieren kann, muss für einen Index ein negativer Wert verwendet werden, der angibt, dass die Leistung umso höher ist, je höher die Leistung ist.
    return -np.mean(cross_val_score(model, X, y, cv=5, scoring='roc_auc'))
  1. Bestimmen Sie den Suchbereich (Leerzeichen) des Parameters.
space  = [(1, 5), (10**-5, 10**-1, "log-uniform"), (1, n_features), (2, 30), (1, 30)]
  1. Bestimmen Sie den Anfangswert der Suche.
x0 = [3, 0.01, 6, 2, 1]
  1. Verwenden Sie gp_minimize, um die zu minimierenden Hyperparameter zu schätzen.
res = gp_minimize(objective, space, x0=x0, n_calls=50)

print(res.fun) # -0.993707074488
print(res.x)   # [5, 0.096319962593215167, 1, 30, 22]

Auf diese Weise konnten wir die optimalen Hyperparameter finden. Bei diesem Datensatz betrug die für gp_minimize erforderliche Zeit übrigens 17 [s].

Others

Die offizielle Website enthält einige andere als die oben beschriebenen Beispiele.

Recommended Posts

Einführung von Scikit-Optimize
Einführung von PyGMT
Einführung von Python
Einführung von trac (Windows + trac 1.0.10)
Einführung von ferenOS 1 (Installation)
Einführung des Virtualenv-Wrappers
[Einführung in cx_Oracle] Übersicht über cx_Oracle
Einführung
Einführung in Aktivitäten mit Python
Einführung von Kaffee mit Pyenv
Einführung und Tipps von mlflow.Tracking
Einführung und Implementierung von JoCoR-Loss (CVPR2020)
Einführung und Implementierung der Aktivierungsfunktion
Einführung einer datengesteuerten Controller-Entwurfsmethode
Einführung von pipenv (auch anforderungs.txt erstellen)
Einführung von ferenOS 3 (Paketaktualisierung und Installation)
Einführung des Python-Zeichenpakets Pygal
Aufzeichnung der Python-Einführung für Neulinge
Eine kleine Nischenfunktion Einführung von Faiss
Kivy Einführung
Allgemeine Relativitätstheorie in Python: Einführung
Einfache Einführung der Spracherkennung mit Python
[EDA] Einführung von Sweetviz (Vergleich mit + Pandas-Profiling)
Vervollständige alles mit Jupyter ~ Einführung von nbdev ~
Einfache Einführung in die Python3-Serie und OpenCV3
Einführung in Scapy ① (Von der Installation bis zur Ausführung von Scapy)
[Einführung in Data Scientist] Grundlagen von Python ♬
Einführung der SoftLayer-Befehlszeilenschnittstellenumgebung
[Einführung in cx_Oracle] (16.) Umgang mit LOB-Typen
Einführung der neuen Sprachfeaturextraktionsbibliothek Surfboard
[Einführung in die Udemy Python3 + -Anwendung] 26. Kopie des Wörterbuchs
[Einführung in die Udemy Python3 + -Anwendung] 19. Kopie der Liste
[Cx_Oracle Primer] (Teil 3) Grundlagen zum Durchsuchen von Tabellen
Python & Machine Learning Study Memo Introduction: Einführung in die Bibliothek
Einführung der Python Imaging Library (PIL) mit HomeBrew
Einführung von ferenOS 2 (Einstellungen nach der Installation, japanische Eingabeeinstellungen)
Python-Vorlesungsmaterial der Universität Kyoto: Einführung in Spalten
[Übersetzung] scikit-learn 0.18 Einführung in maschinelles Lernen durch Tutorial scikit-learn
[Einführung in cx_Oracle] (5.) Umgang mit japanischen Daten
[Einführung in cx_Oracle] (Teil 7) Umgang mit Bindevariablen
Von der Einführung von Pyethapp bis zur Vertragsabwicklung
[Einführung in Python] Grundlegende Verwendung von Lambda-Ausdrücken