我正在尝试测试ARMA模型,并通过此处提供的示例进行工作:
http://www.statsmodels.org/dev/examples/notebooks/generated/tsa_arma_0.html
我无法告诉您是否存在直接的方法来在训练数据集上训练模型然后在测试数据集上对其进行测试。在我看来,您必须使模型适合整个数据集。然后,您可以进行样本内预测,该预测使用与训练模型时相同的数据集。或者,您可以进行样本外预测,但这必须从训练数据集的末尾开始。相反,我想做的是将模型拟合到训练数据集上,然后在不属于训练数据集的完全不同的数据集上运行模型,并获得一系列提前1步的预测。
为了说明这个问题,这里是上面链接的缩写代码。您会看到模型拟合了1700-2008年的数据,然后预测了1990-2012年。我的问题是1990-2008年已经是用于拟合模型的数据的一部分,所以我认为我正在预测和训练相同的数据。我希望能够获得一系列没有前瞻性偏差的第一步预测。
import numpy as np
import matplotlib.pyplot as plt
import statsmodels.api as sm
dta = sm.datasets.sunspots.load_pandas().data
dta.index = pandas.Index(sm.tsa.datetools.dates_from_range('1700', '2008'))
dta = dta.drop('YEAR',1)
arma_mod30 = sm.tsa.ARMA(dta, (3, 0)).fit(disp=False)
predict_sunspots = arma_mod30.predict('1990', '2012', dynamic=True)
fig, ax = plt.subplots(figsize=(12, 8))
ax = dta.ix['1950':].plot(ax=ax)
fig = arma_mod30.plot_predict('1990', '2012', dynamic=True, ax=ax, plot_insample=False)
plt.show()
Run Code Online (Sandbox Code Playgroud)
我正在研究用于序列到序列模型的 Keras 示例。
https://github.com/keras-team/keras/blob/master/examples/lstm_seq2seq.py
在此示例中,他们从输入张量构建模型。
encoder_inputs = Input(shape=(None, num_encoder_tokens))
model = Model([encoder_inputs, decoder_inputs], decoder_outputs)
print(encoder_inputs)
Run Code Online (Sandbox Code Playgroud)
输出:
Tensor("input_1:0", shape=(?, ?, 71), dtype=float32)
Run Code Online (Sandbox Code Playgroud)
一旦建立了模型,有没有办法从模型中检索输入张量?类似的东西
encoder_inputs = model.layers[0].??????
Run Code Online (Sandbox Code Playgroud) 我试图使用 Seaborn 绘制相关矩阵,但我想用红色突出正负极值,用绿色突出中间值。在我能找到的所有示例中,相关矩阵是用 diverging_palette 绘制的,但这仅允许您为光谱的末端选择两种颜色,并为中间选择浅色(白色)或深色(黑色)值。在 StackOverflow 和其他网站上搜索后,我无法找到解决方案,所以我发布了我找到的解决方案。
以下是来自 Seaborn 的示例:
https://seaborn.pydata.org/examples/many_pairwise_correlations.html https://seaborn.pydata.org/generated/seaborn.heatmap.html
这是生成下面图以说明问题的代码。我正在寻找的是绿色是 0 值,红色是正值和负值。
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
np.random.seed(5)
df = pd.DataFrame(np.random.randn(5,5))
# Generate a custom diverging colormap
cmap = sns.diverging_palette(133, 10, as_cmap=True)
with sns.axes_style("white"):
ax = sns.heatmap(df, annot=True, fmt='.2f', cmap=cmap, vmin=-0.99, vmax=.99, center=0.00,
square=True, linewidths=.5, annot_kws={"size": 8}, cbar_kws={"shrink": .5})
plt.show()
Run Code Online (Sandbox Code Playgroud)
我想扩展一下何时重置状态的问题。
假设我这样训练一个有状态模型:
for i in range(epochs):
model.fit(X_train, y_train, epochs=1, batch_size=1, shuffle=False)
model.reset_states()
Run Code Online (Sandbox Code Playgroud)
我的训练和测试集来自一个时间序列数据集,而测试集紧随训练集之后。
接下来,我要评估测试集并获得一组预测。
score = model.evaluate(X_test, y_test, batch_size=1, verbose=True)
prediction = model.predict(X_test, batch_size=1)
Run Code Online (Sandbox Code Playgroud)
我感觉好像在训练循环结束时重置模型状态会导致评估或预测步骤错误,至少在集合开始时会出错。是这样吗?如果数据依序继续进入测试集中,是否应该不重置最后一个时期的状态?
此外,在对测试集进行评估之后,是否需要将模型的状态恢复到训练集结束时的状态,然后才能尝试进行预测?我应该复制模型吗?保存并重新加载吗?