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算法与随机森林对比