Использование ранней остановки с помощью SVR и поиска по сетке

#python #scikit-learn #svm #machine-learning-model #early-stopping

#python #scikit-учиться #svm #модель машинного обучения #ранняя остановка

Вопрос:

Я пытаюсь использовать поиск по сетке с моей моделью SVR, и поскольку для подгонки требуется слишком много времени, мне интересно, могу ли я использовать раннюю остановку, но я не знаю, как это сделать. Вместо этого я использовал max_iter, но все еще не уверен в своих лучших параметрах. Есть предложения? Спасибо!

 #We can use a grid search to find the best parameters for this model. Lets try
#X_feat = F_DF.drop(columns=feat)
y = F_DF["Production_MW"]
X_train, X_test, y_train, y_test = train_test_split(X, y,test_size=0.2, random_state=42)
#Define a list of parameters for the models
params = {'C': [0.001, 0.01, 0.1, 1, 10, 100],
            'gamma': [0.001, 0.01, 0.1, 1, 10, 100],
          'epsilon': [0.001, 0.01, 0.1,  1,  10, 100]
         }

#searchcv.fit(X, y, callback=on_step)
#We can build Grid Search model using the above parameters. 
#cv=5 means cross validation with 5 folds
grid_search = GridSearchCV(SVR(kernel='rbf'), params, cv=5, n_jobs=-1,verbose=1)
grid_search.fit(X_train, y_train)

print("train score - "   str(grid_search.score(X_train, y_train)))
print("test score - "   str(grid_search.score(X_test, y_test)))

print("SVR GridSearch score: " str(grid_search.best_score_))
print("SVR GridSearch params: ")
print(grid_search.best_params_)
  

Комментарии:

1. Остановка на фиксированной максимальной итерации не была бы оптимальной, было бы лучше прекратить обучение, если модель не вносит никаких улучшений за определенное количество итераций. GradientBoostingClassifiers имеют это в качестве опции, но не SVR. Я бы посоветовал вам использовать RandomSearchCV или байесовский оптимизатор поверх GridSearchCV, поскольку он самый медленный из трех.

2. @yuRa спасибо, что объяснил мне, что именно то, что я ищу, — это остановить модель, если она не вносит улучшений, и я должен сделать это, к сожалению, с помощью SVR.

3. Это действительно зависит от того, что это за проблема, размер набора данных и сколько параметров вы хотите оптимизировать.

4. форма моего набора данных (419403 x 29), и я должен использовать все варианты svr (svr, nusvr, linearr svr) и svc (svc nusvc linear svc) для сравнения между ними. единственное решение, которое я нашел, — это исправить максимальную итерацию, которая работает для svr, но не для nusvr