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

Posted

技术标签:

【中文标题】R中的J48树 - 训练和测试分类【英文标题】:J48 tree in R - train and test classification 【发布时间】:2016-09-02 18:08:12 【问题描述】:

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

library("RWeka")

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

summary(resultJ48)

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

非常感谢!

【问题讨论】:

无替换数据采样怎么样(见?sample 【参考方案1】:

使用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)

【讨论】:

dataTest.pred是什么意思?您只是将所有信息放在一起在 dataTest 中创建 pred 以将结果保存到它? 还有,我怎么能看到这样的结果摘要? 使用summary(resultJ48) 获得“weka-specific”输出“正确分类的实例....” --- dataTest.pred 保存训练分类器的输出,应用于 30% 训练数据。我认为您可能想在您的测试数据上使用 J48 的输出。所以我只是写了一些对我来说很自然的东西。我无法推断您实际上想要做什么,因为您只是在问题中写了一些非常通用的东西。 table() 只是比较 testdata 和预测的 testdata 属性值。简单的混淆矩阵。【参考方案2】:

您可能想check the createDataPartition in caret package。

【讨论】:

【参考方案3】:

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

【讨论】:

【参考方案4】:

如果你不想使用 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)

【讨论】:

以上是关于R中的J48树 - 训练和测试分类的主要内容,如果未能解决你的问题,请参考以下文章

weka中用J48(即C4.5)算法对数据集进行训练建模与测试,结果不是很理想,

如何使用 Weka API 在 J48 / C4.5 上进行 10 倍交叉验证后保存最佳树

R语言基于Bagging算法(融合多个决策树)构建集成学习Bagging分类模型并评估模型在测试集和训练集上的分类效果(accurayF1偏差Deviance):Bagging算法与随机森林对比

训练和测试集在构建决策树和使用它进行分类中的作用

Weka:如何在 J48 决策树中实现代理拆分?

为啥决策树显示正确分类而某些实例被错误分类