UseMethod("Vorhersagen") : keine anwendbare Methode für "prognostizieren" angewandt auf ein Objekt der Klasse "Zug"

Habe ich ein Modell (fit), basierend auf historischen Informationen, bis letzten Monat. Jetzt würde ich mag, um vorherzusagen, mit meinem Modell für den aktuellen Monat. Wenn ich versuche zu aufrufen, den folgenden code:

predicted <- predict(fit, testData[-$Readmit])

Bekomme ich die folgende Fehlermeldung:

Error in UseMethod("predict") : no applicable method for 'predict'
    applied to an object of class "train"

Hinweise:

  1. Das fit-Modell wurde erstellt über: train Funktion von caret - Paket, mit random forest Algorithmus
  2. Den predict ist eine generische Funktion, die ruft die spezifische Vorhersage der Funktion basierend auf den ersten input-argument. In meinem Fall ist es:

    >fit$modelInfo$label

    [1] "Random Forest"

Daher die predict-Methode aufgerufen werden: Vorhersagen.randomForest. Siehe [caret Dokumentation][3] weitere info.

Hier die Zusammenfassung Quellcode für die Erzeugung des Modells und die Berufung auf Sie:

# Script-1: create a model:
fit <- train(testData[-$Readmit], testData$Readmit)
saveRDS(fit, modelFileName) # save the fit object into a file

# Script-2: predict
fit <- readRDS(modelFileName) # Load the model (generated previously)
predicted <- predict(fit, testData[-$Readmit])

Hinweis: Die Ausführungszeit für die Erzeugung des Modells beträgt etwa 3 Stunden, das ist, warum ich das Objekt speichern für die Wiederverwendung später.

Den Datensatz aus der Ausbildung Modell, wie die folgende Struktur:

> str(fit$trainingData)
'data.frame':   29955 obs. of  27 variables:
$ Acuity                : Factor w/ 3 levels "Elective  ","Emergency ",..: 2 2 2 1 1 2 2 2 1 1 ...
$ AgeGroup              : Factor w/ 10 levels "100-105","65-70",..: 8 6 9 9 5 4 9 2 3 2 ...
$ IsPriority            : int  0 0 0 0 0 0 0 0 0 0 ...
$ QNXTReferToId         : int  115 1703712 115 3690 1948 115 109 512 481 1785596 ...
$ QNXTReferFromId       : int  1740397 1724801 1711465 1704170 1714272 1731911 1535 1712758 1740614 1760252 ...
$ iscasemanagement      : Factor w/ 2 levels "N","Y": 2 1 1 2 2 1 2 1 2 2 ...
$ iseligible            : Factor w/ 2 levels "N","Y": 2 2 2 2 2 2 2 2 2 2 ...
$ referralservicecode   : Factor w/ 11 levels "12345","278",..: 1 1 1 9 9 1 1 6 9 9 ...
$ IsHighlight           : Factor w/ 2 levels "N","Y": 1 1 1 1 1 1 1 1 1 1 ...
$ admittingdiagnosiscode: num  439 786 785 786 428 ...
$ dischargediagnosiscode: num  439 0 296 786 428 ...
$ RealLengthOfStay      : int  3 1 6 1 2 3 3 7 3 2 ...
$ QNXTPCPId             : int  1740397 1724801 1711465 1704170 1714272 1731911 1535 1712758 1740614 1760252 ...
$ QNXTProgramId         : Factor w/ 3 levels "QMXHPQ0839     ",..: 1 1 1 1 1 1 1 1 1 1 ...
$ physicalzipcode       : int  33054 33712 33010 33809 33010 33013 33142 33030 33161 33055 ...
$ gender                : Factor w/ 2 levels "F","M": 1 1 1 1 2 1 1 2 2 1 ...
$ ethnicitycode         : Factor w/ 4 levels "ETHN0001       ",..: 4 4 4 4 4 4 4 4 4 4 ...
$ dx1                   : num  439 786 296 786 428 ...
$ dx2                   : num  439 292 785 786 428 ...
$ dx3                   : num  402 0 250 0 0 ...
$ svc1                  : int  0 120 120 762 762 120 120 120 762 762 ...
$ svc2                  : int  120 0 0 0 0 0 0 0 0 0 ...
$ svc3                  : int  0 0 0 0 0 0 0 0 0 0 ...
$ Disposition           : Factor w/ 28 levels "0","APPEAL & GRIEVANCE REVIEW                                   ",..: 11 11 16 11 11 11 11 11 11 11 ...
$ AvgIncome             : Factor w/ 10 levels "-1",">100k","0-25k",..: 3 6 3 8 3 4 3 5 4 4 ...
$ CaseManagerNameID     : int  124 1 1 19 20 1 16 1 43 20 ...
$ .outcome              : Factor w/ 2 levels "NO","YES": 1 2 2 1 1 1 2 2 1 1    ...

nun die testData haben die folgende Struktur:

