Python: Überwachtes Lernen: Hyperparameter Teil 1

Hyperparameter und Tuning

Was ist ein Hyperparameter?

Selbst beim maschinellen Lernen ist es schwierig, den gesamten Lernprozess zu automatisieren Es gibt Zeiten, in denen Sie das Modell manuell anpassen müssen.

Hyperparameter gehören zu den Parametern eines maschinellen Lernmodells. Es ist ein Parameter, den eine Person anpassen muss.

Die Hyperparameter variieren je nach ausgewählter Methode. Daher werden wir jedes Modell erläutern.

Was ist Tuning?

Das Anpassen der Hyperparameter wird als Tuning bezeichnet. Wie für die Anpassungsmethode, neben der Eingabe des Wertes direkt in das Modell Es gibt auch eine Möglichkeit, nach dem besten Wert zu suchen, indem Sie einen Bereich von Hyperparameterwerten angeben.

In scikit-learn durch Eingabe eines Werts in den Parameter beim Erstellen des Modells Parameter können eingestellt werden. Wenn Sie keine Parameter eingeben Die Anfangswerte der für jedes Modell definierten Parameter werden unverändert angegeben.

Der Code sieht folgendermaßen aus:

#Optimierungsmethode am Beispiel eines fiktiven Modellklassifikators
model = Classifier(param1=1.0, param2=True, param3="linear")

Hyperparameter der logistischen Regression

Parameter C.

In der logistischen Regression gibt es einen Parameter namens C.

In diesem C ist die vom Modell gelernte Identifikationsgrenzlinie gegen eine Fehlklassifizierung von Lehrerdaten. Es ist ein Indikator dafür, wie streng es ist.

Je höher der Wert von C ist, desto mehr lernt das Modell eine Diskriminanzlinie, die die Lehrerdaten vollständig klassifizieren kann. Aufgrund des übermäßigen Lernens für Lehrerdaten kommt es jedoch zu Überlernen. Wenn Sie Vorhersagen für andere Daten als Trainingsdaten treffen, nimmt die Genauigkeitsrate häufig ab.

Durch Verringern des Werts von C wird eine Fehlklassifizierung von Lehrerdaten toleranter. Durch das Zulassen einer Fehlklassifizierung wird die Grenzlinie weniger wahrscheinlich von Ausreißerdaten beeinflusst. Es macht es einfacher, allgemeine Grenzen zu erhalten. Bei Daten mit wenigen Ausreißern sind die Grenzen jedoch möglicherweise nicht gut identifiziert. Auch wenn es extrem klein ist, kann die Grenzlinie nicht gut identifiziert werden.

Der Anfangswert von C für das logistische Regressionsmodell von scikit-learn beträgt 1,0.

import matplotlib.pyplot as plt
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_classification
from sklearn import preprocessing
from sklearn.model_selection import train_test_split
%matplotlib inline

#Datengenerierung
X, y = make_classification(
    n_samples=1250, n_features=4, n_informative=2, n_redundant=2, random_state=42)
train_X, test_X, train_y, test_y = train_test_split(X, y, random_state=42)

#Stellen Sie den Bereich der C-Werte ein(Diesmal 1e-5,1e-4,1e-3,0.01,0.1,1,10,100,1000,10000)
C_list = [10 ** i for i in range(-5, 5)]

#Bereiten Sie eine leere Liste zum Zeichnen von Diagrammen vor
train_accuracy = []
test_accuracy = []

#Der folgende Code ist wichtig.
for C in C_list:
    model = LogisticRegression(C=C, random_state=42) #Ich bringe eine Liste von C.
    model.fit(train_X, train_y)
    train_accuracy.append(model.score(train_X, train_y))
    test_accuracy.append(model.score(test_X, test_y))
    
#Diagrammvorbereitung
# semilogx()Ändert die Skala von x auf die Skala von 10 auf die x-te Potenz
plt.semilogx(C_list, train_accuracy, label="accuracy of train_data")
plt.semilogx(C_list, test_accuracy, label="accuracy of test_data")
plt.title("accuracy by changing C")
plt.xlabel("C")
plt.ylabel("accuracy")
plt.legend()
plt.show()

