【问题标题】:RMSE calculation in un-logged space using cross validation when target is logged记录目标时使用交叉验证在未记录空间中计算 RMSE
【发布时间】:2017-12-18 12:56:34
【问题描述】:

我是 python 新手,在记录目标时面临通过交叉验证计算 RMSE 的困难。

我已经通过以下方式定义了 RMSE 函数(当没有记录目标时):

def rmse_cv(model):
rmse= np.sqrt(-cross_val_score(model, X_train_s, Y_train,  scoring="neg_mean_squared_error", cv = 5))
return(rmse)

model_ridge = Ridge()
alphas = [0.005, 0.05, 0.1, 0.3, 1, 3, 5, 10, 15]
cv_ridge = [rmse_cv(Ridge(alpha = alpha)).mean() for alpha in alphas]
print(cv_ridge)

现在,我想用记录的目标 Y_log_train 替换 Y_train 并计算未记录空间中的 RMSE。在进行交叉验证时,我不确定如何执行此操作。

如果我必须为一个 alpha 值运行模型并获得训练数据的 RMSE,我将按照以下步骤操作:

model_ridge = Ridge(alpha =10).fit(X_train_s, Y_log_train)
y_pred_log_r = model_ridge.predict(X_train_s)
y_pred_r = np.exp(y_pred_log_r)

RMSE_ridge_train =np.sqrt(mean_squared_error(Y_train, y_pred_r))

【问题讨论】:

    标签: python scikit-learn regression prediction cross-validation


    【解决方案1】:

    好吧,您只需获得日志值的 RMSE。您不能说对数值与您的观察值的残差是真实值和您的观察值的残差的对数。

    如果您记录转换变量,则 RMSE 就是转换后变量的 RMSE。

    编辑:发现这个来澄清一点https://stats.stackexchange.com/questions/56658/how-do-you-interpret-rmsle-root-mean-squared-logarithmic-error

    【讨论】:

    • 我想知道是否必须在已登录和未登录的目标上比较基于 RMSE 的模型集,我该怎么做?不过感谢您的回复!
    • 同样的计算。一种使用y1 = x,另一种使用y2 = z,其中z = log(x)。然后,您将计算 y1y2 的 RMSE 并进行比较。
    • 我这样做了,但值无法比较。它们非常不同。实际上,我尝试使用我的问题中提到的两种方法来查看 alpha = 10 的 RMSE 值是否相同,但它们是不同的。这就是我寻找正确建议的原因。
    • 正确,因为 RMSE 具有您测量误差的变量的单位。如果我有 5 美元的误差,我的 RMSE 将以美元计,如果我有 10 磅的误差,我的 RMSE 将以磅为单位所以因为您的新单位是 log(旧单位),所以您的 RMSE 将以您的新单位为单位..
    猜你喜欢
    • 2018-10-02
    • 2021-11-24
    • 2015-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    相关资源
    最近更新 更多