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.
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.
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
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'))
space = [(1, 5), (10**-5, 10**-1, "log-uniform"), (1, n_features), (2, 30), (1, 30)]
x0 = [3, 0.01, 6, 2, 1]
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