Was ist ein guter Wertebereich für die über GridSearchCV () zu untersuchenden svm.SVC () -Hyperparameter?

Ich stoße auf das Problem, dass die Hyperparameter meinessvm.SVC() sind zu breit, so dass dasGridSearchCV() wird nie abgeschlossen! Eine Idee ist, @ zu verwendRandomizedSearchCV() stattdessen. Aber auch hier ist mein Datensatz relativ groß, sodass 500 Iterationen ungefähr 1 Stunde dauern!

Meine Frage ist, was ist eine gute Einstellung (in Bezug auf den Wertebereich für jeden Hyperparameter) in GridSearchCV (oder RandomizedSearchCV), um keine Ressourcen zu verschwenden?

it anderen Worten, wie zu entscheiden ist, ob z.C Werte über 100 sind sinnvoll und / oder Schritt 1 ist weder groß noch klein? Jede Hilfe wird sehr geschätzt. Dies ist das Setup, das ich derzeit verwende:

parameters = {
    'C':            np.arange( 1, 100+1, 1 ).tolist(),
    'kernel':       ['linear', 'rbf'],                   # precomputed,'poly', 'sigmoid'
    'degree':       np.arange( 0, 100+0, 1 ).tolist(),
    'gamma':        np.arange( 0.0, 10.0+0.0, 0.1 ).tolist(),
    'coef0':        np.arange( 0.0, 10.0+0.0, 0.1 ).tolist(),
    'shrinking':    [True],
    'probability':  [False],
    'tol':          np.arange( 0.001, 0.01+0.001, 0.001 ).tolist(),
    'cache_size':   [2000],
    'class_weight': [None],
    'verbose':      [False],
    'max_iter':     [-1],
    'random_state': [None],
    }

model = grid_search.RandomizedSearchCV( n_iter              = 500,
                                        estimator           = svm.SVC(),
                                        param_distributions = parameters,
                                        n_jobs              = 4,
                                        iid                 = True,
                                        refit               = True,
                                        cv                  = 5,
                                        verbose             = 1,
                                        pre_dispatch        = '2*n_jobs'
                                        )         # scoring = 'accuracy'
model.fit( train_X, train_Y )
print( model.best_estimator_ )
print( model.best_score_ )
print( model.best_params_ )

Antworten auf die Frage(2)

Ihre Antwort auf die Frage