[PYTHON] Modèle de recherche de grille simple à l'aide de Scikit-learn

Recherche de grille à l'aide de Scikit-learn

Dans cet article, nous ferons une simple recherche de grille à l'aide de scicit-learn (Python). C'est un problème à vérifier à chaque fois, j'ai donc choisi un modèle.

Recherche de grille

Qu'est-ce que la recherche de grille?

Cette fois, la recherche de grille est effectuée à l'aide de GridSearchCV de scicit-learn. Page officielle: https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html

Veuillez vous référer à la page suivante.

Validation croisée et recherche de grille: https://qiita.com/Takayoshi_Makabe/items/d35eed0c3064b495a08b

Bibliothèque à utiliser

Cette fois, nous allons effectuer une recherche de grille en supposant un problème de régression.

from sklearn.metrics import mean_absolute_error #MAE
from sklearn.metrics import mean_squared_error #MSE
from sklearn.metrics import make_scorer

from sklearn.model_selection import GridSearchCV
from sklearn.model_selection import KFold

RMSE RMSE n'est pas dans le package scikit-learn, vous définissez donc vous-même la fonction.

def rmse(y_true,y_pred):
    #Calculer RMSE
    rmse = np.sqrt(mean_squared_error(y_true,y_pred))
    print('rmse',rmse)
    return rmse

K Fold

kf = KFold(n_splits=5,shuffle=True,random_state=0)

Linear SVR Lorsque vous faites des vecteurs de support linéaires, il semble plus rapide d'utiliser LinearSVR que d'utiliser SVR.

from sklearn.svm import LinearSVR

params_cnt = 10
max_iter = 1000

params = {"C":np.logspace(0,1,params_cnt), "epsilon":np.logspace(-1,1,params_cnt)}
'''
epsilon : Epsilon parameter in the epsilon-insensitive loss function.
          Note that the value of this parameter depends on the scale of the target variable y.
          If unsure, set epsilon=0.
C : Regularization parameter.
    The strength of the regularization is inversely proportional to C.
    Must be strictly positive.
https://scikit-learn.org/stable/modules/generated/sklearn.svm.LinearSVR.html
'''
gridsearch = GridSearchCV(
 LinearSVR(max_iter=max_iter,random_state=0),
 params,
 cv=kf,
 scoring=make_scorer(rmse,greater_is_better=False),
 return_train_score=True,
 n_jobs=-1
 )

gridsearch.fit(X_trainval, y_trainval)
print('The best parameter = ',gridsearch.best_params_)
print('RMSE = ',-gridsearch.best_score_)

LSVR = LinearSVR(max_iter=max_iter,random_state=0,C=gridsearch.best_params_["C"], epsilon=gridsearch.best_params_["epsilon"])

Kernel SVR

from sklearn.svm import SVR

params_cnt = 10
params = {"kernel":['rbf'],
 "C":np.logspace(0,1,params_cnt),
 "epsilon":np.logspace(-1,1,params_cnt)}

gridsearch = GridSearchCV(
 SVR(gamma='auto'),
 params, cv=kf,
 scoring=make_scorer(rmse,greater_is_better=False),
 n_jobs=-1
 )
'''
epsilon : Epsilon parameter in the epsilon-insensitive loss function.
          Note that the value of this parameter depends on the scale of the target variable y.
          If unsure, set epsilon=0.
C : Regularization parameter.
    The strength of the regularization is inversely proportional to C.
    Must be strictly positive.
https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVR.html
'''

gridsearch.fit(X_trainval, y_trainval)
print('The best parameter = ',gridsearch.best_params_)
print('RMSE = ',-gridsearch.best_score_)
print()

KSVR =SVR(
 kernel=gridsearch.best_params_['kernel'],
 C=gridsearch.best_params_["C"],
 epsilon=gridsearch.best_params_["epsilon"]
)

RandomForest Random Forest est un gars qui n'a pas à trop régler les hyperparamètres, Cela n'a peut-être pas beaucoup de sens, mais je l'ai fait, alors je vais le poster.

from sklearn.ensemble import RandomForestRegressor

params = {
 "max_depth":[2,5,10],
 "n_estimators":[10,20,30,40,50] n_Plus les estimateurs sont grands, plus la précision est élevée, donc lorsque vous avez le temps, vous devriez l'augmenter. Mais ça prend du temps
 }
gridsearch = GridSearchCV(
 RandomForestRegressor(random_state=0),
 params,
 cv=kf,
 scoring=make_scorer(rmse,greater_is_better=False),
 n_jobs=-1
 )
'''
n_estimators : The number of trees in the forest.
max_depth : The maximum depth of the tree. If None, then nodes are expanded until all leaves are pure or until all leaves contain less than min_samples_split samples.
https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html
'''
gridsearch.fit(X_trainval, y_trainval)
print('The best parameter = ',gridsearch.best_params_)
print('RMSE = ',-gridsearch.best_score_)
print()
RF = RandomForestRegressor(random_state=0,n_estimators=gridsearch.best_params_["n_estimators"], max_depth=gridsearch.best_params_["max_depth"])

finalement

GridSearchCV est pratique car vous pouvez syntoniser en quelques lignes seulement. Cette fois, je l'ai fait avec 3 modèles, mais bien sûr d'autres modèles peuvent être fabriqués.

Recommended Posts

Modèle de recherche de grille simple à l'aide de Scikit-learn
Recherche en grille d'hyper paramètres avec Scikit-learn
Rechercher sur Twitter avec Python
Essayez d'utiliser scikit-learn (1) - Clustering K par méthode moyenne
Recherche de chemin dans le graphique à l'aide de Networkx
Algorithme de recherche utilisant word2vec [python]
python: principes de base de l'utilisation de scikit-learn ①
# 1 [python3] Calcul simple à l'aide de variables
Essayez d'utiliser la fonction de modèle de Django
J'ai essayé la validation croisée basée sur le résultat de la recherche de grille avec scikit-learn