我在R中有一个带有以下变量的数据集(csv文件): - 日期(月/日) - 机器编号(例如“XTR004”) - 失败(二进制,0或1) - 属性1(int) - 属性2(int) - 属性3(int)
我有6个月的数据。每天创建一个日志(1行),显示日期,机器编号,机器是否出现故障以及应与故障相关的3个属性。当机器发生故障(故障= 1)时,第二天不会创建新的日志(行)。换句话说,第一个日期有很多行,最后一个日期有少量行
目标:我想使用这3个属性预测失败(使用Rstudio)。我想使用的模型是1)逻辑回归,2)随机森林,3)神经网络。
问题:是否有人就如何将数据拆分为培训和验证集(80/20或交叉验证),然后在上述特定情况下使用上述模型?日期和机器编号一起可视为“主键”。因此我不确定是否: - 制作2组计算机,其中包含与这些计算机相关的所有日志 - 使用特定日期分割2个组(这意味着长寿的某些机器是两个组的一部分)
我认为第一种策略更有意义,但我没有找到分割数据的方法(使用80/20一次性拆分或5或10次交叉验证)。我假设我必须根据其机器编号对数据进行分组?有没有人有任何我可以查看的例子或任何示例代码?
非常感谢!
答案 0 :(得分:0)
这是一个列车/测试拆分流程,基于原始数据集中的(唯一)机器名称。
# example dataset
df = data.frame(Date = c(rep("03/20/2001", 4), rep("03/21/2001", 4)),
Machine = rep(c("XTR003","XTR004","XTR005","XTR006"), 2),
Attr1 = c(0,0,10,5,0,4,0,8),
Failure = c(0,1,0,0,1,0,0,1),
stringsAsFactors = F)
# check how it looks like
df
# Date Machine Attr1 Failure
# 1 03/20/2001 XTR003 0 0
# 2 03/20/2001 XTR004 0 1
# 3 03/20/2001 XTR005 10 0
# 4 03/20/2001 XTR006 5 0
# 5 03/21/2001 XTR003 0 1
# 6 03/21/2001 XTR004 4 0
# 7 03/21/2001 XTR005 0 0
# 8 03/21/2001 XTR006 8 1
# create a vector of unique machine names
machine_vec = unique(df$Machine)
# calculate number of unique machines in your train dataset
# here we want 70% of machines to be in the train dataset
# (this is NOT the number of rows of your train dataset, but the number of unique machines)
N_train = round(length(machine_vec) * 0.7)
# randomly select which machine names will create your train dataset
train_machines = sample(machine_vec, N_train)
# select corresponding rows for your train and test dataset
# (all rows of the machines selected previously will form the train data)
df_train = df[df$Machine %in% train_machines,]
df_test = df[!df$Machine %in% train_machines,]
最后,您的列车和测试数据集的行数应该等于原始数据集的行数,因为您执行了拆分而不会丢失任何信息。此外,机器应仅属于火车数据集,或仅属于测试数据集,因为这是拆分背后的哲学。