- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个像这样的 df:
import numpy as np
import pandas as pd
import matplotlib.pylab as plt
np.random.seed(100)
data = np.random.rand(200,3)
df = pd.DataFrame(data)
df.columns = ['a', 'b', 'y']
df['y_roll'] = df['y'].rolling(10).mean()
df['y_roll_predicted'] = df['y_roll'].apply(lambda x: x + np.random.rand()/20)
在上面的代码中,我创建了一个随机的 pandas df
。然后使用rolling(10).mean()
对moving average
执行df['y']
并将其保存为df['y_roll']
。
df['y']
的情节如下: Improve this question
因为我的模型无法预测 df['y']
的锐边,所以我决定对其进行rolling.mean() 操作并尝试预测滚动数据 df['y_roll']
。现在我的模型能够预测 df['y_roll']
,它的名称是: df['y_roll_predicted']
。
如何对此预测列执行反向滚动操作,以便可以将其与 df['y']
值进行比较?
最佳答案
这和这个问题很有关系cumsum with shift of n我问。
使用此函数cumsum_shif(n)
(该问题提供了一个使用名为cumsum_shift的for循环的实现),您可以将移动平均值反转为取决于初始值的常数值无需反转矩阵,该矩阵的列数必须与原始序列的大小相同。
我们将移动平均线y_roll = df.loc[,"y_roll"]
和相反的y_estimated
称为常数。假设窗口大小为 10 win_size = 10
,那么如果将滚动平均值的 diff
'ed 乘以 10,然后将 cumumsum(shift=10)
如果您获得初始值的原始序列。代码:
def cumsum_shift(s, shift = 1, init_values = [0]):
s_cumsum = pd.Series(np.zeros(len(s)))
for i in range(shift):
s_cumsum.iloc[i] = init_values[i]
for i in range(shift,len(s)):
s_cumsum.iloc[i] = s_cumsum.iloc[i-shift] + s.iloc[i]
return s_cumsum
win_size = 10
s_diffed = win_size * df['y_roll'].diff()
df['y_unrolled'] = cumsum_shift(s=s_diffed, shift = win_size, init_values= df['y'].values[:win_size])
此代码从 y_roll
中准确恢复 y
,因为您拥有初始值。
你可以看到它绘制了它(在我的例子中是plotly),y
和y_unrolled
完全相同(只是红色的)。
现在对 y_roll_predicted
执行相同的操作以获得 y_predicted_unrolled
。
代码:
win_size = 10
s_diffed = win_size * df['y_roll_predicted'].diff()
df['y_predicted_unrolled'] = cumsum_shift(s=s_diffed, shift = win_size, init_values= df['y'].values[:win_size])
在这种情况下,结果并不完全相同,请注意初始值如何来自y
,然后y_roll_predicted
将噪声合并到y_roll
因此“展开”无法完全恢复原始状态。
关于python - 如何对预测值进行反向移动平均(在 pandas 中,rolling().mean)操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52456267/
我是一名优秀的程序员,十分优秀!