gs_clf = GridSearchCV(SVC(probability=False, class_weight='balanced', max_iter=100, random_state=2018, tol=1e-10),
param_grid={'C': [2, 5, 10] , 'kernel': 'linear'},
n_jobs=1,
refit=False,
cv=2,
scoring='f1_weighted',
verbose=1)
gs_clf.fit(X, y)
Так я использовал Gridsearch с SVC для подгонки данных.По сути, я настраиваю количество строк точек данных и количество меток на случайные обучающие данные и записываю потребление времени.Теоретически, кажется, SVC
(не linearSVC
) с linear
ядром использует мультиклассовую реализацию OVO, а сложность вычислений составляет O (#samples * #class * iter).
Вот мои два вопроса.наткнулся:
- Кажется, Gridsearch проводит внутреннюю оптимизацию для классификации нескольких классов.Время обучения увеличивается линейно до
log(#label)
(примерно).В отличие от одиночной тренировки SVC, время увеличивается линейно до #label
.Что Gridsearch делает именно под капотом?
Время обучения линейно увеличивается как функция max_iter, когда количество меток мало, например,
#label=2
.Но это не тот случай, когда
#label
большой.Когда
#label=40
,
time(max_iter=200)
не так сильно отличается от
time(max_iter=400)
.Это происходит не только в gridsearch, но и в SVC.Я установил
tol
очень маленьким, надеясь, что подгонка всегда достигает максимума итераций, но, похоже, это не работаетКакой механизм стоит за этим?
Я использую sklearn == 0.18.1.Спасибо!