python - 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。
解决方案
干得好:
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
推荐阅读
- php - 无法获取存储在 MySQL 数据库中的信息
- javascript - 在图表中添加第二条线
- javascript - Node.js 中每个模块的格式是什么?
- android - 安卓:java.lang.IllegalThreadStateException
- php - SQL - ORDER BY 未正确读取位置
- java - 从数据模型访问兄弟数据
- android - 如何在 gradle (android-studio) 中获取 shamsi 日期 [波斯日历]
- android - 用户位置分享
- javascript - 如何使此部分背景响应?
- jmeter - jmeter可以获取参数吗?