Python: apprentissage supervisé: Hyper Paramètre partie 2

Hyper paramètres de l'arbre de décision

Paramètre max_depth

max_La profondeur est un paramètre qui représente la profondeur maximale de l'arbre que le modèle apprend pendant l'entraînement.

Lorsque la valeur de max_depth n'est pas définie, l'arborescence divise les données jusqu'à ce que la classification des données de l'enseignant soit presque terminée.

Il en résulte un modèle moins général qui est formé avec une dépendance excessive sur les données des enseignants.

De plus, même si la valeur est trop grande, la croissance de l'arbre s'arrêtera au stade où la classification est terminée, donc ce sera le même que l'état ci-dessus.

Définissez max_depth pour limiter la hauteur de l'arbre

Cela s'appelle l'élagage de l'arbre de décision.

Paramètre random_state

random_l'état est un paramètre directement lié au processus d'apprentissage de l'arbre de décision.

Dans la division de l'arbre de décision, au moment de la division, la valeur de l'élément qui peut expliquer la classification des données est trouvée et les données sont divisées, mais comme il y a beaucoup de candidats pour une telle valeur, en générant un nombre aléatoire par random_state. , J'ai choisi le candidat.

Hyperparamètres de forêt aléatoires

Paramètres n_estimators

L'une des caractéristiques de Random Forest est que le résultat est décidé par une décision majoritaire par plusieurs arbres de décision simples.

C'est ce n qui détermine le nombre d'arbres de décision simples_C'est un paramètre appelé estimateurs.

Paramètre max_depth

La forêt aléatoire crée plusieurs arbres de décision simples, il est donc possible de définir des paramètres liés aux arbres de décision. max_depth est un paramètre pour éviter le surentraînement de l'arbre de décision. Dans une forêt aléatoire, entrez une valeur inférieure à l'arbre de décision normal.

Puisqu'il s'agit d'un algorithme appelé décision majoritaire de classification d'un arbre de décision simple, il est préférable d'effectuer une classification stricte pour chaque arbre de décision En réduisant les éléments d'intérêt et en effectuant une analyse de vue à vol d'oiseau, il est possible de maintenir une efficacité d'apprentissage élevée et une précision élevée.

Paramètre random_state

random_l'état est également un paramètre important dans les forêts aléatoires.

Comme le nom de Random Forest le suggère, dans cette méthode où les nombres aléatoires contribuent dans de nombreuses situations telles que non seulement la fixation du résultat mais aussi la division des données de l'arbre de décision et la détermination des éléments à utiliser, le résultat de l'analyse diffère grandement en fonction de ce paramètre.

k-NN

Paramètre n_neighbors

n_voisins est k-C'est la valeur de kk de NN.

En d'autres termes, c'est un paramètre qui détermine le nombre de données similaires utilisées lors de la prédiction des résultats.

Si le nombre de n_neighbours est trop grand, la similitude des données sélectionnées comme données similaires variera et les catégories avec une plage de classification étroite ne seront pas bien classées.

Automatisation du réglage

Recherche de grille

Il faut trop de temps et d'efforts pour modifier à chaque fois tous les paramètres et vérifier le résultat.

Le meilleur résultat a été de spécifier la plage de paramètres La méthode consiste à demander à l'ordinateur de trouver le jeu de paramètres. Il existe deux méthodes principales

Avec la recherche de grille
C'est une recherche aléatoire.

La recherche de grille spécifie explicitement plusieurs valeurs candidates pour l'hyper paramètre que vous souhaitez ajuster. En tant que modèle en créant un jeu de paramètres et en répétant l'évaluation du modèle à ce moment-là C'est la méthode utilisée pour créer le jeu de paramètres optimal.

Des valeurs de paramètres telles que des chaînes, des entiers, True ou False, etc. pour spécifier explicitement des valeurs candidates Il convient à la recherche de paramètres qui prennent mathématiquement des valeurs non continues. Cependant, parce que le jeu de paramètres est créé pour couvrir les paramètres candidats. Ne convient pas pour régler plusieurs paramètres en même temps.

Le code ressemble à ceci: Veuillez noter que l'exécution du programme prend du temps.

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)

#Définir les valeurs candidates pour les paramètres
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

#Recherche de paramètres avec recherche de grille
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("paramètre:{}".format(best_param))
print("Meilleur score:",max_score)
svm = SVC()
svm.fit(train_X, train_y)
print()
print('Aucun ajustement')
print(svm.score(test_X, test_y))

Recherche aléatoire

La recherche de grille a spécifié des valeurs candidates et ajusté les paramètres dessus.

La recherche aléatoire a des paramètres

