首页 > 解决方案 > Python make_scorer 为均方根对数误差提供不正确的输出

问题描述

我想生成一个网格搜索,我需要scoring基于该参数进行搜索的参数。我已经定义了以下函数来为我提供一个Root Mean Squared Logarithmic Error. 但我觉得得分手认为更大的值是一个更好的分数,而它应该认为较低的值是更好的分数。如果我定义了正确的得分手,请告诉我。

RMSLE 函数

def score_func(y_true, y_pred, **kwargs):
  y_true = np.abs(y_true)
  y_pred = np.abs(y_pred)

  return np.sqrt(mean_squared_log_error(y_true, y_pred))

scorer = make_scorer(score_func)

我必须np.abs在上面的代码中使用,否则它会给出一个错误,即当 Target 具有负值时无法使用 RMSLE。

标签: pythonnumpymachine-learningscikit-learn

解决方案


干得好:

import math

#Function to calculate Root Mean Squared Logarithmic Error (RMSLE)
def rmsle(y, y_pred):
    assert len(y) == len(y_pred)
    terms_to_sum = [(math.log(y_pred[i] + 1) - math.log(y[i] + 1)) ** 2.0 for i,pred in enumerate(y_pred)]
    return (sum(terms_to_sum) * (1.0/len(y))) ** 0.5

推荐阅读