从scikit-learn中列出GridSearchCV中每个折叠的精度和平均值



我正在scikit-learn, Python3中对我的模型进行网格搜索,有两个参数集a和b。代码看起来像这样:

parameterA = ['a', 'b']
parameterB = np.array([10, 100])
param_grid = dict(parameterA=parameterA, parameterB=parameterB)
model = buildModel()
grid = GridSearchCV(model, param_grid, scoring="accuracy")
grid_result = grid.fit(X, Y)
for parameters, scores in grid_result.grid_scores_:
    print("Mean: " + scores.mean())
    print("Parameters: " + parameters)
  • 我是否理解正确,score.mean()是准确率的平均值?
  • 我怎么能把我自己的评分功能?在文档中,它说"scorer(estimator, X, y)"。我从哪里得到X和y ?它们不是交叉验证的训练和测试集吗?它们容易接近吗?
  • 是否有可能获得每个交叉验证折叠的所有这些值?默认情况下,有k=3次折叠,所以我期望每个参数组合的平均值和精度为三倍。

首先,您不应该再使用grid_scores_,因为它在0.18版本中已被弃用,而支持cv_results_属性。从0.20版本开始,grid_scores_属性将不可用


: 我是否理解正确,score.mean()是精度的平均值?

A:属性cv_results_实际上返回您正在查找的所有指标的字典。看看这个:cv_result_ .


: 是否有可能获得交叉验证的每个折叠的所有这些值?默认情况下,有k=3次折叠,所以我期望每个参数组合的平均值和精度为三倍。

A:是的,实际上您需要使用属性verboseverbose必须是一个整数,它控制冗长:越高,消息越多。例如,您可以设置verbose=3


: 如何放入自己的评分函数?

A:在定义了损失函数之后使用make_scorer。您的损失函数必须具有以下签名:score_func(y, y_pred, **kwargs)。一个基本的损失函数可以是分类良好的样本与总样本数量的比率(你可以想象任何一种能让你很好地了解分类器性能的指标)。

你可以这样做:

def my_loss_func(y, y_pred):
    return np.sum(y == y_pred)/float(len(y_pred))
my_scorer = make_scorer(my_loss_func, greater_is_better=True)

然后你可以在GridSearch中使用scorer

相关内容

  • 没有找到相关文章

最新更新