Parameterstrafe

Während C die Toleranz für Klassifizierungsfehler war

Strafe stellt eine Strafe für die Komplexität des Modells dar.

Es gibt zwei Werte, die in Strafe eingegeben werden können, "L1" und "L2". Grundsätzlich ist es in Ordnung, "L2" auszuwählen, aber es gibt Fälle, in denen Sie die gewünschten Daten erhalten können, indem Sie "L1" auswählen.

L1:Dies ist eine Strafe für die Verallgemeinerung der Identifikationsgrenze durch Reduzieren der Menge an Datenmerkmalen.
L2:Dies ist eine Strafe für die Verallgemeinerung der Identifikationsgrenze durch Reduzieren des Gewichts der gesamten Daten.

Parameter multi_class

multi_Klasse ist ein Parameter, der bestimmt, wie sich das Modell bei der Klassifizierung mehrerer Klassen verhält.

Die logistische Regression liefert zwei Werte, "ovr" und "multinomial".

ovr: Geeignet für Probleme, die auf eine Klasse mit dem Binärwert "Zugehörigkeit / Nichtzugehörigkeit" reagieren.

Multinomial: Die Wahrscheinlichkeit, in jede Klasse eingestuft zu werden, wird ebenfalls berücksichtigt Geeignet für Fragen, die sich mit "wie viel gehören kann" sowie "Zugehörigkeit / Nichtzugehörigkeit" befassen.

Parameter random_state

Das Modell verarbeitet die Daten während des Trainings in zufälliger Reihenfolge.

random_state ist ein Parameter zur Steuerung der Reihenfolge.

Im Fall des logistischen Regressionsmodells kann sich die Grenzlinie in Abhängigkeit von der Verarbeitungsreihenfolge in Abhängigkeit von den Daten erheblich ändern.

Durch Festlegen des Werts dieses random_state kann das Trainingsergebnis mit denselben Daten gespeichert werden.

Lineare SVM-Hyperparameter

Parameter C.

Ähnlich wie bei der logistischen Regression hat auch SVM C, was die Toleranz von Klassifizierungsfehlern angibt. Als Parameter definiert. Die Verwendung ähnelt der logistischen Regression.

Im Vergleich zur logistischen Regression schwankt SVM stärker im vorhergesagten Wert des Datenetiketts um C. SVM-Algorithmen, um allgemeinere Grenzen im Vergleich zur logistischen Regression zu erhalten Wenn die Fehlertoleranz steigt oder fällt, ändert sich der Unterstützungsvektor und die Genauigkeitsrate steigt oder fällt im Vergleich zur logistischen Regression.

Der Anfangswert von C beträgt im linearen SVM-Modell 1,0.

Das Modul verwendet LinearSVC.
from sklearn.svm import LinearSVC
#Erstellen Sie ein Modell für lineares SVM
model = LinearSVC(C=C,random_state=2)

Parameterstrafe

Lineare SVMs haben wie die logistische Regression einen Strafparameter. Die Werte, die eingestellt werden können, sind auch "L1" und "L2".

Parameter multi_class

multi_class ist ein Parameter, der bestimmt, wie sich das Modell bei der Mehrfachklassifizierung verhält. Lineare SVM bietet zwei Werte, "ovr" und "crammer_singer". Grundsätzlich ist ovr leichter und liefert bessere Ergebnisse.

Parameter random_state

Random_state wird verwendet, um das Ergebnis zu korrigieren (die Zufallszahl zu korrigieren), aber für SVM ist es auch an der Bestimmung des Unterstützungsvektors beteiligt. Denken Sie daran, dass die endgültigen Lerngrenzen ungefähr gleich sind, jedoch mit geringfügigen Unterschieden.

Nichtlineare SVM-Hyperparameter

Parameter C.

