我想在 R 上的 J48 决策树中使用训练和测试。这是我的代码:
library("RWeka")
data <- read.csv("try.csv")
resultJ48 <- J48(classificationTry~., data)
summary(resultJ48)
但我想将我的数据分成 70% 的训练和 30% 的测试,我该如何使用 J48 算法来做到这一点?
非常感谢!
我想在 R 上的 J48 决策树中使用训练和测试。这是我的代码:
library("RWeka")
data <- read.csv("try.csv")
resultJ48 <- J48(classificationTry~., data)
summary(resultJ48)
但我想将我的数据分成 70% 的训练和 30% 的测试,我该如何使用 J48 算法来做到这一点?
非常感谢!
使用包的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)
它不在 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 中实现。希望能帮助到你 :)
如果你不想使用 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)