Я пытаюсь ускорить процесс GridSearchCV (для настройки параметров RBF-функции) в Python. Это, однако, длится вечно. У меня умеренно малый набор данных (размеры 600 x 8), поэтому я не думаю, что размерность является проблемой.
Я слышал о BaggingRegressors в этом сообщении: сделать SVM быстрее в python, но я не могу заставить его работать для регрессии с GridSearchCV.
Следующий фрагмент кода работает, но для вычисления требуется очень много времени.
parameters = {'epsilon': np.arange(0.1, 1.0, 0.01) ,'C': 2.0 **
np.arange(-2, 9), 'gamma': np.arange(0.1, 1.0, 0.01)}
svc = SVR(kernel='rbf')
clf = GridSearchCV(svc, parameters)
clf.fit(X_train, y_train)
Итак, я попытался ускорить это следующим образом:
parameters = {'epsilon': np.arange(0.1, 1.0, 0.01) ,'C': 2.0 **
np.arange(-2, 9), 'gamma': np.arange(0.1, 1.0, 0.01)}
svc = SVR(kernel='rbf')
clf = GridSearchCV(svc, parameters)
clf = BaggingRegressor(clf)
clf.fit(X_train, y_train)
Но это не ускоряет процесс.
Боюсь, я не совсем понимаю, как работает BaggingRegressor, поэтому, если у кого-то есть некоторые идеи, пожалуйста, дайте мне знать!
Это не имеет ничего общего с SVR
или BagginRegressor
как алгоритмом, а просто сетью параметров, которую вы используете. Нет необходимости в таком небольшом размере шага для epsilon
и gamma
.
>>> len(np.arange(0.1, 1.0, 0.01))
90
Таким образом, вы охватываете сетку 90 * 90 * 11 = 89100. Поэтому, даже если вы классифицируете/регрессор занимает всего одну секунду, чтобы тренироваться, вам нужно подождать более 24 часов! Просто выполняйте более мелкие шаги (например, 0,1), поскольку результаты не так чувствительны. Если есть область (например, меньший эпсилон), вы можете рассматривать некие геометрические ряды вместо линейных возрастающих значений).
Я бы предложил использовать RandomSearchCv. Кроме того, временное потребление SVM экспоненциально возрастает с огромными наборами данных