Verwenden Sie beim Umgang mit Daten, die nicht linear trennbar sind, ein Modul namens SVC von SVM. Parameter C existiert sowohl in SVC als auch in logistischer Regression und SVM.

Passen Sie bei nichtlinearen SVMs C an, um sie zu bestrafen. Strafen steuern, wie viele Klassifizierungsfehler während des Lernens toleriert werden.

Parameter Kernel

Der Parameterkernel ist ein besonders wichtiger Parameter in nichtlinearer SVM. Ein Parameter, der eine Funktion zum Bearbeiten der empfangenen Daten definiert, um die Klassifizierung zu vereinfachen.

Es können fünf Werte verwendet werden: linear, rbf, poly, sigmoid und vorberechnet. Der Standardwert ist rbf.

linear
#Es ist eine lineare SVM und entspricht fast der linearen SVC. Verwenden Sie LinearSVC, es sei denn, Sie haben einen bestimmten Grund dafür.

rbf
poly
#Es ist wie eine stereoskopische Projektion.
#Da rbf im Vergleich zu anderen häufig eine relativ hohe Genauigkeitsrate liefert, verwenden wir normalerweise das Standard-rbf.

precomputed
#Es wird verwendet, wenn die Daten bereits durch Vorverarbeitung formatiert wurden.

sigmoid
#Führt die gleiche Verarbeitung wie das logistische Regressionsmodell durch.

Parameter Entscheidungsfunktion_Form

Decision_function_shape entspricht dem Parameter multi_class in SVC.

Es stehen zwei Werte zur Verfügung: ovo und ovr.

ovo
Machen Sie ein Klassenpaar, machen Sie eine binäre Klassifikation mit diesem Paar und gehören Sie mehrheitlich dazu
Die Idee ist, sich für eine Klasse zu entscheiden.
Der Rechenaufwand ist groß und der Vorgang kann je nach Datenmenge sehr umfangreich werden.

ovr
Klassifizieren Sie eine Klasse und die andere und entscheiden Sie die Mehrheit, zu der sie gehört, durch Mehrheitsentscheidung.

Parameter random_state

random_state ist ein Parameter, der sich auf die Verarbeitungsreihenfolge von Daten bezieht. Um das Vorhersageergebnis zu reproduzieren, wird empfohlen, es in der Lernphase zu korrigieren.

Wenn Sie tatsächlich maschinelles Lernen durchführen, gibt es eine Möglichkeit, einen Generator zum Generieren von Zufallszahlen anzugeben. Der Code zur Angabe des Generators lautet wie folgt.

import numpy as np
from sklearn.svm import SVC

#Erstellen Sie einen Zufallszahlengenerator
random_state = np.random.RandomState()

#Zufallsgenerator_Erstellen Sie das im Status angegebene SVM-Modell
model = SVC(random_state=random_state)

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)
Python lernen
Python: Anwendung des überwachten Lernens (Rückkehr)
QGIS + Python Teil 2
[Python] Lernnotiz 1
Python-Lernnotizen
Report_Deep Learning (Teil 1)
Report_Deep Learning (Teil 1)
QGIS + Python Teil 1
Python-Lernausgabe
Report_Deep Learning (Teil 2)
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
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-Klasse (Python-Lernnotiz ⑦)
Python lernen mit ChemTHEATER 03
"Objektorientiert" mit Python gelernt
Python lernen mit ChemTHEATER 05-1
Python: Deep Learning-Praxis
Python ~ Grammatikgeschwindigkeit lernen ~
Python: Unüberwachtes Lernen: Grundlagen
Maschinelles Lernen: Betreut --AdaBoost
Private Python-Lernprozedur
Python lernen mit ChemTHEATER 02
Python Basic Memorandum Teil 2
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 ⑥)
Angrenzende Bilder mit Python Teil 1
Python-Anwendung: Pandas Teil 1: Basic
Python-Anwendung: Pandas Teil 2: Serie
Schaben mit Selen + Python Teil 1
Python: Schiffsüberlebensvorhersage Teil 2