[PYTHON] Recherche en grille d'hyper paramètres avec Scikit-learn

J'oublierai comment l'utiliser, alors prenez note. Une version légèrement modifiée de Sample du document Scikit-learn et ses résultats d'exécution.

Code source:

grid_search.py


# -*- coding: utf-8 -*-

from sklearn import datasets
from sklearn.cross_validation import train_test_split
from sklearn.grid_search import GridSearchCV
from sklearn.metrics import classification_report, confusion_matrix
from sklearn.svm import SVC

##Lire les données
digits = datasets.load_digits()
X = digits.data
y = digits.target

##Divisé en données d'entraînement et données de test.
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.5, random_state=0)

##Paramètres de réglage
tuned_parameters = [{'kernel': ['rbf'], 'gamma': [1e-3, 1e-4],
                     'C': [1, 10, 100, 1000]},
                    {'kernel': ['linear'], 'C': [1, 10, 100, 1000]}]

scores = ['accuracy', 'precision', 'recall']

for score in scores:
    print '\n' + '='*50
    print score
    print '='*50

    clf = GridSearchCV(SVC(C=1), tuned_parameters, cv=5, scoring=score, n_jobs=-1)
    clf.fit(X_train, y_train)

    print "\n+Meilleurs paramètres:\n"
    print clf.best_estimator_

    print"\n+Score moyen lorsque CV avec données d'entraînement:\n"
    for params, mean_score, all_scores in clf.grid_scores_:
        print "{:.3f} (+/- {:.3f}) for {}".format(mean_score, all_scores.std() / 2, params)

    print "\n+Résultat d'identification dans les données de test:\n"
    y_true, y_pred = y_test, clf.predict(X_test)
    print classification_report(y_true, y_pred)

résultat:

==================================================
accuracy
==================================================

+Meilleurs paramètres:

SVC(C=10, cache_size=200, class_weight=None, coef0=0.0, degree=3, gamma=0.001,
  kernel=rbf, max_iter=-1, probability=False, random_state=None,
  shrinking=True, tol=0.001, verbose=False)

+Score moyen lorsque CV avec données d'entraînement:

0.982 (+/- 0.002) for {'kernel': 'rbf', 'C': 1, 'gamma': 0.001}
0.954 (+/- 0.006) for {'kernel': 'rbf', 'C': 1, 'gamma': 0.0001}
0.986 (+/- 0.002) for {'kernel': 'rbf', 'C': 10, 'gamma': 0.001}
0.981 (+/- 0.003) for {'kernel': 'rbf', 'C': 10, 'gamma': 0.0001}
0.986 (+/- 0.002) for {'kernel': 'rbf', 'C': 100, 'gamma': 0.001}
0.983 (+/- 0.005) for {'kernel': 'rbf', 'C': 100, 'gamma': 0.0001}
0.986 (+/- 0.002) for {'kernel': 'rbf', 'C': 1000, 'gamma': 0.001}
0.983 (+/- 0.005) for {'kernel': 'rbf', 'C': 1000, 'gamma': 0.0001}
0.971 (+/- 0.006) for {'kernel': 'linear', 'C': 1}
0.971 (+/- 0.006) for {'kernel': 'linear', 'C': 10}
0.971 (+/- 0.006) for {'kernel': 'linear', 'C': 100}
0.971 (+/- 0.006) for {'kernel': 'linear', 'C': 1000}

+Résultat d'identification dans les données de test:

             precision    recall  f1-score   support

          0       1.00      1.00      1.00        89
          1       0.97      1.00      0.98        90
          2       0.99      0.98      0.98        92
          3       1.00      0.99      0.99        93
          4       1.00      1.00      1.00        76
          5       0.99      0.98      0.99       108
          6       0.99      1.00      0.99        89
          7       0.99      1.00      0.99        78
          8       1.00      0.98      0.99        92
          9       0.99      0.99      0.99        92

avg / total       0.99      0.99      0.99       899


==================================================
precision
==================================================

