Python: Überwachtes Lernen: Hyperparameter Teil 2

Hyperparameter des Entscheidungsbaums

Parameter max_depth

max_Tiefe ist ein Parameter, der die maximale Tiefe des Baums darstellt, die das Modell während des Trainings lernt.

Wenn der Wert von max_depth nicht festgelegt ist, teilt der Baum die Daten auf, bis die Klassifizierung der Lehrerdaten fast abgeschlossen ist.

Dies führt zu einem weniger allgemeinen Modell, das unter übermäßiger Abhängigkeit von Lehrerdaten trainiert wird.

Selbst wenn der Wert zu groß ist, stoppt das Wachstum des Baums in dem Stadium, in dem die Klassifizierung abgeschlossen ist, sodass es dem obigen Zustand entspricht.

Stellen Sie max_depth ein, um die Höhe des Baums zu begrenzen

Dies wird als Beschneiden des Entscheidungsbaums bezeichnet.

Parameter random_state

random_state ist ein Parameter, der in direktem Zusammenhang mit dem Lernprozess des Entscheidungsbaums steht.

Bei der Division des Entscheidungsbaums wird häufig der Wert des Elements gefunden, das die Klassifizierung der Daten erklären kann, und die Daten werden geteilt. Da es jedoch viele Kandidaten für einen solchen Wert gibt, wird random_state verwendet, um eine Zufallszahl zu generieren. Ich habe den Kandidaten entschieden.

Zufällige Waldhyperparameter

Parameter n_estimators

Eines der Merkmale von Random Forest ist, dass das Ergebnis durch eine Mehrheitsentscheidung unter Verwendung mehrerer einfacher Entscheidungsbäume bestimmt wird.

Dieses n bestimmt die Anzahl der einfachen Entscheidungsbäume_Es ist ein Parameter, der als Schätzer bezeichnet wird.

Parameter max_depth

Zufällige Gesamtstruktur erstellt mehrere einfache Entscheidungsbäume, sodass Parameter für Entscheidungsbäume festgelegt werden können. max_depth ist ein Parameter, um ein Übertraining des Entscheidungsbaums zu verhindern. Geben Sie in einer zufälligen Gesamtstruktur einen Wert ein, der kleiner als der normale Entscheidungsbaum ist.

Da es sich um einen Algorithmus handelt, der als Mehrheitsentscheidung zur Klassifizierung eines einfachen Entscheidungsbaums bezeichnet wird, ist es besser, als für jeden Entscheidungsbaum eine strikte Klassifizierung durchzuführen Durch Eingrenzen der interessierenden Elemente und Durchführen einer Analyse aus der Vogelperspektive ist es möglich, eine hohe Lerneffizienz und eine hohe Genauigkeit aufrechtzuerhalten.

Parameter random_state

random_Zustand ist auch ein wichtiger Parameter in zufälligen Wäldern.

Wie der Name Random Forest andeutet, unterscheidet sich das Analyseergebnis bei dieser Methode, bei der Zufallszahlen in vielen Situationen dazu beitragen, nicht nur das Ergebnis zu fixieren, sondern auch die Daten des Entscheidungsbaums zu teilen und die zu verwendenden Elemente zu bestimmen, stark von diesem Parameter.

k-NN

Parameter n_neighbors

n_Nachbarn ist k-Es ist der Wert von kk von NN.

Mit anderen Worten, es ist ein Parameter, der die Anzahl ähnlicher Daten bestimmt, die bei der Vorhersage von Ergebnissen verwendet werden.

Wenn die Anzahl der n_Nachbarn zu groß ist, variiert die Ähnlichkeit der als ähnliche Daten ausgewählten Daten, und Kategorien mit einem engen Klassifizierungsbereich werden nicht gut klassifiziert.

Automatisierung optimieren

Rastersuche

Es erfordert zu viel Zeit und Mühe, jedes Mal alle Parameter zu ändern und das Ergebnis zu überprüfen.

Das beste Ergebnis war die Angabe des Parameterbereichs Die Methode besteht darin, dass der Computer den Parametersatz findet. Es gibt zwei Hauptmethoden

Mit Rastersuche
Es ist eine zufällige Suche.