> str(testData[-$Readmit])
'data.frame':   610 obs. of  26 variables:
$ Acuity                : Factor w/ 4 levels "0","Elective  ",..: 3 2 4 2 2 2 4 3 3 3 ...
$ AgeGroup              : Factor w/ 9 levels "100-105","65-70",..: 4 3 5 4 2 9 4 2 4 6 ...
$ IsPriority            : int  0 0 0 0 0 0 1 1 1 1 ...
$ QNXTReferToId         : int  2140 482 1703785 1941 114 1714905 1703785 98 109 109 ...
$ QNXTReferFromId       : int  1791383 1729375 1718532 1746336 1718267 1718267 1718532 98 109 109 ...
$ iscasemanagement      : Factor w/ 2 levels "N","Y": 2 2 2 2 2 2 1 2 2 1 ...
$ iseligible            : Factor w/ 2 levels "N","Y": 2 2 2 2 2 2 2 2 2 2 ...
$ referralservicecode   : Factor w/ 7 levels "12345","IPMAT          ",..: 5 1 1 1 1 1 1 5 1 5 ...
$ IsHighlight           : Factor w/ 2 levels "N","Y": 1 1 1 1 1 1 1 1 1 1 ...
$ admittingdiagnosiscode: num  11440 11317 11420 11317 1361 ...
$ dischargediagnosiscode: num  11440 11317 11420 11317 1361 ...
$ RealLengthOfStay      : int  1 2 4 3 1 1 16 1 1 3 ...
$ QNXTPCPId             : int  3212 1713678 1738430 1713671 1720569 1791640 1725962 1148 1703290 1705009 ...
$ QNXTProgramId         : Factor w/ 2 levels "QMXHPQ0839     ",..: 1 1 1 1 1 1 1 1 1 1 ...
$ physicalzipcode       : int  34744 33175 33844 33178 33010 33010 33897 33126 33127 33125 ...
$ gender                : Factor w/ 2 levels "F","M": 2 1 2 1 2 2 2 1 1 2 ...
$ ethnicitycode         : Factor w/ 1 level "No Ethnicity   ": 1 1 1 1 1 1 1 1 1 1 ...
$ dx1                   : num  11440 11317 11420 11317 1361 ...
$ dx2                   : num  11440 11317 11420 11317 1361 ...
$ dx3                   : num  0 1465 0 11326 0 ...
$ svc1                  : int  52648 27447 50040 27447 55866 55866 51595 0 99221 300616 ...
$ svc2                  : int  76872 120 50391 120 120 38571 120 762 120 0 ...
$ svc3                  : int  762 0 120 0 0 51999 0 0 0 762 ...
$ Disposition           : Factor w/ 14 levels "0","DENIED- Not Medically Necessary                             ",..: 3 5 3 4 3 3 5 3 3 5 ...
$ AvgIncome             : Factor w/ 10 levels "-1",">100k","0-25k",..: 6 7 5 9 3 3 6 4 3 4 ...
$ CaseManagerNameID     : int  1 2 3 4 5 6 7 8 9 7 ...

Die variable Struktur ist die gleiche, nur, dass einige Faktor-Variablen hat unterschiedliche Ebenen, weil einige Variablen neue Werte. Zum Beispiel: Acuity im Modell hat 3 Ebenen und in den Testdaten 4-Ebenen.

Habe ich nicht aus vorab ein Weg zu wissen, alle möglichen level für alle Variablen.

Einen Rat, bitte...

Vielen Dank im Voraus,

David

  • train ist nicht eine R-Funktion. Lesen Sie die Dokumentation, wie ?library_you_got_it_from::train. Sie wohl schweigen, ob es eine predict Methode.
  • Ist das aus der caret Paket?
  • tun summary(fit) gibt Ihnen etwas logisches?
  • Ich fügte hinzu, mehr detail in der original-post auf der Grundlage der vorherigen Kommentare durch ( @loiri @Frank und @ abhiieor ). @ abhiieor die Ausgabe von str(fit) bieten zu viele Informationen, ich bekam von ihm die Trainings-Daten-Struktur über: fit$trainingData. Die nur andere aus diesem und anderen Beispielen, die ich verwende ist auch, dass ich das speichern der variable laden und die test-set kommt aus eine neue Datei (es ist nicht Teil des Zuges eingestellt), aber mit der gleichen Datenstruktur (aber nicht möglich, alle gleichen Werte oder Pegel). Ich weiß nicht, ob dies im Zusammenhang mit meinem problem. danke.
  • Nur die ersten @ - Namen in einen Kommentar bekommt angepingt, fyi.
  • Ich vergaß hinzuzufügen, die Bibliothek caret-Zeichen im Quellcode. Das löst den ursprünglichen Fehler und generiert diese: Error in predict.randomForest(modelFit, newdata, type = "prob") : New factor levels not present in the training data diesem Punkt für den Verdacht, ich habe im Zusammenhang mit den Ebenen. Nun Suche in Stackoverflow über dieses neue Fehler, die ich gefunden habe, dieses link als mögliche Lösung für diese neue Nachricht.

InformationsquelleAutor David Leal | 2016-07-27
Schreibe einen Kommentar