【问题标题】:Decision tree Analysis issue决策树分析问题
【发布时间】:2017-03-06 21:10:23
【问题描述】:

我目前正在研究 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)

【问题讨论】:

  • 为什么它们应该是一样的?
  • 因为它与我在两种情况下应用的算法相同(决策树)
  • 和你随机抽样的训练和测试数据,应该一样吗?
  • 不是真的,但通常应该有一些相似之处。样品是同质的......
  • cancer 的大小是多少?为什么随机分配类状态的结果会产生类似的模型?

标签: r tree classification data-mining j48


【解决方案1】:

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

即使任何给定的算法都会产生具有不同输入参数的不同决策树(修剪/未修剪、节点中要拆分的最少 # 个数据点等)。

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

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

以下是 iris 数据集上的示例,包含几个 R 决策树模型和 RWeka 决策树模型(从绘制的树可以看出,不同的模型使用相同的训练数据集 iris 生成不同的树)。

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

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

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

【讨论】:

    【解决方案2】:

    您在 R 中的代码中在这里选择了一个随机样本:ind

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-04
      • 2020-08-25
      • 2011-05-14
      • 2021-03-17
      • 2020-04-15
      • 2013-01-24
      • 2018-09-27
      相关资源
      最近更新 更多