我正在尝试使用自定义评分函数来计算具有ground truth和predict_proba y数组的多类日志丢失。有没有办法让GridSearchCV使用这种评分功能?使用自定义分数函数时,GridSearchCV可以使用predict_proba吗?
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 with greater_is_better = False,并尝试使用loss_func参数,但它似乎仍然使用.predict方法。我怎样才能解决这个问题?
更新 - 如果我设置needs_threshold = True我得到一个多类错误。我正确地理解这种情况下不支持多类吗?如果是的话,有人可以提出解决方法吗?
谢谢。
你可以简单地使用''scoring =“log_loss”''并且不需要打扰所有这些。不过,应该在这里支持多类。 –
谢谢安德烈亚斯。我没有看到log_loss作为文档中的得分选项,所以并不认为它是内置的。但是知道这很棒!虽然我无法使用多种类来使用自定义函数。在制作记分员时,我们是否通过说need_threshold = true来打开predict_proba? – shankarmsy
是的。所有内置损失函数的列表在这里:http://scikit-learn.org/dev/modules/model_evaluation.html#common-cases-predefined-values –