我正在尝试使用自定义评分函数,该函数使用基本事实和 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
与需要概率的自定义函数一起使用。