Erstellen Entscheidungsbaum
Ich habe eine csv-Datei (298 Zeilen und 24 Spalten) und ich möchten, erstellen Sie einen Entscheidungsbaum zur Vorhersage der Spalte "Gehalt". Ich habe heruntergeladen, Baum Paket Hinzugefügt und per library-Funktion.
Aber wenn ich versuche zu erstellen die decision tree: die
model<-tree(salary~.,data)
Bekomme ich die Fehlermeldung wie unten:
*Error in tree(salary ~ ., data) :
factor predictors must have at most 32 levels*
Was ist falsch mit, dass? Daten wie folgt:
Name bat hit homeruns runs
1 Alan Ashby 315 81 7 24
2 Alvin Davis 479 130 18 66
3 Andre Dawson 496 141 20 65
...
team position putout assists errors
1 Hou. C 632 43 10
2 Sea. 1B 880 82 14
3 Mon. RF 200 11 3
salary league87 team87
1 475 N Hou.
2 480 A Sea.
3 500 N Chi.
Der Wert von str(Daten):
'Daten.frame': 263 obs. der 24-Variablen:
$ Name : Factor w/263 Ebenen "Al Newman","Alan Ashby",..: 2 7 8 10 6 1 13 11 9 3 ...
$ bat : int 315 479 496 321 594 185 298 323 401 574 ...
$ hit : int 81 130 141 87 169 37 73 81 92 159 ...
$ homeruns : int 7 18 20 10 4 1 0 6 17 21 ...
$ läuft : int 24 66 65 39 74 23 24 26 49 107 ...
$ läuft.geschlagener : int 38 72 78 42 51 8 24 32 66 75 ...
$ Spaziergänge : int 39 76 37 30 35 21 7 8 65 59 ...
$ Jahren.in.major.Ligen : int 14 3 11 2 11 2 3 2 13 10 ...
$ Fledermäuse.während.Karriere : int 3449 1624 5628 396 4408 214 509 341 5206 4631 ...
$ trifft.während.Karriere : int 835 457 1575 101 1133 42 108 86 1332 1300 ...
$ homeruns.während.Karriere : int 69 63 225 12 19 1 0 6 253 90 ...
$ läuft.während.Karriere : int 321 224 828 48 501 30 41 32 784 702 ...
$ läuft.geschlagener.während.Karriere: int 414 266 838 46 336 9 37 34 890 504 ...
$ Spaziergänge.während.Karriere : int 375 263 354 33 194 24 12 8 866 488 ...
$ Liga : Factor w/2 levels "A","N": 2 1 2 2 1 2 1 2 1 1 ...
$ division : Factor w/2 levels "E","W": 2 2 1 1 2 1 2 2 1 1 ...
$ team : Factor w/24 Ebenen "Atl.","Bal.",..: 9 21 14 14 16 14 10 1 7
8 ...
$ position : Faktor w/23 Ebenen "1B","1O","23",..: 10 1 20 1 22 4 22 22 13 22 ...
$ putout : int 632 880 200 805 282 76 121 143 0 238 ...
$ unterstützt : int 43 82 11 40 421 127 283 290 0 445 ...
$ Fehler : int 10 14 3 4 25 7 9 19 0 22 ...
$ Gehalt : num 475 480 500 91.5 750 ...
$ league87 : Factor w/2 levels "A","N": 2 1 2 2 1 1 1 2 1 1 ...
$ team87 : Faktor w/24 Ebenen "Atl.","Bal.",..: 9 21 5 14 16 13 10 1 7 8 ...
- Sie sollten zumindest ein paar Zeilen von Ihr
salary
unddata
Variablen, damit wir wissen, was wir arbeiten. - Frage aktualisiert!
- Es wäre nützlicher, um zu sehen
str(data)
, denn dann könnten wir sehen, welche Variablen sind die Faktoren und wie viele Ebenen Sie haben. Ich vermute, dass Sie in der "Name" - variable in Ihrem Modell allerdings - das sollte man nicht. - aktualisiert!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das Problem ist fast sicher, dass Sie einschließlich der Namen-Variablen in Ihrem Modell, da es zu viele faktorstufen. Ich würde Sie auch entfernen Sie es, einen methodischen Standpunkt, aber dies ist wahrscheinlich nicht der Ort für diese Diskussion. Versuchen:
Es scheint, dass Ihre
salary
ist ein Faktor Vektor, während Sie versuchen, führen Sie eine regression, so sollte es sein, eine zahlen Vektor. Einfach konvertieren Siesalary
numeric, und es sollte gut funktionieren. Für mehr details Lesen Sie der Bibliothek helfen:http://cran.r-project.org/web/packages/tree/tree.pdf
Je nachdem, was genau gespeichert ist in Ihrer
salary
variable, die Umwandlung kann mehr oder weniger schwierig, aber das sollte prinzipiell funktionieren:BEARBEITEN
Wie schon in dem Kommentar, der eigentliche Fehler entspricht der
data
variable, so dass, wenn es einen numerischen Daten, kann auch umgewandelt werden in numerische um das Problem zu lösen, wenn es ein Faktor sein, müssen Sie ein anderes Modell oder reduzieren Sie die Anzahl der Ebenen. Sie können auch konvertieren Sie diese Faktoren, um das numerische format von hand (durch zum Beispiel die Festlegung, wie viele binäre Funktionen, wie Sie Ebenen), aber dies kann dazu führen, das exponentielle Wachstum des input-Raum.EDIT2
Scheint es, dass müssen Sie zunächst entscheiden, was Sie versuchen, zu modellieren. Sie versuchen, vorherzusagen Gehalt, aber basierend auf was? Es scheint, dass Ihre Daten aus der players' records, dann Ihre Namen sind mit Sicherheit die falschen Datentyp verwenden, für die diese Vorhersage (in allem - es ist wahrscheinlich verursacht die 32 Ebenen-Fehler). Sie sollten entfernen Sie alle Spalten aus der
data
variable, die nicht verwendet werden sollten für den Bau einer Vorhersage. Ich weiß nicht, was ist das genaue Ziel, hier (da es keine Informationen bezüglich der in der Frage), so kann ich nur raten, dass Sie versuchen, vorherzusagen, die person, die das Gehalt auf der Grundlage seiner Werte, so sollten Sie entfernen aus der input-Daten: die Namen der Spieler, Spieler-teams und natürlich die Gehälter (wie die Vorhersage von X auf X ist nicht eine gute Idee ;)).tree
(undrpart
glaube ich), dass die Faktoren nicht mehr als 32 Ebenen. Kann es eigentlich gedacht, um ein Faktor sein, aber hat zu viele Ebenen. Kann nicht erzählen, ohne Ihre Daten.