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