2016-10-25 5 views
2

Ich arbeite derzeit an einem Problem mit R. Ich möchte den Klassifikationsbaum über einen Datensatz anwenden, aber das Ergebnis scheint falsch zu sein, da ich das gleiche Problem bereits mit Weka gelöst habe, und Ich habe unterschiedliche Ergebnisse.Entscheidungsbaum Analyse Problem

Ich habe einen Datensatz in einer CSV-Datei wie folgt enthalten:

age,menopause,tumor.size,inv.nodes,node.caps,deg.malig,breast,breast.quad,irradiat,class 
40-49,premeno,15-19,0-2,yes,3,right,left_up,no,recurrence-events 
50-59,ge40,15-19,0-2,no,1,right,central,no,no-recurrence-events 
50-59,ge40,35-39,0-2,no,2,left,left_low,no,recurrence-events 
40-49,premeno,35-39,0-2,yes,3,right,left_low,yes,no-recurrence-events 
40-49,premeno,30-34,3-5,yes,2,left,right_up,no,recurrence-events 

und das ist das Skript:

#Open r file 
cancer = read.csv("cancer.csv") 
#Data Exploration 
summary(cancer) 
str(cancer) 
#Divide into test and train sets 
set.seed(1234) 
ind <- sample(2, nrow(cancer), replace=TRUE, prob=c(0.7, 0.3)) 
trainData <- cancer[ind==1,] 
testData <- cancer[ind==2,] 
#Build the model 
library(party) 
cancermodel <- class ~ age + menopause + tumor.size + inv.nodes + node.caps + deg.malig + breast + breast.quad + irradiat 
cancertree <- ctree(cancermodel,trainData) 
table(predict(cancertree),trainData$class) 
#Draw tree 
plot(cancertree, type="simple") 
#Testset 
testPred <- predict(cancertree, newdata = testData) 
table(testPred, testData$class) 
+3

warum sollten sie gleich sein? – rawr

+0

, weil es den gleichen Algorithmus, den ich in beiden Fällen (Entscheidungsbaum) – Zak

+0

und Ihre zufällig ausgewählten Trainings-und Testdaten angewendet haben, sollten sie die gleichen sein? – rawr

Antwort

1

Sie eine zufällige Stichprobe hier in Ihrem Code in R ausgewählt haben : ind < - Probe (2, nrow (Krebs), ersetzen = TRUE, prob = c (0,7, 0,3))

Wie haben Sie repliziert und verwenden die gleiche Zufallsauswahl in Weka? Bäume sind sehr seltene Modelle und können schnell mit verschiedenen Datendateien variieren.

2

Entscheidungsbäume haben viele verschiedene Algorithmenimplementierungen in R (Baum, Rpart, Partei) und in Weka (J48, LMT, DecisionStump) und verschiedene Algorithmen erzeugen wahrscheinlich verschiedene Entscheidungsbäume auf demselben Datensatz (einige arbeiten durch Maximierung von Information Gewinn/Gini-Index, einige unter Verwendung von Hypothesentests mit Chi-Quadrat-Statistik).

Sogar ein beliebiger Algorithmus erzeugt verschiedene Entscheidungsbäume mit verschiedenen Eingabeparametern (beschnitten/nicht protokolliert, min # Datenpunkte in einem zu spaltenden Knoten usw.).

Auch, wie von @RomRom hingewiesen, ist Entscheidungsbaum kein sehr robustes Modell in dem Sinne, dass geringfügige Änderung in den Trainingsdaten einen anderen Baum insgesamt ausgeben kann.

Unter Berücksichtigung all dieser Faktoren ist es schwierig, den gleichen Entscheidungsbaum in R und Weka zu erstellen, und selbst wenn Sie können, müssen Sie Ihre Modellparameter sehr sorgfältig einstellen, was eine Menge Experimente erfordern kann.

Es folgt ein Beispiel für den Iris-Datensatz mit einigen R-Entscheidungsbaummodellen und RWeka-Entscheidungsbaummodellen (wie aus den geplotteten Bäumen ersichtlich ist, erzeugen verschiedene Modelle unterschiedliche Bäume mit der gleichen Trainingsdatenmenge iris).

library(RWeka) 
m1 <- J48(Species ~ ., data = iris) 
if(require("partykit", quietly = TRUE)) plot(m1) 

enter image description here

library(rpart) 
m2 <- rpart(Species ~ ., data = iris) 
library(rpart.plot) 
prp(m2) 

enter image description here

library(party) 
m3 <- ctree(Species ~ ., data = iris) 
plot(m3) 

enter image description here