代码之家  ›  专栏  ›  技术社区  ›  ste

将来自scikit learn的GridSearchCV中每个折叠的精度和平均值制成表格

  •  3
  • ste  · 技术社区  · 8 年前

    我在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)
    
    • 我是否正确理解了,分数。mean()是精度的平均值?
    • 如何设置自己的评分功能?在文档中,它用“记分器(估计量,X,y)”表示。我从哪里得到X和y?它们不是交叉验证的训练和测试集吗?它们是可访问的吗?
    • 有可能获得所有这些值吗 交叉验证的折叠?默认情况下,有k=3倍,因此我希望每个参数组合的平均值和精度是三倍。
    1 回复  |  直到 8 年前
        1
  •  4
  •   MMF    8 年前

    首先,您不应该使用 grid_scores_ 不再使用,因为它在版本中已被弃用 0.18 赞成 cv_results_ 属性这个 grid_scores_ 属性在版本中不可用 0.20 .


    : 我是否正确理解了,分数。mean()是精度的平均值?

    A. :属性 cv_结果_ 实际上返回您正在寻找的所有度量的字典。看看这个: cv_result_ .


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

    A. :是的,实际上您需要使用属性 verbose . 冗长的 必须是整数,它控制详细程度:越高,消息越多。例如,您可以设置 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)
    

    scorer 在您的GridSearch中。