我遇到了一个问题,我的svm.SVC()
的超参数范围太大了,以至于GridSearchCV()
永远无法完成!一个想法是改用RandomizedSearchCV()
。但是,我的数据集相对较大,500次迭代需要大约1小时时间!
我的问题是,在GridSearchCV(或RandomizedSearchCV)中,如何设置好超参数的值域范围,以便停止浪费资源?
换句话说,如何确定是否例如C
值超过100是有意义的,步长为1既不大也不小?非常感谢任何帮助。这是我目前正在使用的设置:
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_ )