2016-05-23 14 views
1

Ich denke, während meiner Forschung, um diese Frage zu lösen, kam ich ziemlich nah. Ich suche nach etwas wie this für das C5.0-Paket.R C5.0 bekomme Regel und Wahrscheinlichkeit für jedes Blatt

Die Methode in der SO-Antwort funktioniert mit einem party Objekt. Das C5.0-Paket unterstützt jedoch as.party nicht. Bei meiner weiteren Recherche fand ich this comment, dass der Verwalter des C5.0-Pakets die Funktion bereits programmiert, aber nicht exportiert hat.

Ich dachte, groß diese funktionieren sollte, aber leider ist die vorgeschlagene Funktion C50:::as.party.C5.0(mod1) wirft der Fehler:

error in as.data.frame.default(x[[i]], optional = TRUE) : 
    cannot coerce class ""function"" to a data.frame 

Irgendwelche Vorschläge geschätzt, diesen Fehler zu beheben. Lassen Sie sich das folgende Beispiel verwenden:

library(C50) 
p = iris[1:4] 
t = factor(iris$Species) 
model = C50::C5.0(p,t) 
#summary(model) 

modParty = C50:::as.party.C5.0(model) 

Antwort

3

Das Problem scheint auftreten, wenn die Standardmethode von C5.0() mit in Bezug auf die Formel Verfahren gegenüber. Wenn Sie die zweite verwenden dann die as.party() Umwandlung arbeitet erfolgreich und Sie können alle Methoden für die Anwendung:

model <- C5.0(Species ~ ., data = iris) 
modParty <- C50:::as.party.C5.0(model) 
modParty 
## Model formula: 
## Species ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width 
## 
## Fitted party: 
## [1] root 
## | [2] Petal.Length <= 1.9: setosa (n = 50, err = 0.0%) 
## | [3] Petal.Length > 1.9 
## | | [4] Petal.Width <= 1.7 
## | | | [5] Petal.Length <= 4.9: versicolor (n = 48, err = 2.1%) 
## | | | [6] Petal.Length > 4.9: virginica (n = 6, err = 33.3%) 
## | | [7] Petal.Width > 1.7: virginica (n = 46, err = 2.2%) 
## 
## Number of inner nodes: 3 
## Number of terminal nodes: 4 

Und dann eine Auswahl von vorhergesagten Wege wie in der anderen Diskussion Sie verknüpft:

pathpred(modParty)[c(1, 51, 101), ] 
##  response prob.setosa prob.versicolor prob.virginica 
## 1  setosa 1.00000000  0.00000000  0.00000000 
## 51 versicolor 0.00000000  0.97916667  0.02083333 
## 101 virginica 0.00000000  0.02173913  0.97826087 
##                rule 
## 1            Petal.Length <= 1.9 
## 51 Petal.Length > 1.9 & Petal.Width <= 1.7 & Petal.Length <= 4.9 
## 101      Petal.Length > 1.9 & Petal.Width > 1.7 

I bin mir nicht sicher, warum die Methode für die Standardschnittstelle nicht funktioniert. Aber wahrscheinlich ist es schwieriger, den erforderlichen Modellrahmen einzurichten. Sie könnten jedoch in Betracht ziehen, den C50 Betreuer darum zu bitten.

+0

Wenn dies Ihre Frage gelöst hat, denken Sie bitte daran, die Antwort so zu akzeptieren, dass sie hier auf SO richtig angezeigt wird, danke. –

+0

Sorry für ein bisschen langsam. Dies ist eine großartige und sehr bequeme Antwort auf die ursprüngliche Frage. Deshalb habe ich beschlossen, es als akzeptiert zu markieren. Aber warum ich es bis jetzt nicht als akzeptiert markiert habe, lag daran, dass ich immer noch Probleme mit der nicht exportierten Funktion habe. Aber da dies ein anderes Thema ist, habe ich eine andere Frage geöffnet: http://stackoverflow.com/q/37515454/3695715. Aber vielleicht kannst du mir auch helfen? Ich habe schon alles versucht, was ich mir vorstellen konnte ... Nochmals vielen Dank für Ihre Antwort auf dieses! – Peter