Spécifiez la plage de valeurs possibles

En répétant l'évaluation du modèle à l'aide d'un jeu de paramètres déterminé par probabilité Comment trouver le meilleur jeu de paramètres.

Spécifier la plage de valeurs revient à spécifier la fonction de probabilité du paramètre.

Scipy comme fonction stochastique des paramètres.La fonction stochastique du module stats est souvent utilisée.

Le code est ci-dessous.

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)

#Définir les valeurs candidates pour les paramètres
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

#Recherche de paramètres avec recherche aléatoire
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("paramètre:{}".format(best_param))
print("Meilleur score:",max_score)
svm = SVC()
svm.fit(train_X, train_y)
print()
print('Aucun ajustement')
print(svm.score(test_X, test_y))

Optimisation des hyperparamètres basée sur un modèle

Le réseau neuronal est essentiellement une méthode appelée méthode du gradient (la méthode de descente la plus raide). Procédez progressivement dans le sens de la réduction de la fonction de perte. Habituellement, un réseau neuronal a de nombreux points de selle (pseudo-solutions) Si vous êtes accroché à la pointe de la selle, le gradient devient 0 et vous ne pouvez pas bouger, vous ne pouvez donc pas atteindre la solution d'origine.

Par conséquent, la méthode du gradient a produit diverses méthodes améliorées. Il n'y a pas de méthode d'optimisation universelle pour la fonction de perte. (Pas de théorème du déjeuner gratuit) En outre, la fonction de perte change en fonction de la tâche et des données, donc l'optimisation doit être essayée avant la théorie.

Recommended Posts

Python: Apprentissage supervisé: Hyper Paramètres Partie 1
Python: apprentissage supervisé: Hyper Paramètre partie 2
Python: apprentissage supervisé (retour)
Python: apprentissage supervisé (classification)
Apprentissage supervisé 3 hyper paramètres et réglage (2)
Apprentissage supervisé 2 Hyper paramètres et réglage (1)
QGIS + Python Partie 2
[Python] Note d'apprentissage 1
Notes d'apprentissage Python
Report_Apprentissage approfondi (partie 2)
Report_Apprentissage approfondi (partie 1)
Report_Apprentissage approfondi (partie 1)
sortie d'apprentissage python
Site d'apprentissage Python
Apprentissage Python jour 4
Python: Identification du genre (développement de l'apprentissage profond) Partie 1
Apprentissage en profondeur Python
Python: Identification du genre (développement de l'apprentissage profond) Partie 2
apprentissage python (supplément)
Python: grattage partie 1
Apprentissage supervisé (classification)
Apprentissage profond × Python
notes d'apprentissage python
Python3 commence la partie 1
Python: grattage, partie 2
Apprentissage automatique à partir de Python Personal Memorandum Part2
Bases de l'apprentissage avec un enseignant Partie 1-Régression simple- (Remarque)
Apprentissage automatique à partir de Python Personal Memorandum Part1
[Apprentissage automatique] Apprentissage supervisé utilisant l'estimation de la densité du noyau Partie 2
EV3 x Python Machine Learning Partie 2 Régression linéaire
[Apprentissage automatique] Apprentissage supervisé utilisant l'estimation de la densité du noyau Partie 3
Interpolation d'images vidéo par apprentissage en profondeur, partie 1 [Python]
Bases de l'apprentissage avec un enseignant Partie 3-Régression multiple (mise en œuvre) - (Notes) -
Apprendre Python avec ChemTHEATER 03
Module Python (mémo d'apprentissage Python ④)
Apprentissage amélioré 1 installation de Python
Apprendre Python avec ChemTHEATER 05-1
Python: pratique du Deep Learning
Python ~ Apprentissage rapide de la grammaire ~
Apprentissage automatique: supervisé - AdaBoost
Procédure d'apprentissage privée Python
Apprendre Python avec ChemTHEATER 02
Apprendre Python avec ChemTHEATER 01
Mémo de base Python - Partie 2
Python: réglage du Deep Learning
Apprentissage amélioré Python + Unity (apprentissage)
Apprendre avec un enseignant (retour) 1 Bases
Mémo de base Python - Partie 1
Traitement d'image avec Python (partie 2)
Etudier Python avec freeCodeCamp part1
Gestion des exceptions Python (mémo d'apprentissage Python ⑥)
Application Python: Pandas Partie 1: Basique
Application Python: Pandas Partie 2: Série
Grattage avec Selenium + Python Partie 1
Python: prévision de survie de navire, partie 2
Mémo d'apprentissage O'Reilly python3 Primer
Flux d'apprentissage pour les débutants en Python
Machine Learning: Supervision - Régression linéaire