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

时间:2016-10-27 12:29:21

标签: python scikit-learn grid-search

我在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()是准确度的平均值?
  • 我如何加入自己的评分功能?在文档中,它用"记分员(estimator,X,y)"表示。我从哪里得到X和Y?他们是交叉验证的培训和测试集吗?它们可以访问吗?
  • 是否可以获得交叉验证的每个折叠的所有值?默认情况下,k = 3折,因此我希望每个参数组合的平均值和精度都是三倍。

1 个答案:

答案 0 :(得分: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