2

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

library("RWeka")

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

summary(resultJ48)

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

非常感谢!

4

4 回答 4

4

使用包的sample.split()功能caTools。它比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)
于 2016-05-08T16:24:33.323 回答
1

您可能需要检查 caret 包中的 createDataPartition

于 2016-05-08T00:53:37.503 回答
1

它不在 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 中实现。希望能帮助到你 :)

于 2016-05-08T07:57:03.523 回答
0

如果你不想使用 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)
于 2018-07-22T09:37:33.870 回答