我得到了非常高的RMSE和MAE的MLPRegressor,森林回归和线性回归只有输入变量规模(30,000+),但当我规模的目标值以及我得到RMSE(0.2),我想知道如果这是可以接受的事情。其次,测试的R平方值更好是否正常(即,训练的R平方值为0.98和0.85)谢谢您
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之类的技术来找到最佳设置。仅看这一个案例,很难说上述值是否可接受。
qfe3c7zg2#
实际上,在许多情况下,调整目标值是一种常见的做法。例如,如果对一个高度倾斜的目标应用log或log1p变换,可能会得到更好的结果。我不知道您的数据的特征,但可能有一个变换会降低您的RMSE。其次,测试集是一个不可见数据的样本,用于对模型的性能进行最终估计。当您看到不可见数据并对其进行调整以提高性能时,它将成为交叉验证集。您应该尝试将数据分成三个部分:训练、交叉验证和测试集。训练数据并根据交叉验证的性能调整参数,然后在调整完成后,在测试集上运行数据,以预测它如何处理不可见的数据,并将其标记为模型的准确性。
log
log1p
2条答案
按热度按时间j5fpnvbx1#
回答你的第一个问题,我认为你被你选择用来评估模型的性能指标欺骗了。RMSE和MAE对你测量目标变量的范围很敏感,如果你要缩小目标变量,那么RMSE和MAE的值肯定会下降,让我们举一个例子来说明这一点。
我已经编写了两个函数来计算RMSE和MAE,现在让我们插入一些值,看看会发生什么,
现在我们假设真实值和预测值如上所示,现在我们准备计算这些数据的RMSE和MAE。
现在,让我们将目标变量缩小10倍,然后再次计算相同的度量。
我们现在可以很清楚地看到,仅仅通过缩放目标变量,我们的RMSE和MAE得分就下降了,这给人一种我们的模型得到了改进的错觉,但实际上并没有,当我们缩小模型的预测值时,我们仍然处于同样的状态。
因此,MAPE(平均绝对百分比误差)可能是衡量模型性能的更好方法,它对变量的衡量尺度不敏感。如果您计算两组值的MAPE,我们会看到它们是相同的,
因此,如果您希望您的性能度量独立于度量它们的尺度,那么最好是依赖MAPE而不是MAE或RMSE。
回答您的第二个问题,由于您要处理一些复杂的模型,如MLPRegressor和ForestRegression,它们具有一些需要调整以避免过度拟合的超参数,因此找到超参数的理想级别的最佳方法是将数据划分为train、并使用K-Fold Cross Validation之类的技术来找到最佳设置。仅看这一个案例,很难说上述值是否可接受。
qfe3c7zg2#
实际上,在许多情况下,调整目标值是一种常见的做法。
例如,如果对一个高度倾斜的目标应用
log
或log1p
变换,可能会得到更好的结果。我不知道您的数据的特征,但可能有一个变换会降低您的RMSE。其次,测试集是一个不可见数据的样本,用于对模型的性能进行最终估计。当您看到不可见数据并对其进行调整以提高性能时,它将成为交叉验证集。
您应该尝试将数据分成三个部分:训练、交叉验证和测试集。训练数据并根据交叉验证的性能调整参数,然后在调整完成后,在测试集上运行数据,以预测它如何处理不可见的数据,并将其标记为模型的准确性。