[PYTHON] Introduction de scikit-Optimize

Cet article est l'article du 17e jour du Calendrier de l'Avent de l'apprentissage automatique 2016.

Cette fois, je voudrais présenter une bibliothèque appelée scikit-Optimize qui peut estimer les paramètres qui minimisent la fonction de boîte noire.

Installation

L'environnement testé cette fois est le suivant.

L'installation est facile à partir de pip.

pip install scikit-optimize

Example

Démarrer dans README.md sur github est une fonction avec du bruit ajouté. Ce serait bien de connaître la fonction, mais en réalité, la fonction peut être inconnue. Si la fonction ne connaît pas la fonction mais peut évaluer le point de données x dans un tel cas, le x à minimiser peut être obtenu en utilisant une méthode appelée optimisation bayésienne.

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)])

Ce res a les variables suivantes.

fun = min(func_vals)

For Machine Learning

En parlant d'apprentissage automatique (en particulier d'apprentissage supervisé), le but est de construire un modèle à partir d'un ensemble de données et d'améliorer les performances de prédiction pour des données inconnues. À ce moment-là, l'apprentissage automatique évalue le modèle à l'aide du test croisé et de divers index d'évaluation. De plus, si vous souhaitez créer un modèle plus performant, le réglage des hyper paramètres est indispensable. Cette fois, je vais essayer de régler cet hyper paramètre en utilisant skopt.

Préparation

Déterminez le modèle de données et d'apprentissage automatique. Cette page a également un exemple, mais comme c'est un gros problème, je vais essayer un modèle légèrement différent.

procédure

  1. Préparez les données et le modèle.
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. Définissez une fonction de boîte noire.
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_Étant donné que minimiser ne peut être minimisé, il est nécessaire d'utiliser une valeur négative pour un index qui indique que plus les performances sont élevées, plus les performances sont élevées.
    return -np.mean(cross_val_score(model, X, y, cv=5, scoring='roc_auc'))
  1. Déterminez la plage de recherche (espace) du paramètre.
space  = [(1, 5), (10**-5, 10**-1, "log-uniform"), (1, n_features), (2, 30), (1, 30)]
  1. Déterminez la valeur initiale de la recherche.
x0 = [3, 0.01, 6, 2, 1]
  1. Utilisez gp_minimize pour estimer les hyperparamètres à minimiser.
res = gp_minimize(objective, space, x0=x0, n_calls=50)

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

De cette façon, nous avons pu trouver les hyper paramètres optimaux. Au fait, avec cet ensemble de données, le temps requis pour gp_minimize était de 17 [s].

Others

Le site officiel a quelques échantillons autres que ceux décrits ci-dessus.

Recommended Posts

Introduction de scikit-Optimize
Introduction de PyGMT
Introduction de Python
Introduction de trac (Windows + trac 1.0.10)
Introduction de ferenOS 1 (installation)
Introduction du wrapper Virtualenv
[Introduction à cx_Oracle] Présentation de cx_Oracle
introduction
Introduction d'activités appliquant Python
Introduction de caffe en utilisant pyenv
Introduction et astuces de mlflow.
Introduction et mise en œuvre de JoCoR-Loss (CVPR2020)
Introduction et mise en œuvre de la fonction d'activation
Introduction d'une méthode de conception de contrôleur pilotée par les données
Introduction de ferenOS 3 (mise à jour et installation du package)
Introduction du package de dessin python pygal
Enregistrement de l'introduction de Python pour les nouveaux arrivants
Une petite introduction de fonction de niche de faiss
kivy introduction
Théorie générale de la relativité en Python: Introduction
Introduction facile de la reconnaissance vocale avec Python
[EDA] Introduction de Sweetviz (comparaison avec + pandas-profiling)
Complétez tout avec Jupyter ~ Introduction de nbdev ~
Introduction facile de la série python3 et d'OpenCV3
Introduction à Scapy ① (De l'installation à l'exécution de Scapy)
[Introduction au Data Scientist] Bases de Python ♬
Introduction de l'environnement d'interface de ligne de commande SoftLayer
[Introduction à cx_Oracle] (16ème) Gestion des types LOB
Introduction d'une nouvelle bibliothèque d'extraction de fonctionnalités vocales Surfboard
[Introduction à Udemy Python3 + Application] 26. Copie du dictionnaire
[Introduction à Udemy Python3 + Application] 19. Copie de la liste
[Cx_Oracle Primer] (Partie 3) Bases de la navigation dans les tableaux
Mémo d'étude Python & Machine Learning ②: Introduction de la bibliothèque
Introduction de la bibliothèque d'imagerie Python (PIL) à l'aide de HomeBrew
Introduction de ferenOS 2 (paramètres après l'installation, paramètres d'entrée japonais)
Matériel de conférence Python de l'Université de Kyoto: Introduction des colonnes
[Français] scikit-learn 0.18 Introduction de l'apprentissage automatique par le didacticiel scikit-learn
[Introduction à cx_Oracle] (5e) Gestion des données japonaises
[Introduction à cx_Oracle] (Partie 7) Gestion des variables de liaison
De l'introduction de pyethapp à l'exécution du contrat
[Introduction à Python] Utilisation de base des expressions lambda