2017-07-17 7 views
0

Ich versuche, eine Funktion zu erstellen, um mehrere Random-Gesamtstruktur-Modelle basierend auf Spaltenwert zu generieren. Lassen wir annehmen:Eine Funktion zum Erstellen mehrerer Modelle basierend auf Spaltenwert in R

df <- data.frame(Name= c('Aaron','Bob','Nik','Peter','George'), 
          Work=c('A','B','B','C','A') 
          ,Age = c(45,28,64,27,54) 
          ,cl = c(1,2,2,3,1)) 

Name Work Age cl 
Aaron A 45 1 
Bob B 28 2 
Nik B 64 2 
Peter C 27 3 
George A 54 1 

Also, ich habe Daten auf cl Basis der Teilmenge und dann Modelle bauen basierend auf cl Werte wie: Im obigen Beispiel I 3 cl values.So haben, zuerst werde ich teilen Daten in drei Teilmenge und baue drei verschiedene Modelle.

Name Work Age cl    Name Work Age cl   Name Work Age cl 
Aaron A 45 1    Bob B 28 2    Peter C 27 3 
George A 54 1    Nik B 64 2 

I unten Funktion verwendet haben, dies zu tun:

for(i in unique(uk$v10v11)) { 
    nam <- paste("df", i, sep = ".") 
    assign(nam, uk[uk$v10v11==i,]) 
} 

Ich möchte vollständige Funktion machen, wo ich meine df liefern kann und es sollte mehrere Modelle basierend auf cl bauen. Ich möchte auch Parameter für die zufällige Gesamtstruktur aus der Funktion für jedes Modell anpassen. Bitte helfen Sie.

+2

Sie können 'split' verwenden, schauen Sie auch [hier] (https://stackoverflow.com/questions/18913447/splitting-a-data-frame-by-a-variable) – akrun

+1

nach Split mit' list' von Datenrahmen und 'For-Schleife' zu ​​Trainingsmodell und Tuning-Parameter – Wen

+0

Aber es könnte n Zahlen in Cl geben. Ich bin mir nicht sicher, wie viele Werte in cl erscheinen könnten. –

Antwort

0

ich würde empfehlen zu beobachten this video from hadley wickham, wenn Sie die Zeit haben. Es bezieht sich sehr auf Ihre Herausforderung.

dies scheint auch wie ein klassisches Split-Anwendung-Kombinieren Problem, so ist mein erster Gedanke, die tidyverse zu betrachten. hier ist ein Code, die Ihnen helfen:

library(tidyverse) 
library(randomForest) 

df2 <- df %>% group_by(cl) %>% mutate(rfcol=list(randomForest(x=., 
            formula=.$cl~.$Work+.$Age))) 

im Grunde eine neue Spalte erstellt wurde, dass der Algorithmus Random angemessen für diese Zeile enthält, basierend auf seinem Wert in cl. Sie können durch einen Blick auf df2$rfcol[[2]]

, um die Details der einzelnen Modelle erforschen zusammenfassen, was los ist, die group_by Funktion bekommt man mit dem Erstellen von Datenrahmen basierend auf cl Werten gestartet. Die . innerhalb der randomForest Funktion verschachtelt innerhalb mutate ist eine Möglichkeit, jeden gruppierten Datenrahmen zu referenzieren.

hoffe das hilft. aber wie bereits erwähnt, versuchen Sie das Video von Hadley Wickham, wenn Sie die Zeit haben. es wird wirklich erklären, wie man im Detail über diese Art von Problemen nachdenkt.

+0

Ich habe das Video gesehen, das du erwähnt hast. Es ist sehr hilfreich. Aber mein Hauptproblem besteht darin, die Parameter für jedes Modell getrennt von der Funktion selbst einzustellen. –

Verwandte Themen