Aidemy 2020/9/27
Bonjour, c'est Yope! Je suis une école littéraire croustillante, mais j'étais intéressé par les possibilités de l'IA, alors je suis allé à l'école spécialisée en IA "Aidemy" pour étudier. Je voudrais partager les connaissances acquises ici avec vous, et je les ai résumées dans Qiita. Je suis très heureux que de nombreuses personnes aient lu l'article de synthèse précédent. Je vous remercie! Ceci est le troisième poste de l'apprentissage supervisé. Ravi de vous rencontrer.
Quoi apprendre cette fois ・ Hyper paramètres pour l'arbre de décision, la forêt aléatoire et k-NN ・ Automatisation du réglage (réglage des paramètres)
-__ Max_depth__ indique la profondeur de l'arbre que le modèle __ apprend. Si cette valeur n'est pas définie ou si la valeur est trop grande, elle sera trop proche des données de l'enseignant et ne sera pas généralisée, limitez donc max_depth pour la généraliser. C'est ce qu'on appelle "l'élagage de l'arbre de décision".
-Comme l'arbre de décision a une structure hiérarchique, le rapport des données extraites au début à l'ensemble est plus grand. Par conséquent, l'effet sur le résultat de __random_state qui spécifie l'ordre de récupération des données est plus important que celui des autres modèles. __
-La forêt aléatoire est un modèle qui "crée plusieurs arbres de décision pour des données aléatoires et génère la classe avec le plus grand nombre de résultats de classification en conséquence", mais n_estimators est créé à ce moment __ " Le nombre d'arbres déterminés "__ est affiché.
-Bien que la profondeur de l'arbre de décision puisse être définie même dans la forêt aléatoire, il est préférable de ne pas approfondir chacun d'eux car il existe plusieurs arbres de décision. Par conséquent, la valeur doit être inférieure à l'arbre de décision normal. __
-Dans Random Forest, des nombres aléatoires sont également utilisés pour extraire des données, comme dans "Créer plusieurs arbres de détermination de données aléatoires", donc si la valeur de __random_state change, les résultats de l'analyse différeront considérablement. __
-K-NN est un modèle qui "extrait k données d'enseignant similaires aux données de prédiction et produit la classe la plus courante comme résultat de prédiction", mais n_neighbours indique la valeur __ de ce __k. .. Autrement dit, "le nombre de données d'enseignant à comparer pour la prédiction par rapport à une donnée".
・ Il est très difficile de régler tous les paramètres tout en modifiant leurs valeurs. Par conséquent, vous pouvez gagner du temps en spécifiant la plage de paramètres __ et en demandant à l'ordinateur de trouver le jeu de paramètres avec les meilleurs résultats. -Il existe deux types d'automatisation: __ "recherche de grille" et "recherche aléatoire" __.
-La recherche de grille est une méthode __ dans laquelle plusieurs candidats pour les valeurs de paramètre __ sont spécifiés à l'avance, chaque ensemble est évalué et l'ensemble avec les meilleurs résultats est adopté. -Souvent utilisé lorsque la valeur est "chaîne de caractères", "entier", "Vrai / Faux", etc. (car il est facile de spécifier explicitement). -Effectuez une recherche de grille avec un SVM non linéaire. La méthode consiste à transmettre chaque paramètre en tant que clé de dictionnaire et les valeurs sous forme de liste lors de la création du modèle __. __
from sklearn.model_selection import GridSearchCV
#Paramètres candidats (le noyau est autre que précalculé, C est-5~10 à la i-ème puissance avec jusqu'à 5 comme index)
set_grid = {SVC():{"kernel":["linear","poly","rbf","sigmoid"],"C":[10**i for i in range(-5,5)],"decision_function_shape":["ovr","ovo"],"random_state":[0]}}
#Définissez le "taux de réponse correct" et le "paramètre utilisé" avec les meilleurs résultats à stocker ultérieurement
max_score = 0
best_param = None
#set_Effectuer une recherche de grille avec "SVC ()" de grille comme "modèle" et "paramètre (candidat)" comme "param".
for model,param in set_grid.items():
search_model = GridSearchCV(model, param)
search_model.fit(train_X, train_y)
#Calculez le taux de réponse correct et enregistrez le jeu de paramètres avec les meilleurs résultats et le taux de réponse correct.
pred_y = search_model.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 = searchmodel.best_param
-La recherche aléatoire est une méthode __ qui spécifie une plage de __ valeurs de paramètre, définit les valeurs de manière aléatoire à partir de cette plage, évalue le modèle et adopte l'ensemble de paramètres avec les meilleurs résultats. -Utilisez la fonction __probability __ pour spécifier la plage. Ceci est importé du module scipy.stats. -Effectuez une recherche de grille avec un SVM non linéaire. La méthode est la même que la recherche de grille.
import scipy.stats as sc
from sklearn.model_selection import RandomizedSearchCV
#Paramètres candidats (C est 0 en moyenne).00001,Distribution uniforme avec un écart type de 1000, aléatoire_l'état prend une valeur entière de 0 à 100 au hasard)
set_rondom = {SVC():{"kernel":["linear","poly","rbf","sigmoid"],"C":sc.uniform(0.00001,1000),"decision_function_shape":["ovr","ovo"],"random_state":sc.randint(0,100)}}
#Définissez le "taux de réponse correct" et le "paramètre utilisé" avec les meilleurs résultats à stocker ultérieurement(Ce qui suit est presque le même que la grille)
max_score = 0
best_param = None
#set_Effectuez une recherche aléatoire avec "SVC ()" dans la grille comme "modèle" et "paramètre (candidat)" comme "param".
for model,param in set_random.items():
search_model = RandomizedSearchCV(model, param)
search_model.fit(train_X, train_y)
#Calculez le taux de réponse correct et enregistrez le jeu de paramètres avec les meilleurs résultats et le taux de réponse correct.
pred_y = search_model.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 = search_model.best_params_
-Le réglage automatique des paramètres utilise essentiellement une méthode appelée la méthode du gradient, dans laquelle la valeur est déplacée de manière à réduire la fonction de perte. Dans cette méthode de gradient, il existe une pseudo solution __ point de selle __, et si vous êtes accro à cela, vous ne pourrez pas atteindre la solution d'origine. ・ Cependant, comme cette fonction de perte change selon le cas, il est nécessaire de décider du réglage __ en essayant. __
-L'hyper paramètre de l'arbre de décision inclut "random_state" en plus de __ "max_depth" __ qui limite la profondeur de l'arbre. -Les hyperparamètres de forêt aléatoire incluent "max_depth" et "random_state" en plus de __ "n_estimators" __ qui spécifient le nombre d'arbres déterminés. -L'hyper paramètre de k-NN a __ "n_neighbors" __ qui spécifie le nombre de données de l'enseignant à comparer pour la prédiction. -Tuning peut être automatisé avec __ "recherche de grille" "recherche aléatoire" __.
Cette fois, c'est fini. Merci d'avoir lu jusqu'ici.
Recommended Posts