比较MinMaxScaled预测和目标与重新缩放的预测和目标时的相对误差差异

我正在运行一个深度学习模型,需要对数据集进行缩放。我使用了scikit-learnMinMaxScaler。在进行预测后,如果我将预测与目标列进行比较,会得到一定的相对误差。但是,如果我重新缩放数据集和预测,相对误差会大幅增加。

作为参考,这不是一个好的模型,使用缩放后的数据集时的误差约为40%,而当我重新缩放时,误差会跳到60%以上。我计算相对误差的方式如下:

def calculate_error(prediction, y):    rel_error = 2 * np.absolute(y - prediction) / (np.absolute(y) + np.absolute(prediction))        return rel_error

从中我使用numpymean()std()函数来计算均值和标准差。一个例子如下:

predicted_scaled = [0.26652822, 0.2384195, 0.26829958, 0.25697553, 0.28840747]real_scaled = [0.16201117, 0.37243948, 0.42085661, 0.49534451, 0.23649907]rel_error.mean() = 44.02%rel_error.std() = 14.03%---predicted_rescaled = [12.012565, 10.503127, 12.107687, 11.499586, 13.187481]real_rescaled = [6.4, 17.7, 20.3, 24.3, 10.4]rel_error.mean() = 51.54%rel_error.std() = 17.8%

为什么会发生这种情况?我如何防止这种情况?此外,正确的误差是哪个:是比较缩放后的预测和目标的误差,还是我重新缩放后的误差?


回答:

这是因为你在min/max缩放器中的最小值改变了你模型分布的形状。让我们举一个单一数据点的例子,pred=0.6, true=0.8

让我们根据这个点在不缩放的情况下计算误差:

error = 2*|0.6-0.8|/ (1.4)error = 2/7 = 0.28

现在我们可以根据一个(随机选择的)缩放器计算这个缩放后的误差,其最小值为2.2,最大值为10.1:

error = 2*|6.94-8.52|/(16.46)error = 0.19

所以,这不是代码中的错误,而是因为你在计算两个不同分布之间的相对误差,这将导致不同的值!

至于哪个是“正确”的结果要展示,我建议这取决于你在讨论什么。如果你在传达实际结果,我建议你使用重新缩放后的结果。如果你在传达模型性能,那么两者都可以。

此外,我认为对输出/输入进行缩放很重要,因为模型通常在缩放后的输出/输入上学习得更好(例如,在输出层使用sigmoid或tanh函数进行缩放)。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注