R中的分类树多次

Posted

技术标签:

【中文标题】R中的分类树多次【英文标题】:Classification Tree in R multiple times 【发布时间】:2017-10-15 07:05:07 【问题描述】:

使用函数 tree() 和以下代码在 R 中运行分类树时遇到问题:

library(tree)

library(ISLR)

attach(Carseats)

High=ifelse(Sales<=8, "No", "Yes") 

Carseats=data.frame(Carseats, High)

tree.carseats=tree(High~.-Sales, Carseats)


summary(tree.carseats)

问题是,当我第一次将所有代码一起运行时,我得到的结果与我所指的书(统计学习简介)相同:

Classification tree:
tree(formula = High ~ . - Sales, data = Carseats)
Variables actually used in tree construction:
[1] "ShelveLoc"   "Price"       "Income"      "CompPrice"   "Population"  "Advertising" "Age"         "US"         
Number of terminal nodes:  27 
Residual mean deviance:  0.4575 = 170.7 / 373 
Misclassification error rate: 0.09 = 36 / 400 

但是,当我再次运行相同的代码时,树并没有提供任何更有意义的结果:

Classification tree:
tree(formula = High ~ . - Sales, data = Carseats)
Variables actually used in tree construction:
[1] "High.1"
Number of terminal nodes:  2 
Residual mean deviance:  0 = 0 / 398 
Misclassification error rate: 0 = 0 / 400 

谁能解释一下这是怎么回事?

谢谢。

【问题讨论】:

我运行了你列出的所有代码,然后又运行了tree.carseats = tree(High~.-Sales, Carseats)。它给出了与第一次完全相同的输出。我不知道您身边发生了什么,但我确实看到在您的第二次运行中只使用了 1 个变量 【参考方案1】:

已经很久了,但我仍然希望我的回答可以帮助你和其他遇到同样问题的人。

当您将新的 data.frame 分配到与整个数据集相同的名称时,我认为问题出在变量名称“Carseats”中。我确实将名称更改为“汽车”(例如)并且它起作用了:

 library(tree)
 library(ISLR)
 attach(Carseats)
 High = ifelse(Sales <= 8, "No", "Yes")
 Car = data.frame(Carseats, High)
 tree.carseats = tree(High~.-Sales, Car)
 summary(tree.carseats)

或者你可以使用下面的其他方式:

library(tree)
library(ISLR)
attach(Carseats)
High = ifelse(Sales <= 8, "No", "Yes")
New = cbind(Carseats, High)
tree.carseats = tree(High~.-Sales, New)
summary(tree.carseats)

我使用 cbind() 将 Carseats 数据集和 High 组合成一个名为“New”的新数据集。

也许这个问题(如果你和书一样)来自书(ISLR)没有提到的Rstudio版本的差异。

希望这会有所帮助! :)

【讨论】:

以上是关于R中的分类树多次的主要内容,如果未能解决你的问题,请参考以下文章

R 中的分类树限制为 32 个级别

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

将 OneHotEncoder 用于决策树分类器中的分类特征

有没有办法在 R 中获取用于随机森林树分类的实例?

R语言数据分析|随机森林

文档分类的决策树