【问题标题】:Basic Sklearn: How to Pass Scoring Function to Fit Method基本 Sklearn:如何将评分函数传递给拟合方法
【发布时间】:2018-08-18 12:11:01
【问题描述】:

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

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

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

我应该怎么做?

谢谢!

【问题讨论】:

标签: python scikit-learn


【解决方案1】:

我通常使用Pipeline 来执行此操作。您可以创建管道列表,包括 SVR 模型(以及其他如果您愿意)。然后,您可以应用GridSearchCVpipeline 作为您的论点。

在这里,您可以添加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')

希望这会有所帮助!

【讨论】:

  • 谢谢!那么当你调用gridsearch_model.fit(X_train, y_train)时,是不是用neg_mean_squared_error训练模型?
  • 是的,我相信!
  • 太棒了!所以没有通用的评分功能可以传递给 fit 吗?我在LinearRegressionsvm.SVR 等的任何文档中都没有看到它。看起来很疯狂!不要以为我应该做 GridSearchCV 只是为了说明我希望如何计算损失......
  • 啊,我明白了。所以你只想计算neg_mean_squared_error 。我猜cross_val_score 也实现了?让我快速检查
猜你喜欢
  • 2018-03-18
  • 2016-12-10
  • 2020-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多