scikit-learn GridSearchCV
The workhorse: pick a model, define a grid of hyperparameters, run k-fold CV across each combination, retrain the best on full data.
from sklearn.model_selection import GridSearchCV
gs = GridSearchCV(SVR(), {'C':[0.1,1,10], 'gamma':[0.01,0.1,1]}, cv=5)
gs.fit(X_train, y_train)
print(gs.best_params_, gs.best_score_)