【问题标题】:Creating scorer for Brier Score Loss in scikit-learn在 scikit-learn 中为 Brier Score Loss 创建记分器
【发布时间】:2015-06-22 06:22:39
【问题描述】:

我正在尝试将 scikit-learn (0.16.1) 中的 GridSearchCV 和 RandomizedSearchCV 用于逻辑回归和随机森林分类器(可能还有其他分类器)来解决二元类问题。我设法让 GridSearchCV 与标准 LogisticRegression 分类器一起工作,但我无法让 LogisticRegressionCV 与自定义评分函数一起工作(或 RandomizedGridCV 用于 RandomForestClassifier),特别是 brier_score_loss。我试过这段代码:

lrcv = LogisticRegressionCV(scoring = make_scorer(brier_score_loss, greater_is_better=False, needs_proba=True, needs_threshold=False, pos_label=1))
lrcv_clf = lrcv.fit(X=X_train,y=y_train)

但我不断收到错误,这些错误本质上是说 brier_score_loss 函数正在接收具有 2 列的输入 (y_prob),从而导致错误(输入形状错误)。有没有办法指定只使用 y_prob (lrcv.predict_proba) 的第二列,以便可以通过这种方式计算 Brier 分数?我认为 pos_label 可能会有所帮助,但显然没有。我是否需要避免 make_scorer 而只创建自己的评分函数?

感谢您的任何建议!

【问题讨论】:

    标签: python scikit-learn


    【解决方案1】:

    predict_proba 为每个预测的y 值返回两个概率,第一个大约是 0,第二个大约是 1。您应该选择您需要的一项并将其进一步传递给评分功能。
    我正在使用简单的代理功能:

    def ProbaScoreProxy(y_true, y_probs, class_idx, proxied_func, **kwargs):
        return proxied_func(y_true, y_probs[:, class_idx], **kwargs)
    

    可以这样使用:

    scorer = metrics.make_scorer(ProbaScoreProxy, greater_is_better=False, needs_proba=True, class_idx=1, proxied_func=metrics.brier_score_loss)
    

    对于二元分类,class_idx 可以是 0 或 1。

    【讨论】:

    • 为什么我会得到负值?使用 GridSearchCV 和 RandomizedSearchCV 以及 cross_val_score?似乎最好的价值是较低的负值.... @arabesc
    • @Javiss 我的 brier 分数也得到了负值。你知道发生了什么吗?
    猜你喜欢
    • 2015-11-30
    • 2015-12-17
    • 2015-08-16
    • 2020-09-04
    • 2015-05-09
    • 2018-05-14
    • 1970-01-01
    相关资源
    最近更新 更多