2017-07-13 16 views
1

我是python的新手,并且遇到目标记录时通过交叉验证计算RMSE的困难。在记录目标时使用交叉验证的未记录空间中的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)) 

回答

0

那么,你只会有你的日志值的RMSE。你不能说对数值与观测值的残差是真值和观测值的残差的对数。

如果您记录变换您的变量,那么RMSE就是您的变换变量的RMSE。

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

+0

我想知道如果我有一个基于RMSE比较一套模型登录并未记录的目标,我会怎么做呢?尽管感谢您的回复! – user6200992

+0

这是相同的计算。一个使用'y1 = x',另一个使用'y2 = z',其中'z = log(x)'。然后,您将计算'y1'和'y2'的RMSE并进行比较。 – zfisher

+0

我做到了,但数值不具可比性。他们是非常不同的。事实上,我尝试使用两种方法来检查alpha = 10的RMSE值是否相同,在我的问题中提到但它们不同。这就是我寻找正确建议的原因。 – user6200992