R 中的 J48 树 - 训练和测试分类

J48 tree in R - train and test classification

我想在 R 上的 J48 决策树中使用训练和测试。 这是我的代码:

library("RWeka")

data <- read.csv("try.csv")
resultJ48 <- J48(classificationTry~., data)

summary(resultJ48)

但是我想将我的数据分成 70% 的训练和 30% 的测试,我该如何使用 J48 算法来做到这一点?

非常感谢!

您可能想要check the createDataPartition in caret package

它不在 R 中。但是在 java... 但是你会理解它的逻辑。

int trainSize = (int) Math.round(trainingSet.numInstances() * 0.7); //70% split 
int testSize = trainingSet.numInstances() - trainSize;
Instances train = new Instances(trainingSet, 0, trainSize);
Instances test = new Instances(trainingSet, trainSize, testSize)

用相同的逻辑在R中实现。希望对您有所帮助:)

使用 caTools 包的 sample.split() 功能。它比 caret 包更轻巧(如果我没记错的话,它是一个元包):

library(caTools)

library(RWeka)

data <- read.csv("try.csv")
spl = sample.split(data$someAttribute, SplitRatio = 0.7)

dataTrain = subset(data, spl==TRUE)
dataTest = subset(data, spl==FALSE)

resultJ48 <- J48(as.factor(classAttribute)~., dataTrain) 
dataTest.pred <- predict(resultJ48, newdata = dataTest)
table(dataTest$classAttribute, dataTest.pred)

如果你不想使用除RWeka以外的更多包,你可以使用runif:

library("RWeka")
data <- read.csv("try.csv")

randoms=runif(nrow(data))

resultJ48 <- J48(classificationTry~., data[randoms<=0.7,])
PredTest <- predict(resultJ48, newdata = data[randoms>0.7,])
table(data[randoms>0.7,]$classificationTry, PredTest)