GridSearchCV:为Class = 1指定F1分数(更新:Make_Scorer)

时间:2016-12-02 21:24:39

标签: python grid-search

编辑:感谢Chinny,我将稍微改变一下我的问题:

上下文:我正在处理一组带有二进制目标变量的数据。 1只占数据的10%,所以虽然我在使用GridSearchCV时使用了一些技术(例如下采样),但我只想对第1类的指标进行评分。

例如,我的最佳模型可能被选为0级的098召回和1级的0.28召回,整体为0.91,因为Class 0的数量超过Class 1的数量如此之多。

我更愿意选择0.93召回0级,1级0.58和整体召回0.85的模型。

以下是我的设置的一个简单示例:

    param_grid = {'n_estimators':[100,200,300,400],
       'random_state':[1]}

    extra_tree_Grid = GridSearchCV(et, param_grid, cv = 5, scoring = "f1",   
    refit = True, n_jobs=2, verbose = 5)
    extra_tree_Grid.fit(X_train_new, y_train_new.ravel())

Chinny84建议我查看" make_scorer"功能,我玩了一下这一点,但如果我刚刚使用" f1"我会得到相同的输出。或者"召回"已存在的GridSearchCV评分参数。

或者,我收到错误。这是我想要的一个例子(实际上没有编码)

    from sklearn.metrics import f1_score, recall_score, make_scorer

    def custom_recall(y_true, y_pred):
        'filter for class 1 for both y_true and y_pred' 
        'target_accuracy = (y_pred Class 1 & are Class 1) / y_true Class 1'
        return target_accuracy

    my_scorer = make_scorer(custom_recall)

我认为我可以从指标中提取特定类别"召回"存在,在这种情况下,我想要拉出那些1级的,但我在如何设置这一点时变得非常迷失。

1 个答案:

答案 0 :(得分:1)

虽然sklearn图书馆中可能存在评分功能,但您可以自己创建自己的得分手(假设您的基本模型允许这样的功能)。

从sklearn看看这个方法 - make_scorer