Die Rastersuche gibt explizit mehrere Kandidatenwerte für den Hyperparameter an, den Sie anpassen möchten. Als Modell durch Erstellen eines Parametersatzes und Wiederholen der Auswertung des Modells zu diesem Zeitpunkt Mit dieser Methode wird der optimale Parametersatz erstellt.

Parameterwerte wie Zeichenfolgen, Ganzzahlen, Wahr oder Falsch usw., um Wertkandidaten explizit anzugeben Es eignet sich für die Suche nach Parametern, die nicht kontinuierliche Werte mathematisch annehmen. Da der Parametersatz jedoch so erstellt wird, dass er die Kandidatenparameter abdeckt. Nicht geeignet, um viele Parameter gleichzeitig einzustellen.

Der Code sieht folgendermaßen aus: Bitte beachten Sie, dass die Ausführung des Programms einige Zeit dauert.

import scipy.stats
from sklearn.datasets import load_digits
from sklearn.svm import SVC
from sklearn.model_selection import GridSearchCV
from sklearn.model_selection import train_test_split
from sklearn.metrics import f1_score

data = load_digits()
train_X, test_X, train_y, test_y = train_test_split(data.data, data.target, random_state=42)

#Legen Sie Kandidatenwerte für Parameter fest
model_param_set_grid = {SVC(): {"kernel": ["linear", "poly", "rbf", "sigmoid"],
                                "C": [10 ** i for i in range(-5, 5)],
                                "decision_function_shape": ["ovr", "ovo"],
                                "random_state": [42]}}

max_score = 0
best_param = None

#Parametersuche mit Rastersuche
for model, param in model_param_set_grid.items():
    clf = GridSearchCV(model, param)
    clf.fit(train_X, train_y)
    pred_y = clf.predict(test_X)
    score = f1_score(test_y, pred_y, average="micro")
    if max_score < score:
        max_score = score
        best_model = model.__class__.__name__
        best_param = clf.best_params_

print("Parameter:{}".format(best_param))
print("Bestes Ergebnis:",max_score)
svm = SVC()
svm.fit(train_X, train_y)
print()
print('Keine Einstellung')
print(svm.score(test_X, test_y))

Zufällige Suche

Bei der Rastersuche wurden Kandidatenwerte angegeben und die Parameter angepasst.

Die zufällige Suche hat Parameter

Geben Sie den Bereich möglicher Werte an

Durch Wiederholen der Auswertung des Modells anhand eines durch die Wahrscheinlichkeit bestimmten Parametersatzes So finden Sie den besten Parametersatz.

Durch Angeben des Wertebereichs wird die Wahrscheinlichkeitsfunktion des Parameters angegeben.

Scipy als stochastische Funktion von Parametern.Die stochastische Funktion des Statistikmoduls wird häufig verwendet.

Der Code ist unten.

import scipy.stats
from sklearn.datasets import load_digits
from sklearn.svm import SVC
from sklearn.model_selection import RandomizedSearchCV
from sklearn.model_selection import train_test_split
from sklearn.metrics import f1_score

data = load_digits()
train_X, test_X, train_y, test_y = train_test_split(data.data, data.target, random_state=42)

#Legen Sie Kandidatenwerte für Parameter fest
model_param_set_random =  {SVC(): {
        "kernel": ["linear", "poly", "rbf", "sigmoid"],
        "C": scipy.stats.uniform(0.00001, 1000),
        "decision_function_shape": ["ovr", "ovo"],
        "random_state": scipy.stats.randint(0, 100)
    }}

max_score = 0
best_param = None

#Parametersuche mit Zufallssuche
for model, param in model_param_set_random.items():
    clf = RandomizedSearchCV(model, param)
    clf.fit(train_X, train_y)
    pred_y = clf.predict(test_X)
    score = f1_score(test_y, pred_y, average="micro")
    if max_score < score:
        max_score = score
        best_param = clf.best_params_

print("Parameter:{}".format(best_param))
print("Bestes Ergebnis:",max_score)
svm = SVC()
svm.fit(train_X, train_y)
print()
print('Keine Einstellung')
print(svm.score(test_X, test_y))

Modellbasierte Hyperparameteroptimierung

Das neuronale Netz ist im Grunde eine Methode, die als Gradientenmethode (die Methode mit dem steilsten Abstieg) bezeichnet wird. Gehen Sie schrittweise in Richtung Reduzierung der Verlustfunktion vor. Normalerweise hat ein neuronales Netz viele Sattelpunkte (Pseudolösungen) Wenn Sie am Sattelpunkt hängen bleiben, wird der Gradient zu 0 und Sie können sich nicht bewegen, sodass Sie die ursprüngliche Lösung nicht erreichen können.

