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.
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.
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.
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.
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
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.
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))
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))
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