关于在 R 中拟合分类树的问题

Posted

技术标签:

【中文标题】关于在 R 中拟合分类树的问题【英文标题】:Problem about fitting classification trees in R 【发布时间】:2021-04-04 16:39:40 【问题描述】:

我正在使用数据集 Carseats 来适应分类树。我在这里所做的是尝试创建一个新变量“High”来指示销售额是高还是低,然后使用所有其他变量来预测变量“High”。

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

但是我有两个问题:

    当我运行上面的 tree() 函数时,我很容易得到对象“tree.carseats”以及警告消息“In tree(High ~ . - Sales, Carseats):NAs 由强制引入”。我用 any(is.na()) 检查了这个模型中的所有变量,没有发现 NA。那么这个警告信息有什么问题呢?

    当我运行 summary() 函数时,我失败并得到错误信息: “y 中的错误 - frame$yval[object$where] : 二元运算符的非数字参数" 这个错误的原因是什么?

【问题讨论】:

【参考方案1】:

首先,不要attach,这是R中最没用的指令,而且有潜在的危险。

关于警告,可以通过将High强制转换为因子来解决。

library(ISLR)
library(tree)

str(Carseats)

Carseats$High <- factor(ifelse(Carseats$Sales <= 8, "No", "Yes"))
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" 
#[6] "Advertising" "Age"         "US"         
#Number of terminal nodes:  27 
#Residual mean deviance:  0.4575 = 170.7 / 373 
#Misclassification error rate: 0.09 = 36 / 400 

【讨论】:

感谢您的回答,但它不适合我... @kaiyuwei "doesn't work" 不是很清楚,到底是什么问题? 与以前相同的错误消息。 “在树中(高 ~ . - Sales, Carseats):强制引入的 NA”和“y 中的错误 - frame$yval[object$where]:二元运算符的非数字参数” @kaiyuwei 你在使用包ISLR中的数据集Carseats吗?如果是,您是否尝试过关闭并重新启动 R?我的答案中的代码不会向我抛出错误或警告,我无法重现该错误。仅当 High 不是一个因素时才会出现有关 NA 的警告。 @kaiyuwei 我已经添加了summary的输出。

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

Gradient Boosting Decision Tree梯度决策提升树

02. 基本分类:基于决策树的分类

决策树算法之分类回归树 CART(Classification and Regression Trees)

R语言基于R语言的数据挖掘之决策树

关于SAMME.R的一些问题

可能过度拟合的分类树,但具有稳定的预测误差