Daher hat das Gradientenverfahren verschiedene verbesserte Verfahren hervorgebracht. Es gibt keine einheitliche Optimierungsmethode für die Verlustfunktion. (Kein Satz zum kostenlosen Mittagessen) Außerdem ändert sich die Verlustfunktion je nach Aufgabe und Daten. Daher sollte die Optimierung vor der Theorie versucht werden.

Recommended Posts

Python: Überwachtes Lernen: Hyperparameter Teil 1
Python: Überwachtes Lernen: Hyperparameter Teil 2
Python: Überwachtes Lernen (Rückkehr)
Python: Überwachtes Lernen (Klassifizierung)
Überwachtes Lernen 3 Hyperparameter und Abstimmung (2)
Überwachtes Lernen 2 Hyperparameter und Abstimmung (1)
QGIS + Python Teil 2
[Python] Lernnotiz 1
Python-Lernnotizen
Report_Deep Learning (Teil 2)
Report_Deep Learning (Teil 1)
Report_Deep Learning (Teil 1)
Python-Lernausgabe
Python-Lernseite
Python-Lerntag 4
Python: Geschlechtsidentifikation (Entwicklung von Deep Learning) Teil 1
Python Deep Learning
Python: Geschlechtsidentifikation (Entwicklung von Deep Learning) Teil 2
Python-Lernen (Ergänzung)
Python: Scraping Teil 1
Betreutes Lernen (Klassifizierung)
Deep Learning × Python
Python-Lernnotizen
Lösung Wenn Sie Python 3.6 oder höher verwenden, benötigen Sie die enum34-Bibliothek ebenfalls nicht. Deinstallieren Sie sie daher und verwenden Sie das Standard-Enum-Modul. Enum34 deinstallieren Führen Sie nach der Deinstallation von enum34 erneut `pip install optuna` aus und Sie haben Optuna erfolgreich installiert! Python, pip, Python3, enum, OptunaPython3 Beginn Teil 1
Python: Scraping Teil 2
Maschinelles Lernen beginnend mit Python Personal Memorandum Part2
Grundlagen des Lernens mit einem Lehrer Teil 1 - Einfache Regression - (Hinweis)
Maschinelles Lernen beginnend mit Python Personal Memorandum Part1
[Maschinelles Lernen] Überwachtes Lernen mithilfe der Kernel-Dichteschätzung Teil 2
EV3 x Python Maschinelles Lernen Teil 2 Lineare Regression
[Maschinelles Lernen] Überwachtes Lernen mithilfe der Kernel-Dichteschätzung Teil 3
Videorahmeninterpolation durch tiefes Lernen Teil 1 [Python]
Grundlagen des Lernens mit einem Lehrer Teil 3 - Multiple Regression (Implementierung) - (Anmerkungen) -
Python lernen mit ChemTHEATER 03
Python-Modul (Python-Lernnotiz ④)
Erweitertes Lernen 1 Python-Installation
Python lernen mit ChemTHEATER 05-1
Python: Deep Learning-Praxis
Python ~ Grammatikgeschwindigkeit lernen ~
Maschinelles Lernen: Betreut --AdaBoost
Private Python-Lernprozedur
Python lernen mit ChemTHEATER 02
Python lernen mit ChemTHEATER 01
Python-Grundnotiz - Teil 2
Python: Deep Learning Tuning
Python + Unity Enhanced Learning (Lernen)
Lernen mit einem Lehrer (Rückkehr) 1 Grundlagen
Python-Grundnotiz - Teil 1
Bildverarbeitung mit Python (Teil 2)
Python mit freeCodeCamp Teil1 studieren
Behandlung von Python-Ausnahmen (Python-Lernnotiz ⑥)
Python-Anwendung: Pandas Teil 1: Basic
Python-Anwendung: Pandas Teil 2: Serie
Schaben mit Selen + Python Teil 1
Python: Schiffsüberlebensvorhersage Teil 2
O'Reilly python3 Primer Lernnotiz
Lernablauf für Python-Anfänger
Maschinelles Lernen: Überwacht - Lineare Regression