+Meilleurs paramètres:

SVC(C=10, cache_size=200, class_weight=None, coef0=0.0, degree=3, gamma=0.001,
  kernel=rbf, max_iter=-1, probability=False, random_state=None,
  shrinking=True, tol=0.001, verbose=False)

+Score moyen lorsque CV avec données d'entraînement:

0.983 (+/- 0.002) for {'kernel': 'rbf', 'C': 1, 'gamma': 0.001}
0.959 (+/- 0.006) for {'kernel': 'rbf', 'C': 1, 'gamma': 0.0001}
0.986 (+/- 0.002) for {'kernel': 'rbf', 'C': 10, 'gamma': 0.001}
0.982 (+/- 0.003) for {'kernel': 'rbf', 'C': 10, 'gamma': 0.0001}
0.986 (+/- 0.002) for {'kernel': 'rbf', 'C': 100, 'gamma': 0.001}
0.985 (+/- 0.004) for {'kernel': 'rbf', 'C': 100, 'gamma': 0.0001}
0.986 (+/- 0.002) for {'kernel': 'rbf', 'C': 1000, 'gamma': 0.001}
0.985 (+/- 0.004) for {'kernel': 'rbf', 'C': 1000, 'gamma': 0.0001}
0.973 (+/- 0.005) for {'kernel': 'linear', 'C': 1}
0.973 (+/- 0.005) for {'kernel': 'linear', 'C': 10}
0.973 (+/- 0.005) for {'kernel': 'linear', 'C': 100}
0.973 (+/- 0.005) for {'kernel': 'linear', 'C': 1000}

+Résultat d'identification dans les données de test:

             precision    recall  f1-score   support

          0       1.00      1.00      1.00        89
          1       0.97      1.00      0.98        90
          2       0.99      0.98      0.98        92
          3       1.00      0.99      0.99        93
          4       1.00      1.00      1.00        76
          5       0.99      0.98      0.99       108
          6       0.99      1.00      0.99        89
          7       0.99      1.00      0.99        78
          8       1.00      0.98      0.99        92
          9       0.99      0.99      0.99        92

avg / total       0.99      0.99      0.99       899


==================================================
recall
==================================================

+Meilleurs paramètres:

SVC(C=10, cache_size=200, class_weight=None, coef0=0.0, degree=3, gamma=0.001,
  kernel=rbf, max_iter=-1, probability=False, random_state=None,
  shrinking=True, tol=0.001, verbose=False)

+Score moyen lorsque CV avec données d'entraînement:

0.982 (+/- 0.002) for {'kernel': 'rbf', 'C': 1, 'gamma': 0.001}
0.954 (+/- 0.006) for {'kernel': 'rbf', 'C': 1, 'gamma': 0.0001}
0.986 (+/- 0.002) for {'kernel': 'rbf', 'C': 10, 'gamma': 0.001}
0.981 (+/- 0.003) for {'kernel': 'rbf', 'C': 10, 'gamma': 0.0001}
0.986 (+/- 0.002) for {'kernel': 'rbf', 'C': 100, 'gamma': 0.001}
0.983 (+/- 0.005) for {'kernel': 'rbf', 'C': 100, 'gamma': 0.0001}
0.986 (+/- 0.002) for {'kernel': 'rbf', 'C': 1000, 'gamma': 0.001}
0.983 (+/- 0.005) for {'kernel': 'rbf', 'C': 1000, 'gamma': 0.0001}
0.971 (+/- 0.006) for {'kernel': 'linear', 'C': 1}
0.971 (+/- 0.006) for {'kernel': 'linear', 'C': 10}
0.971 (+/- 0.006) for {'kernel': 'linear', 'C': 100}
0.971 (+/- 0.006) for {'kernel': 'linear', 'C': 1000}

