决策树分析问题

时间:2016-10-25 00:11:54

标签: r tree classification data-mining j48

我正在研究R的一个问题。我想在数据集上应用分类树,但结果似乎是错误的,因为我已经使用Weka解决了同样的问题,我得到了不同的结果

我得到了一个包含在csv文件中的数据集如下:

age,menopause,tumor.size,inv.nodes,node.caps,deg.malig,breast,breast.quad,irradiat,class
40-49,premeno,15-19,0-2,yes,3,right,left_up,no,recurrence-events
50-59,ge40,15-19,0-2,no,1,right,central,no,no-recurrence-events
50-59,ge40,35-39,0-2,no,2,left,left_low,no,recurrence-events
40-49,premeno,35-39,0-2,yes,3,right,left_low,yes,no-recurrence-events
40-49,premeno,30-34,3-5,yes,2,left,right_up,no,recurrence-events

这是脚本:

#Open r file
cancer = read.csv("cancer.csv")
#Data Exploration
summary(cancer)
str(cancer)
#Divide into test and train sets 
set.seed(1234) 
ind <- sample(2, nrow(cancer), replace=TRUE, prob=c(0.7, 0.3))
trainData <- cancer[ind==1,]
testData <- cancer[ind==2,]
#Build the model
library(party)
cancermodel <- class ~ age + menopause + tumor.size + inv.nodes + node.caps + deg.malig + breast + breast.quad + irradiat
cancertree <- ctree(cancermodel,trainData)
table(predict(cancertree),trainData$class)
#Draw tree
plot(cancertree, type="simple")
#Testset
testPred <- predict(cancertree, newdata = testData)
table(testPred, testData$class)

2 个答案:

答案 0 :(得分:2)

决策树在R(树,rpart,party)和Weka(J48,LMT,DecisionStump)中有许多不同的算法实现,并且不同的算法可能在同一数据集上产生不同的决策树(一些工作通过最大化信息增益/ gini指数,有些使用卡方统计的假设检验)。

即使任何给定的算法也会产生不同的决策树,这些决策树具有不同的输入参数(被修剪/未修剪,节点中的最小#datapoints以进行分割等)。

另外,正如@RomRom所指出的,决策树不是一个非常健壮的模型,因为训练数据的微小变化可能会完全输出不同的树。

记住所有这些,很难在R和Weka中生成相同的决策树,即使可以,也必须非常仔细地调整模型参数,这可能需要大量的实验。

以下是虹膜数据集的示例,其中包含一些R决策树模型和RWeka决策树模型(从绘制的树中可以看出,不同的模型生成具有相同训练数据集虹膜的不同树)。

library(RWeka)
m1 <- J48(Species ~ ., data = iris)
if(require("partykit", quietly = TRUE)) plot(m1)

enter image description here

library(rpart)
m2 <- rpart(Species ~ ., data = iris)
library(rpart.plot)
prp(m2)

enter image description here

library(party)
m3 <- ctree(Species ~ ., data = iris)
plot(m3)

enter image description here

答案 1 :(得分:1)

你在R:ind&lt; - sample(2,nrow(cancer),replace = TRUE,prob = c(0.7,0.3))中的代码中选择了一个随机样本

你是如何在Weka中复制和使用相同的随机样本的?树是非常不稳定的模型,可以随着不同的数据文件快速变化。