我正在使用sklearn
进行一些机器学习。我经常使用GridSearchCV
来探索超参数并执行交叉验证。使用这个,我可以指定一个scoring
函数,如下所示:
scores = -cross_val_score(svr, X, Y, cv=10, scoring='neg_mean_squared_error')
但是,我想使用均方误差训练我的SVR
模型。不幸的是,scoring
或SVR
方法的构造函数中没有fit
参数。
我该怎么做?
谢谢!
答案 0 :(得分:0)
我通常使用Pipeline
来执行此操作。您可以创建包括SVR
模型的管道列表(如果需要,还可以创建其他管道)。然后,您可以将GridSearchCV
作为参数应用于pipeline
。
在这里,您可以添加params_grid
,其中搜索空间可以定义为pipelinename__paramname
(中间有两个下划线)。例如,我有管道名称svr
,我想搜索参数C
,我可以将密钥放在我的参数字典中svr__C
。
from sklearn.pipeline import Pipeline
from sklearn.model_selection import cross_val_score, GridSearchCV
from sklearn.svm import SVR
c_range = np.arange(1, 10, 1)
pipeline = Pipeline([('svr', SVR())])
params_grid = {'svr__C': c_range}
# grid search with 3-fold cross validation
gridsearch_model = GridSearchCV(pipeline, params_grid,
cv=3, scoring='neg_mean_squared_error')
然后,您可以通过拟合训练数据并找到最佳得分和参数来执行相同的步骤
gridsearch_model.fit(X_train, y_train)
print(gridsearch_model.best_params_, gridsearch_model.best_score_)
您还可以使用cross_val_score
查找分数:
cross_val_score(gridsearch_model, X_train, y_train,
cv=3, scoring='neg_mean_squared_error')
希望这有帮助!