[PYTHON] Rastersuche von Hyperparametern mit Scikit-learn

Ich werde vergessen, wie man es benutzt, also mach dir eine Notiz. Eine leicht modifizierte Version des Beispiels des Scikit-learn-Dokuments und seiner Ausführungsergebnisse.

Quellcode:

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

##Daten lesen
digits = datasets.load_digits()
X = digits.data
y = digits.target

##Unterteilt in Trainingsdaten und Testdaten.
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.5, random_state=0)

##Parameter einstellen
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+Beste Parameter:\n"
    print clf.best_estimator_

    print"\n+Durchschnittliche Punktzahl beim Lebenslauf mit Trainingsdaten:\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+Identifikationsergebnis in Testdaten:\n"
    y_true, y_pred = y_test, clf.predict(X_test)
    print classification_report(y_true, y_pred)

Ergebnis:

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

+Beste Parameter:

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)

+Durchschnittliche Punktzahl beim Lebenslauf mit Trainingsdaten:

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}

+Identifikationsergebnis in Testdaten:

             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
==================================================

+Beste Parameter:

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)

+Durchschnittliche Punktzahl beim Lebenslauf mit Trainingsdaten:

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}

+Identifikationsergebnis in Testdaten:

             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
==================================================

+Beste Parameter:

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)

+Durchschnittliche Punktzahl beim Lebenslauf mit Trainingsdaten:

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}

+Identifikationsergebnis in Testdaten:

             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

** Beschreibung der GridSearchCV -Parameter ** cv Anzahl der Falten

scoring Der zu optimierende Wert kann durch die Gierensuche ermittelt werden. Standardmäßig In der Klassifizierung wird "Genauigkeit", "Lernen lernen", "Genauigkeit", "Genauigkeit", " 'R2'sklearn.metrics.r2_score wird in der Regression angegeben. Darüber hinaus können beispielsweise bei der Klassifizierung „Präzision“ und „Rückruf“ angegeben werden.

Weitere Informationen hier Für Präzision, Rückruf usw. Toki no Mori Wiki

n_jobs Geben Sie hier einfach einen ganzzahligen Wert ein und dieser wird parallel berechnet. Die Anzahl der Kerne wird automatisch mit -1 eingegeben.

Recommended Posts

Rastersuche von Hyperparametern mit Scikit-learn
Parallele Verarbeitung mit Parallel von Scikit-Learn
Einfache Rastersuchvorlage mit Scikit-learn
Ich habe eine Kreuzvalidierung basierend auf dem Rastersuchergebnis mit scikit-learn versucht
Lassen Sie uns die Hyperparameter des Modells mit scikit-learn abstimmen!
Heat Map für die Rastersuche mit Matplotlib
Isomap mit Scikit-lernen
DBSCAN mit Scikit-Learn
Clustering mit Scikit-Learn (1)
Clustering mit Scikit-Learn (2)
PCA mit Scikit-Learn
kmeans ++ mit scikit-learn
Ich habe versucht, Runenfiguren mit Scikit-Learn handschriftlich zu erkennen
Prognostizieren Sie die zweite Runde des Sommers 2016 mit scikit-learn
[Übersetzung] scikit-learn 0.18 Benutzerhandbuch 3.2. Optimieren der Hyperparameter des Schätzers
Kreuzvalidierung mit Scikit-Learn
Sequentielle Suche mit Python
Mehrklassen-SVM mit Scikit-Learn
Clustering mit scikit-learn + DBSCAN
Scikit-Lernen mit Chemoinfomatik
[Kapitel 6] Einführung in Scicit-Learn mit 100 Klopfen Sprachverarbeitung
Definieren Sie Ihre eigene Distanzfunktion mit k-Mitteln des Scikit-Lernens
Dichotomie mit Python
Dichotomie mit Python 3
Datenbank mit db.py durchsuchen
DBSCAN (Clustering) mit Scikit-Learn
Installieren Sie scikit.learn mit pip
Berechnen Sie tf-idf mit scikit-learn
Visualisieren Sie die Ergebnisse von Entscheidungsbäumen, die mit Python scikit-learn erstellt wurden
Datenbanksuche (Überprüfung der Verarbeitungsgeschwindigkeit mit oder ohne Index)
Implementieren Sie die Normalisierung der Vorverarbeitung von Python-Trainingsdaten mit scicit-learn [fit_transform].
Über max_iter von LogisticRegression () von scikit-learn
Hyperparameter-Tuning mit LightGBM-Tuner
Erstellen / Suchen / Erstellen einer Tabelle mit PynamoDB
Neuronales Netzwerk mit Python (Scikit-Learn)
Konsistenz des Scikit-Learn-API-Designs
Bewegungsgleichung mit Sympy
Vollbit-Suche mit Go
Python: Grundlagen der Verwendung von Scikit-Learn ①
Vollbit-Suche mit Python
Vorhersage des Nikkei-Durchschnitts mit Pytorch 2
Erinnerungen an den Kampf mit Selen
[Python] Lineare Regression mit Scicit-Learn
Ich kann nicht mit # google-map suchen. ..
Vorhersage des Nikkei-Durchschnitts mit Pytorch
Suchmaschinen arbeiten mit Python
Probieren Sie Selenium Grid mit Docker aus
Suche nach Twitter-Tweets mit Python
Passen Sie die Hyperparameter mit der Bayes'schen Optimierung an
Optimieren Sie die Websuche mit Python
Robuste lineare Regression mit Scikit-Learn
Crawlen mit Python und Twitter API 2-Implementierung der Benutzersuchfunktion