【发布时间】:2018-05-01 23:23:08
【问题描述】:
我在 R 中有一个数据集(csv 文件),其中包含以下变量: - 日期(月/日/年) - 机器编号(例如“XTR004”) - 失败(二进制,0 或 1) - 属性 1(整数) - 属性 2(整数) - 属性 3 (int)
我有 6 个月的数据。每天都会创建一个日志(1 行),其中显示日期、机器编号、机器是否发生故障以及应该与故障相关的 3 个属性。当一台机器发生故障(failure = 1)时,第二天不会创建新的日志(行)。也就是说,第一个日期有很多行,最后一个日期有少量行
目标:我想使用这 3 个属性来预测失败(使用 Rstudio)。我想使用的模型是 1)逻辑回归,2)随机森林,3)神经网络。
问题:对于如何将数据拆分为训练和验证集(80/20 或交叉验证),然后针对此特定案例使用上述模型,是否有人有任何建议?日期和机器编号一起可以看作是“主键”。因此,我不确定是否: - 使用与这些机器相关的所有日志制作 2 组机器 - 使用特定日期创建 2 个组(这意味着某些长寿的机器是两个组的一部分)
我认为第一种策略更有意义,但我还没有找到拆分数据的方法(使用 80/20 一次性拆分或 5 或 10 折交叉验证)。我假设我必须根据其机器号对数据进行分组?有没有人有任何我可以看的例子或任何示例代码?
非常感谢!
【问题讨论】:
-
您必须提供具有代表性的数据样本,或者您认为代表您的结构的虚假数据,以便我们为您提供帮助。此外,网上有很多关于如何将数据集拆分为训练/测试的示例。
-
@AntoniosK 感谢您的反馈。我附上了一个非常小的样本的屏幕截图。我找到了很多关于拆分数据的资源,但是如果数据集包含“日期”列,我没有找到任何关于如何做到这一点的信息。我发现的唯一资源是根据某个日期将数据集分成两部分(因此训练集在该日期之前,而验证集在该日期之后)。
-
我个人会使用机器编号列拆分数据。这样,我的训练和测试数据将包含特定机器名称的所有日期。我不希望将特定机器的某些行(天)作为训练数据,而将其他数据作为测试数据。例如,如果机器
XTR004随机进入训练数据,那么它的所有行也将进入训练数据。这听起来合理吗?你知道怎么做吗? -
有道理!我同意。你有任何关于编码部分的额外资源吗?
-
我确实有一些代码可以进行采样和拆分以训练和测试组,并且可能会将其作为一些 cmets 的答案发布。到目前为止你有没有尝试过?
标签: r machine-learning time-series random-forest cross-validation