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