這是一個火車/測試拆分過程,它基於您原始數據集中的(唯一)機器名稱。
# 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,]
到底你的訓練和測試數據集的行數應該等於你的原始數據集的行數,因爲你不會丟失任何信息進行分割。另外,一臺機器只能屬於火車數據集,或者只屬於測試數據集,因爲這是拆分背後的哲學。
您必須提供您的數據的代表性樣本,或者您認爲代表您的結構的假數據,以便我們爲您提供幫助。此外,還有很多關於如何將數據集分解爲火車/測試的例子。 – AntoniosK
@AntoniosK感謝您的反饋。我收錄了一個很小的樣本的截圖。我發現了很多關於分割數據的資源,但是如果數據集包含'date'列,我沒有發現如何做到這一點。我發現的唯一資源根據某個日期將數據集分爲兩部分(因此訓練集在該日期之前,且驗證集在該日期之後)。 – dhd
就我個人而言,我會使用機器編號欄來分割數據。這樣我的訓練和測試數據將包含特定機器名稱的所有日期。我不想將特定機器的某些行(天)作爲培訓,而將其他作爲測試數據。例如,如果機器「XTR004」隨機獲得訓練數據,則其所有行也將轉到訓練數據。這聽起來合理嗎?你知道該怎麼做嗎? – AntoniosK