python-3.x 调整回归量的目标值是否可以接受?

ggazkfy8  于 2022-12-01  发布在  Python
关注(0)|答案(2)|浏览(209)

我得到了非常高的RMSE和MAE的MLPRegressor,森林回归和线性回归只有输入变量规模(30,000+),但当我规模的目标值以及我得到RMSE(0.2),我想知道如果这是可以接受的事情。
其次,测试的R平方值更好是否正常(即,训练的R平方值为0.98和0.85)
谢谢您

j5fpnvbx

j5fpnvbx1#

回答你的第一个问题,我认为你被你选择用来评估模型的性能指标欺骗了。RMSE和MAE对你测量目标变量的范围很敏感,如果你要缩小目标变量,那么RMSE和MAE的值肯定会下降,让我们举一个例子来说明这一点。

def rmse(y_true, y_pred):
    return np.sqrt(np.mean(np.square(y_true - y_pred)))

def mae(y_true, y_pred):
    return np.mean(np.abs(y_true - y_pred))

我已经编写了两个函数来计算RMSE和MAE,现在让我们插入一些值,看看会发生什么,

y_true = np.array([2,5,9,7,10,-5,-2,2])
y_pred = np.array([3,4,7,9,8,-3,-2,1])

现在我们假设真实值和预测值如上所示,现在我们准备计算这些数据的RMSE和MAE。

rmse(y_true,y_pred)
1.541103500742244

mae(y_true, y_pred)
1.375

现在,让我们将目标变量缩小10倍,然后再次计算相同的度量。

y_scaled_true = np.array([2,5,9,7,10,-5,-2,2])/10
y_scaled_pred = np.array([3,4,7,9,8,-3,-2,1])/10

rmse(y_scaled_true,y_scaled_pred)
0.15411035007422444

mae(y_scaled_true,y_scaled_pred)
0.1375

我们现在可以很清楚地看到,仅仅通过缩放目标变量,我们的RMSE和MAE得分就下降了,这给人一种我们的模型得到了改进的错觉,但实际上并没有,当我们缩小模型的预测值时,我们仍然处于同样的状态。
因此,MAPE(平均绝对百分比误差)可能是衡量模型性能的更好方法,它对变量的衡量尺度不敏感。如果您计算两组值的MAPE,我们会看到它们是相同的,

def mape(y, y_pred):
    return np.mean(np.abs((y - y_pred)/y))

mape(y_true,y_pred)
0.28849206349206347
    
mape(y_scaled_true,y_scaled_pred)
0.2884920634920635

因此,如果您希望您的性能度量独立于度量它们的尺度,那么最好是依赖MAPE而不是MAE或RMSE。
回答您的第二个问题,由于您要处理一些复杂的模型,如MLPRegressor和ForestRegression,它们具有一些需要调整以避免过度拟合的超参数,因此找到超参数的理想级别的最佳方法是将数据划分为train、并使用K-Fold Cross Validation之类的技术来找到最佳设置。仅看这一个案例,很难说上述值是否可接受。

qfe3c7zg

qfe3c7zg2#

实际上,在许多情况下,调整目标值是一种常见的做法。
例如,如果对一个高度倾斜的目标应用loglog1p变换,可能会得到更好的结果。我不知道您的数据的特征,但可能有一个变换会降低您的RMSE。
其次,测试集是一个不可见数据的样本,用于对模型的性能进行最终估计。当您看到不可见数据并对其进行调整以提高性能时,它将成为交叉验证集。
您应该尝试将数据分成三个部分:训练、交叉验证和测试集。训练数据并根据交叉验证的性能调整参数,然后在调整完成后,在测试集上运行数据,以预测它如何处理不可见的数据,并将其标记为模型的准确性。

相关问题