Tam*_*rie 2 python scipy forecasting
我使用scipy.signal.detrend中的以下代码对 python 中的数据进行去趋势处理
detrended =signal.detrend(feature, axis=-1, type='constant', bp=0, overwrite_data=True)
np.savetxt('constant detrend.csv', detrended, delimiter=',', fmt='%s')
Run Code Online (Sandbox Code Playgroud)
最后一行将数据保存到 csv 文件中,然后我重新加载该数据以运行一些模型。我发现我的随机森林模型在去趋势数据集上表现得非常好。
接下来将使用这个模型进行预测。然而,我有点不确定如何从去趋势数据集转移到我可以理解的更有意义的数据集。根据我的理解,去趋势消除了均值并对数据进行了标准化。但是,如果我进行预测,我需要能够看到预测的实际数字,而不是去趋势的数字。
有没有一种方法可以读取平均值并重新标准化以获得我可以解释的“有意义的数据集”。例如,我的数据集有一个降雨量变量。所以每个月我都可以看到下雨的次数。但是当我去趋势时,降雨量值不再是实际降雨量。当我做出预测时,我希望能够说本月降雨量为 200 毫米,但我的预测并没有告诉我这一点,因为数据已去趋势化。
任何帮助将不胜感激。
根据文档,detrend只需从数据中删除最小二乘线拟合即可。当您使用 时type='constant',它甚至更简单,因为它只是删除平均值:
如果,则仅减去数据
type == 'constant'的平均值。
源代码证实了这一点。检查输入后,整个计算在一行中完成(scipy/signal/signaltools.py,第 3261 行):
Run Code Online (Sandbox Code Playgroud)ret = data - np.expand_dims(np.mean(data, axis), axis)
获得减去平均值的最简单方法是手动执行计算,因为它非常简单。
mean = np.mean(feature, axis=-1, keepdims=True)
detrended = feature - mean
Run Code Online (Sandbox Code Playgroud)
您可以将平均值保存到文件中,或者用它做任何您想做的事情。要“重新趋势”,只需将平均值添加回来即可:
point = prediction + mean
Run Code Online (Sandbox Code Playgroud)
如果您担心其他一些操作,例如标准化到最大值,您可以以同样的方式处理它。
max = np.amax(detrended, axis=-1, keepdims=True)
detrended /= max
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您必须在抵消重新趋势之前进行乘法:
point = prediction * max + mean
Run Code Online (Sandbox Code Playgroud)
像这样的简单操作很容易用手重现。更复杂的函数可能难以可靠地重现,但也更有可能返回它使用的参数,至少是可选的。