关于在 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梯度决策提升树