GridSearchCV 在使用自定义评分函数时是否可以使用predict_proba



我正在尝试使用自定义评分函数,该函数使用基本事实和 y 数组计算多类对数损失predict_proba。有没有办法让GridSearchCV使用这个评分功能?

def multiclass_log_loss(y_true, y_pred):
Parameters
----------
y_true : array, shape = [n_samples]
        true class, intergers in [0, n_classes - 1)
y_pred : array, shape = [n_samples, n_classes]
Returns
-------
loss : float
"""
eps=1e-15
predictions = np.clip(y_pred, eps, 1 - eps)
# normalize row sums to 1
predictions /= predictions.sum(axis=1)[:, np.newaxis]
actual = np.zeros(y_pred.shape)
n_samples = actual.shape[0]
actual[np.arange(n_samples), y_true.astype(int)] = 1
vectsum = np.sum(actual * np.log(predictions))
loss = -1.0 / n_samples * vectsum
return loss

我看到有多种选择,score_func,loss_func和make_scorer。我尝试将make_scorer与 greater_is_better=False 一起使用,并尝试了 loss_func 参数,但它似乎仍然使用 .predict 方法。如何解决此问题?

更新 - 如果我设置 needs_threshold=True,我会收到多类错误。在这种情况下不支持多类是否正确?如果是,有人可以建议解决方法吗?

谢谢。

这个问题

的最高答案:通过sklearn.metrics.make_scorer将估算器传递到自定义分数函数

可能有你需要的东西。可以定义一个记分器,它将分类器clf、特征数组X和目标y_true作为参数,并将clf.predict_proba()方法的结果提供给返回错误的评分函数。作为提示,对于二元分类,您可能需要使用

clf.predict_proba(X)[:,1]

这符合我的需求(标准化的基尼分数)。出于某种原因,我无法让 sklearn 的metrics.make_scorer与需要概率的自定义函数一起使用。

相关内容

  • 没有找到相关文章

最新更新