基本Sklearn:如何通过评分函数来拟合方法

时间:2018-03-09 20:48:28

标签: python scikit-learn

我正在使用sklearn进行一些机器学习。我经常使用GridSearchCV来探索超参数并执行交叉验证。使用这个,我可以指定一个scoring函数,如下所示:

scores = -cross_val_score(svr, X, Y, cv=10, scoring='neg_mean_squared_error')

但是,我想使用均方误差训练我的SVR模型。不幸的是,scoringSVR方法的构造函数中没有fit参数。

我该怎么做?

谢谢!

1 个答案:

答案 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')

希望这有帮助!