¿Cuál es un buen rango de valores para los hiperparámetros svm.SVC () que se explorarán a través de GridSearchCV ()?

Me encuentro con el problema de que los hiperparámetros de misvm.SVC() son demasiado anchas para que elGridSearchCV() nunca se completa! Una idea es usarRandomizedSearchCV() en lugar. Pero, de nuevo, mi conjunto de datos es relativamente grande, de modo que 500 iteraciones tardan aproximadamente 1 hora.

Mi pregunta es, ¿cuál es una buena configuración (en términos del rango de valores para cada hiperparámetro) en GridSearchCV (o RandomizedSearchCV) para detener el desperdicio de recursos?

En otras palabras, cómo decidir si p. Ej.C los valores superiores a 100 tienen sentido y / o el paso 1 no es ni grande ni pequeño? Cualquier ayuda es muy apreciada. Esta es la configuración que estoy usando actualmente:

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_ )

Respuestas a la pregunta(2)

Su respuesta a la pregunta