[PYTHON] Einfache Rastersuchvorlage mit Scikit-learn

Rastersuche mit Scikit-learn

In diesem Artikel führen wir eine einfache Rastersuche mit scicit-learn (Python) durch. Es ist jedes Mal mühsam, dies zu überprüfen, daher habe ich eine Vorlage ausgewählt.

Rastersuche

Was ist Rastersuche?

Dieses Mal wird die Rastersuche mit GridSearchCV von scicit-learn durchgeführt. Offizielle Seite: https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html

Bitte beachten Sie die folgende Seite.

Kreuzvalidierung und Rastersuche: https://qiita.com/Takayoshi_Makabe/items/d35eed0c3064b495a08b

Bibliothek zu verwenden

Dieses Mal führen wir eine Rastersuche unter der Annahme eines Regressionsproblems durch.

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 ist nicht im scikit-learn-Paket enthalten, daher definieren Sie die Funktion selbst.

def rmse(y_true,y_pred):
    #RMSE berechnen
    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 Bei linearen Unterstützungsvektoren scheint es schneller zu sein, LinearSVR zu verwenden als 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 ist ein Typ, der Hyperparameter nicht zu sehr einstellen muss. Es mag nicht viel Sinn machen, aber ich habe es gemacht, also werde ich es posten.

from sklearn.ensemble import RandomForestRegressor

params = {
 "max_depth":[2,5,10],
 "n_estimators":[10,20,30,40,50] n_Je größer die Schätzer sind, desto höher ist die Genauigkeit. Wenn Sie also Zeit haben, sollten Sie sie erhöhen. Aber es braucht Zeit
 }
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"])

Schließlich

GridSearchCV ist praktisch, da Sie nur wenige Zeilen einstellen können. Dieses Mal habe ich es mit 3 Modellen gemacht, aber natürlich können auch andere Modelle gemacht werden.

Recommended Posts

Einfache Rastersuchvorlage mit Scikit-learn
Rastersuche von Hyperparametern mit Scikit-learn
Suchen Sie Twitter mit Python
Versuchen Sie es mit Scikit-Learn (1) - K-Clustering nach Durchschnittsmethode
In-Graph-Pfadsuche mit Networkx
Suchalgorithmus mit word2vec [Python]
Python: Grundlagen der Verwendung von Scikit-Learn ①
# 1 [python3] Einfache Berechnung mit Variablen
Versuchen Sie es mit der Vorlagenfunktion von Django
Ich habe eine Kreuzvalidierung basierend auf dem Rastersuchergebnis mit scikit-learn versucht