-2

I einen Datensatz (CSV-Datei) haben in R mit den folgenden Variablen: - Datum (m/d/y) - Maschinennummer (zum Beispiel "XTR004") - Failure (binary , 0 oder 1) - Attribut 1 (int) - Attribut 2 (int) - Attribut 3 (int)Predict Ausfall für Zeitreihendaten

enter image description here

ich habe 6 Monate-Daten. Jeden Tag wird ein Protokoll (1 Zeile) erstellt, das das Datum, die Maschinennummer, den Ausfall des Computers oder die drei Attribute anzeigt, die mit dem Fehler in Zusammenhang stehen sollten. Wenn ein Computer ausfällt (Fehler = 1), wird am nächsten Tag kein neues Protokoll (Zeile) erstellt. Mit anderen Worten, das erste Datum hat viele Zeilen, das letzte hat eine kleine Anzahl von Zeilen

Ziel: Ich möchte Fehler (mit Rstudio) mit diesen 3 Attributen voraussagen. Die Modelle, die ich verwenden möchte, sind 1) logistische Regression, 2) Random Forest, 3) neuronale Netze.

Problem: Hat jemand einen Ratschlag, wie die Daten in einen Trainings- und Validierungssatz (80/20 oder Kreuzvalidierung) aufgeteilt werden sollen, gefolgt von den oben genannten Modellen für diesen speziellen Fall? Das Datum und die Maschinennummer zusammen können als "Primärschlüssel" angesehen werden. Daher bin ich nicht sicher ob: - Machen Sie 2 Gruppen von Maschinen mit allen Protokollen, die zu diesen Maschinen gehören - Machen Sie 2 Gruppen, die mit einem bestimmten Datum aufgeteilt sind (Dies bedeutet, dass bestimmte Maschinen, die lange leben, Teil von beiden sind) Gruppen)

Ich denke, die erste Strategie macht mehr Sinn, aber ich habe keinen Weg gefunden, die Daten zu teilen (mit einem 80/20 einmaligen Split oder einer 5- oder 10-fachen Kreuzvalidierung). Ich nehme an, ich müsste die Daten nach ihrer Maschinennummer gruppieren? Hat jemand ein Beispiel, das ich mir ansehen könnte, oder irgendeinen Beispielcode?

Vielen Dank!

+0

Sie müssen eine repräsentative Stichprobe Ihrer Daten bereitstellen, oder falsche Daten, die Ihrer Meinung nach Ihrer Struktur entsprechen, damit wir Ihnen helfen können. Außerdem gibt es viele Online-Beispiele, wie man einen Datensatz in Zug/Test aufteilt. – AntoniosK

+0

@AntoniosK Danke für die Rückmeldung. Ich habe einen Screenshot eines sehr kleinen Beispiels eingefügt. Ich habe eine Menge Ressourcen beim Teilen der Daten gefunden, aber ich habe nichts gefunden, wenn ein Datensatz eine Spalte "date" enthält. Die einzige Ressource, die ich gefunden habe, teilt das Dataset basierend auf einem bestimmten Datum in zwei Teile auf (also ist das Trainingssatz vor diesem Datum und das Validierungsset ist nach diesem Datum). – dhd

+0

Persönlich würde ich die Daten unter Verwendung der Maschinennummerspalten teilen. Auf diese Weise werden meine Trainings- und Testdaten aus allen Daten bestimmter Maschinennamen bestehen. Ich möchte nicht einige Zeilen (Tage) einer bestimmten Maschine als Training und andere als Testdaten haben. Wenn zum Beispiel die Maschine 'XTR004' zufällig in die Trainingsdaten gelangt, dann werden alle ihre Reihen zu den Trainingsdaten gehen. Klingt das vernünftig? Weißt du, wie man es macht? – AntoniosK

Antwort

0

Hier ist ein Zug/Test-Split-Prozess, basierend auf den (eindeutigen) Maschinennamen, die Sie in Ihrem ursprünglichen Datensatz haben.

# 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,] 

Am Ende die Anzahl der Zeilen des Zuges und die Testdatensätze sollten auf die Anzahl der Zeilen des ursprünglichen Datensatzes gleich sein, weil Sie ohne Verlust der Informationen eine Spaltung durchgeführt. Außerdem sollte eine Maschine nur in den Zugdatensatz oder nur in den Testdatensatz gehören, da dies die Philosophie hinter der Teilung ist.