C5.0 Entscheidungsbaum - c50-code genannt Ausgang mit dem Wert 1
Ich erhalte die folgende Fehlermeldung
c50-code genannt Ausgang mit dem Wert 1
Ich Tue dies auf der titanic verfügbaren Daten von Kaggle
# Importing datasets
train <- read.csv("train.csv", sep=",")
# this is the structure
str(train)
Ausgabe :-
'data.frame': 891 obs. of 12 variables:
$ PassengerId: int 1 2 3 4 5 6 7 8 9 10 ...
$ Survived : int 0 1 1 1 0 0 0 0 1 1 ...
$ Pclass : int 3 1 3 1 3 3 1 3 3 2 ...
$ Name : Factor w/ 891 levels "Abbing, Mr. Anthony",..: 109 191 358 277 16 559 520 629 417 581 ...
$ Sex : Factor w/ 2 levels "female","male": 2 1 1 1 2 2 2 2 1 1 ...
$ Age : num 22 38 26 35 35 NA 54 2 27 14 ...
$ SibSp : int 1 1 0 1 0 0 0 3 0 1 ...
$ Parch : int 0 0 0 0 0 0 0 1 2 0 ...
$ Ticket : Factor w/ 681 levels "110152","110413",..: 524 597 670 50 473 276 86 396 345 133 ...
$ Fare : num 7.25 71.28 7.92 53.1 8.05 ...
$ Cabin : Factor w/ 148 levels "","A10","A14",..: 1 83 1 57 1 1 131 1 1 1 ...
$ Embarked : Factor w/ 4 levels "","C","Q","S": 4 2 4 4 4 3 4 4 4 2 ...
Dann versuchte ich mit C5.0 dtree
# Trying with C5.0 decision tree
library(C50)
#C5.0 models require a factor outcome otherwise error
train$Survived <- factor(train$Survived)
new_model <- C5.0(train[-2],train$Survived)
Also mit den obigen Zeilen, gibt mir diese Fehlermeldung
c50 code called exit with value 1
Ich bin nicht in der Lage, herauszufinden, was falsch läuft? Ich war mit der gleiche code auf unterschiedlichen dataset, und es war in Ordnung arbeiten. Irgendwelche Ideen, wie kann ich meine debug-code?
Dank
Du musst angemeldet sein, um einen Kommentar abzugeben.
Für alle interessierten, die Daten können hier gefunden werden: http://www.kaggle.com/c/titanic-gettingStarted/data. Ich denke, Sie müssen registriert sein um es zu downloaden.
In Bezug auf Ihr problem, zuerst ich denke du wolltest schreiben
Nächsten, beachten Sie die Struktur der
Cabin
undEmbarked
Spalten. Diese beiden Faktoren haben einen leeren Charakter als level-name (überprüfen Sie mitlevels(train$Embarked)
). Dies ist der Punkt, woC50
fällt. Wenn Sie die änderung Ihrer Daten, so dassAlgorithmus wird nun ausgeführt, ohne dass eine Fehlermeldung.
Nur für den Fall. Werfen Sie einen Blick auf die Fehler, die durch
Auch dieser Fehler tritt auf, wenn es ein Sonderzeichen in den Namen der variable. Zum Beispiel, wird man diesen Fehler, wenn "я"(es ist aus dem Russischen alphabet) Zeichen in den Namen der variable.
Hier ist, was funktioniert endlich:-
Habe diese Idee nach der Lektüre dieses post
Die intuition dahinter ist, dass auf diese Weise sowohl die Zug-und test-Daten mit konsistenten Faktor Ebenen.
Ich hatte den gleichen Fehler, aber ich war mit einem numerischen Datensatz ohne fehlende Werte.
Nach langer Zeit, entdeckte ich, dass mein Datensatz hatte eine prädikative Attribut namens
"outcome"
und dieC5.0Control
verwenden Sie diesen Namen, und das war der Fehler-Ursache :'(Meine Lösung war die änderung der Spalte name. Andere Möglichkeit wäre das erstellen einer
C5.0Control
Objekt und ändern Sie den Wert des label-Attributs, und dann übergeben Sie dieses Objekt als parameter für die C50-Methode.Ich auch kämpften einige Stunden mit dem gleichen Problem (Return-code "1") beim Bau des Modells als auch bei der Vorhersage.
Mit dem Hauch von Antwort von Marco, die ich geschrieben habe eine kleine Funktion zum entfernen aller faktorstufen gleich "" in einen Daten-frame oder einen Vektor, siehe code unten. Da jedoch R nicht für pass by reference an Funktionen, die Sie verwenden müssen, ist das Ergebnis der Funktion (man kann es nicht ändern den ursprünglichen dataframe):
Aufruf der Funktionen kann wie folgt Aussehen:
Aber es scheint so, dass der C50 hat ein ähnliches Problem mit character-Spalten mit einer leeren Zelle, so haben Sie wahrscheinlich zu erweitern, diese zu behandeln, auch Charakter-Attribute, wenn Sie einige haben.
Ich habe auch den gleichen Fehler, aber es war, weil einige ungültige Zeichen in den faktorstufen von einer der Spalten.
Ich verwendet
make.names
- Funktion und korrigiert die faktorstufen:Dann war das problem gelöst.