+Résultat d'identification dans les données de test:

             precision    recall  f1-score   support

          0       1.00      1.00      1.00        89
          1       0.97      1.00      0.98        90
          2       0.99      0.98      0.98        92
          3       1.00      0.99      0.99        93
          4       1.00      1.00      1.00        76
          5       0.99      0.98      0.99       108
          6       0.99      1.00      0.99        89
          7       0.99      1.00      0.99        78
          8       1.00      0.98      0.99        92
          9       0.99      0.99      0.99        92

avg / total       0.99      0.99      0.99       899

** Description des paramètres GridSearchCV ** cv Nombre de plis

scoring La valeur à optimiser peut être déterminée par la recherche de cupidité. Par défaut Dans la classification, "precision "sklearn.metrics.accuracy_score, "R2 "sklearn.metrics.r2_score est spécifié dans la régression. En outre, par exemple, dans la classification, les termes «précision» et «rappel» peuvent être spécifiés.

Pour plus d'informations ici Pour plus de précision, de rappel, etc. Toki no Mori Wiki

n_jobs Entrez simplement une valeur entière ici et il calculera en parallèle. Le nombre de cœurs est automatiquement entré avec -1.

Recommended Posts

Recherche en grille d'hyper paramètres avec Scikit-learn
Traitement parallèle avec Parallel de scikit-learn
Modèle de recherche de grille simple à l'aide de Scikit-learn
J'ai essayé la validation croisée basée sur le résultat de la recherche de grille avec scikit-learn
Affinons les hyper paramètres du modèle avec scikit-learn!
Carte thermique pour la recherche de grille avec Matplotlib
Isomap avec Scikit-learn
DBSCAN avec scikit-learn
Clustering avec scikit-learn (1)
Clustering avec scikit-learn (2)
PCA avec Scikit-learn
kmeans ++ avec scikit-learn
J'ai essayé la reconnaissance manuscrite des caractères des runes avec scikit-learn
Prédisez le deuxième tour de l'été 2016 avec scikit-learn
[Français] scikit-learn 0.18 Guide de l'utilisateur 3.2. Réglage des hyper paramètres de l'estimateur
Validation croisée avec scikit-learn
Recherche séquentielle avec Python
SVM multi-classes avec scikit-learn
Clustering avec scikit-learn + DBSCAN
Apprentissage Scikit-Learn avec la chimioinfomatique
[Chapitre 6] Introduction à scicit-learn avec 100 coups de traitement du langage
Définissez votre propre fonction de distance avec k-means de scikit-learn
Dichotomie avec python
Dichotomie avec Python 3
Rechercher une base de données avec db.py
DBSCAN (clustering) avec scikit-learn
Installez scikit.learn avec pip
Calculer tf-idf avec scikit-learn
Visualisez les résultats des arbres de décision réalisés avec Python scikit-learn
Recherche dans la base de données (vérification de la vitesse de traitement avec ou sans index)
Implémentez la normalisation du prétraitement des données d'entraînement Python avec scikit-learn [fit_transform]
À propos de max_iter de LogisticRegression () de scikit-learn
Hyper réglage des paramètres avec LightGBM Tuner
Créer / rechercher / créer une table avec PynamoDB
Réseau de neurones avec Python (scikit-learn)
Cohérence de la conception de l'API scikit-learn
Equation de mouvement avec sympy
Recherche de bits complète avec Go
python: principes de base de l'utilisation de scikit-learn ①
Recherche de bits complète avec Python
Prédiction de la moyenne Nikkei avec Pytorch 2
Souvenirs de combats avec Selenium
[Python] Régression linéaire avec scicit-learn
Je ne peux pas effectuer de recherche avec # google-map. ..
Prédiction de la moyenne Nikkei avec Pytorch
Les moteurs de recherche fonctionnent avec python
Essayez Selenium Grid avec Docker
Rechercher des tweets Twitter avec Python
Ajuster les hyper paramètres avec l'optimisation bayésienne
Rationalisez la recherche Web avec Python
Régression linéaire robuste avec scikit-learn
Exploration avec Python et Twitter API 2-Implémentation de la fonction de recherche d'utilisateurs