2017-02-07 4 views
0

Ich habe einen Datenrahmen. Viele Variablen haben Namen wie folgt aus:R Variablenname enthält Semikolon

/messages/with/:userid/ 
/:id/ 

ich die Daten gelesen werden:

read.csv(file="file-path", header=TRUE, 
      sep=",", check.names = F) 

so dass die ursprünglichen Namen gehalten wurden (unter Verwendung von check.names = F). benutzen ich rpart ein Entscheidungsbaum-Modell aus den Daten zu trainieren, und dann versuchen, das Baummodell zu PMML Format unter Verwendung zu speichern:

saveXML(pmml(dt.model, model.name = "DecisionTree_Model", 
     app.name = "model_lr.pmml", 
     description = "Decision Tree Model", 
     unknownValue=0), "dt_model.pmml") 

Dies führt jedoch zu dem folgenden Fehler:

Ich glaube der Grund ist, dass die Variablennamen : enthalten, so dass Spalte Indizierung wurde versäumt.

ich die Daten mit check.names = T gelesen haben könnte, so dass die Variablennamen aussehen würde:

X.messages.with..userid. 
X..id." 

Da ich aber für die die ursprünglichen Variablennamen benötigen PMML Datei, möchte ich behalte die Variablennamen so, wie sie waren. Gibt es eine Möglichkeit, dieses Problem zu lösen?

Antwort

0

Das pmml Paket ist intern ziemlich zittrig - es ist keine so gute Idee, XML-Manipulation in R zu machen. Wenn Sie sich für den Export von R-Modellen in das PMML-Datenformat interessieren, dann können Sie die r2pmml package ausprobieren. Es ist in Java geschrieben (daher leidet es nicht unter R-Sprach-Macken) und ist viel schneller und funktioneller. Das Problem mit dem r2pmml Paket ist, dass es den rpart::rpart Modelltyp noch nicht unterstützt. Ihre beste Option scheint also folgende zu sein:

  1. Umbenennen data.frame Spalten. Speichern Sie die Liste der Variablennamenzuordnungen in einer Textdatei.
  2. Exportieren Sie das Modell rpart in eine PMML-Datei mit dem pmml-Paket.
  3. Öffnen Sie die PMML-Datei mit JPMML-Model library und Wiederherstellen der ursprünglichen Variablennamen (basierend auf der oben genannten Mapping-Datei). JPMML-Model stellt dafür eine spezielle API (Besucherklasse org.jpmml.model.visitors.FieldRenamer) zur Verfügung.