Ошибка при попытке сделать перекрестную проверку после дерева классификации - PullRequest
1 голос
/ 07 апреля 2019

Я пытаюсь запустить простое дерево классификации, используя пакет дерева.Я взял код из учебника, скопировал один за другим, но он не работает, независимо от того, что я делаю.

library(ISLR)
library(tree)
C = Carseats
C$HighSales = ifelse(C$Sales<=8,"No","Yes")
C = C[,-1]

set.seed(2)
train = sample(1:nrow(C), 200)
carseats.test = C[-train,]
high.test = C$HighSales[-train]

tree.carseats = tree(HighSales~., C, subset = train)
tree.predict = predict(tree.carseats, carseats.test, type = "class")
table(tree.predict,high.test)
(93+48)/200

set.seed(3)
cv.cs = cv.tree(tree.carseats, FUN = prune.misclass)

I am getting the following error:

Error in as.data.frame.default(data, optional = TRUE) : 
  cannot coerce class ‘"function"’ to a data.frame

Я посмотрел на помощь функции.Для этого требуется объект дерева, который я помещаю внутрь.

В чем может быть проблема?Код идентичен учебнику и другим веб-сайтам, цитирующим книгу.

1 Ответ

1 голос
/ 07 апреля 2019

Есть две проблемы.Один относится к формуле в tree:

формула - выражение формулы.Левая часть (ответ) должна быть либо числовым вектором, когда будет построено дерево регрессии, либо коэффициентом, если дерево классификации получено .Правая часть должна быть последовательностью числовых или факторных переменных, разделенных знаком +;не должно быть условий взаимодействия.И то и другое .и - разрешены: деревья регрессии могут иметь смещенные члены.

Итак, вместо этого мы должны иметь

C$HighSales <- factor(ifelse(C$Sales <= 8, "No", "Yes"))

Далее, есть проблема с тем, как cv.tree работает с переменными (см здесь ).Делать что-то вроде

mydf <- C
tree.carseats <- tree(HighSales ~ ., mydf, subset = train)

работает.Проблема в том, что есть функция с именем C, и cv.tree относится именно к этой функции, а не к вашему набору данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...