R中拟合分类树的问题

问题描述

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

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

我有两个问题:

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

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

解决方法

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

至于警告,可以通过强制 High 为 factor 来解决。

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