我想用R拟合某种多变量时间序列模型
以下是我的数据示例:
u cci bci cpi gdp dum1 dum2 dum3 dx
16.50 14.00 53.00 45.70 80.63 0 0 1 6.39
17.45 16.00 64.00 46.30 80.90 0 0 0 6.00
18.40 12.00 51.00 47.30 82.40 1 0 0 6.57
19.35 7.00 42.00 48.40 83.38 0 1 0 5.84
20.30 9.00 34.00 49.50 84.38 0 0 1 6.36
20.72 10.00 42.00 50.60 85.17 0 0 0 5.78
21.14 6.00 45.00 51.90 85.60 1 0 0 5.16
21.56 9.00 38.00 52.60 86.14 0 …Run Code Online (Sandbox Code Playgroud) 前言
我目前正在研究机器学习问题,我们的任务是使用过去的产品销售数据来预测未来的销售量(以便商店可以更好地计划他们的库存).我们基本上有时间序列数据,对于每一个产品,我们知道在哪几天销售了多少单位.我们还提供有关天气如何,是否有公众假期,是否有任何产品销售等信息.
我们已经能够使用具有密集层的MLP取得一些成功,并且仅使用滑动窗口方法来包括周围几天的销售量.但是,我们相信,通过LSTM等时间序列方法,我们将能够获得更好的结果.
数据
我们的数据基本如下:
(编辑:为清楚起见,上图中的"时间"列不正确.我们每天输入一次,而不是每月一次.但结构是相同的!)
所以X数据的形状如下:
(numProducts, numTimesteps, numFeatures) = (50 products, 1096 days, 90 features)
Run Code Online (Sandbox Code Playgroud)
并且Y数据的形状如下:
(numProducts, numTimesteps, numTargets) = (50 products, 1096 days, 3 binary targets)
Run Code Online (Sandbox Code Playgroud)
因此,我们有三年的数据(2014年,2015年,2016年),并希望对此进行培训,以便对2017年进行预测.(当然,这不是100%正确,因为我们实际上有数据截至2017年10月,但我们只是现在忽略它)
问题
我想在Keras建立一个LSTM,允许我做出这些预测.有几个地方我被卡住了.所以我有六个具体问题(我知道应该尝试将Stackoverflow帖子限制为一个问题,但这些问题都是交织在一起的).
首先,我如何为批次切割数据?由于我有三年的时间,所以只需按顺序推进三批,每次大小一年是否合理?或者更小的批次(比如30天)以及使用滑动窗口更有意义吗?也就是说,不是36个批次,每个30天,我使用36*6批次,每个30天,每次滑动5天?或者这不是真的应该使用LSTM的方式吗?(请注意,数据中存在相当多的季节性,我需要捕捉这种长期趋势).
其次,在这里使用 return_sequences=True是否有意义?换句话说,我保持我的Y数据是(50, 1096, 3)这样的(据我所知),每个时间步都有一个预测,可以针对目标数据计算损失?或者我会更好return_sequences=False,因此只有每批的最终价值用于评估损失(即如果使用年度批次,那么在2016年的产品1,我们评估2016年12月的价值(1,1,1)).
第三,我该如何处理50种不同的产品?它们是不同的,但仍然强相关,我们已经看到其他方法(例如具有简单时间窗的MLP),当所有产品被考虑在同一模型中时,结果更好.目前摆在桌面上的一些想法是:
第四,我如何处理验证数据?通常我会随机选择一个随机选择的样本进行验证,但在这里我们需要保持时间排序.所以我想最好只是暂时搁置几个月?
第五,这是我可能最不清楚的部分 - 我如何使用实际结果来执行预测?假设我使用return_sequences=False和训练了三年三次(每次都是11月),目标是训练模型以预测下一个值(2014年12月,2015年12月,2016年12月).如果我想在2017年使用这些结果,这实际上是如何工作的?如果我理解正确的话,我在这个例子中唯一可以做的就是为2017年1月到11月的所有数据点提供模型,它会给我回到2017年12月的预测.这是正确的吗?但是,如果我使用return_sequences=True,然后对截至2016年12月的所有数据进行培训,那么我是否能够通过给出模型在2017年1月观察到的特征来获得2017年1月的预测?或者我需要在2017年1月之前的12个月内给它吗?那么2017年2月,我是否需要在2017年之前再提供11个月的价值?(如果听起来我很困惑,那是因为我!)
最后,根据我应该使用的结构,我如何在Keras中这样做?我现在想到的是以下几点:(虽然这只适用于一种产品,因此不能解决所有产品都在同一型号中):
Keras代码
trainX = …Run Code Online (Sandbox Code Playgroud) 我想知道如何访问R对象中包含的各个字段.或者,更确切地说,如何让R告诉我如何.
例如,如果我运行以下代码:
dx.ct <- ur.df(dat1[,'dx'], lags=3, type='trend')
summary(dx.ct)
Run Code Online (Sandbox Code Playgroud)
然后我得到这个输出:
###############################################
# Augmented Dickey-Fuller Test Unit Root Test #
###############################################
Test regression trend
Call:
lm(formula = z.diff ~ z.lag.1 + 1 + tt + z.diff.lag)
Residuals:
Min 1Q Median 3Q Max
-0.46876 -0.24506 0.02420 0.15752 0.66688
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 1.099231 0.561377 1.958 0.0606 .
z.lag.1 -0.239438 0.141093 -1.697 0.1012
tt -0.019831 0.007799 -2.543 0.0170 *
z.diff.lag1 -0.306326 0.193001 -1.587 0.1241
z.diff.lag2 -0.214229 0.186135 -1.151 0.2599
z.diff.lag3 …Run Code Online (Sandbox Code Playgroud) 我正忙于配置 TensorFlow Serving 客户端,该客户端要求 TensorFlow Serving 服务器针对给定模型对给定输入图像进行预测。
如果请求的模型尚未提供,则会从远程 URL 下载到服务器模型所在的文件夹。(客户这样做)。此时我需要更新model_config并触发服务器重新加载它。
此功能似乎存在(基于https://github.com/tensorflow/serving/pull/885和https://github.com/tensorflow/serving/blob/master/tensorflow_serving/apis/model_service.proto#L22) ,但我找不到有关如何实际使用它的任何文档。
我本质上是在寻找一个 python 脚本,我可以用它从客户端触发重新加载(或者以其他方式配置服务器以侦听更改并触发重新加载本身)。
我有一个固定的时间序列,我想要拟合一个带有自回归项的线性模型来校正序列相关性,即使用公式At = c1*Bt + c2*Ct + ut,其中ut = r*ut-1 +等
(ut是AR(1)术语,用于纠正错误术语中的序列相关性)
有谁知道在R中使用什么来模拟这个?
谢谢卡尔
我有一个INSERT声明,它占用了大量的日志空间,以至于硬盘驱动器在声明完成之前实际上已经填满了.
问题是,我真的不需要记录它,因为它只是一个中间数据上传步骤.
为了论证,让我说我有:
bcp,因此没有日志记录问题)INSERT INTO B from A有没有一种方法可以在A和B之间复制而不会将任何内容写入日志?
PS我正在使用SQL Server 2008和简单的恢复模型.
假设我有以下列表:
var someList = new List<SomeObject>();
Run Code Online (Sandbox Code Playgroud)
其中包含以下条目:
SomeObject.Field
Apple
Orange
FruitBowl_Outside
Banana
Grape
FruitBowl_Inside
Run Code Online (Sandbox Code Playgroud)
我想对这个列表进行排序,以便FruitBowl条目位于底部,受此限制,一切都是字母的.
用词来说:
SomeObject.Field
Apple
Banana
Grape
Orange
FruitBowl_Inside
FruitBowl_Outside
Run Code Online (Sandbox Code Playgroud) 我有一个相当简单的问题,但无法在任何地方找到记录在案的解决方案。
我目前正在使用 H2O 模型构建管道,并且作为过程的一部分,我需要将有关每个训练模型的一些基本信息写入表格。
假设我有类似的东西:
model = H2ODeepLearningEstimator(...)
model.train(...)
Run Code Online (Sandbox Code Playgroud)
这样做之后,我想从model对象中提取模型的类型。即,我正在寻找类似的东西:
model.getType()
Run Code Online (Sandbox Code Playgroud)
然后返回一个字符串"H2ODeepLearningEstimator"或等效的"deeplearning"H2O 似乎在内部用作模型类型标识符。我还想获得其他详细信息,例如它是回归模型还是分类模型。我没有看到公开此信息的参数。
model.save_model_details例如,如果我跑步,我会得到:
H2ODeepLearningEstimator : Deep Learning
Model Key: Grid_DeepLearning_py_4_sid_a02a_model_python_1502450758585_2_model_0
ModelMetricsRegression: deeplearning
** Reported on train data. **
MSE: 19.5334650304
RMSE: 4.4196679774
MAE: 1.44489752843
RMSLE: NaN
Mean Residual Deviance: 19.5334650304
ModelMetricsRegression: deeplearning
** Reported on validation data. **
...
...
Run Code Online (Sandbox Code Playgroud)
大概是model.save_model_details根据各个参数建立此摘要。我想通过直接访问这些(以及类似)参数model对象(性能指标这是可能的通过model.mse(),model.mae()等等)
官方文档中的以下段落描述了如何在 VSCode 中启用 GPG 密钥共享(从本地主机到远程容器)(https://code.visualstudio.com/docs/remote/containers#_sharing-gpg-keys)。
说明(适用于 Linux)仅指出要共享 GPG 密钥,请gnupg2在本地和容器中安装。但是,如果我已经gnupg2安装但不想共享密钥怎么办?据我所知,VSCode 在完成密钥共享的容器内执行启动后命令,例如:
Copy /home/karlschriek/.gnupg/pubring.kbx to /home/vscode/.gnupg/pubring.kbx
Copy /home/karlschriek/.gnupg/trustdb.gpg to /home/vscode/.gnupg/trustdb.gpg
...
Run Code Online (Sandbox Code Playgroud)
我无法找到可以防止这种情况的设置。据推测,它也使用gpg-agent与本地主机相同的方式。我想阻止这种情况发生。
r ×4
list ×2
python ×2
statistics ×2
.net-4.0 ×1
bulkinsert ×1
c# ×1
correlation ×1
count ×1
docker ×1
gnupg ×1
gpg-agent ×1
h2o ×1
insert ×1
keras ×1
logging ×1
lstm ×1
model ×1
names ×1
object ×1
sql ×1
tensorflow ×1
time-series ×1