В задании нам предлагается выполнить кросс-проверку на модели CART. Я пробовал использовать функцию cvFit
от cvTools
, но получил странное сообщение об ошибке. Вот минимальный пример:Перекрестная проверка модели CART
library(rpart)
library(cvTools)
data(iris)
cvFit(rpart(formula=Species~., data=iris))
Ошибка Я вижу это:
Error in nobs(y) : argument "y" is missing, with no default
И в traceback()
:
5: nobs(y)
4: cvFit.call(call, data = data, x = x, y = y, cost = cost, K = K,
R = R, foldType = foldType, folds = folds, names = names,
predictArgs = predictArgs, costArgs = costArgs, envir = envir,
seed = seed)
3: cvFit(call, data = data, x = x, y = y, cost = cost, K = K, R = R,
foldType = foldType, folds = folds, names = names, predictArgs = predictArgs,
costArgs = costArgs, envir = envir, seed = seed)
2: cvFit.default(rpart(formula = Species ~ ., data = iris))
1: cvFit(rpart(formula = Species ~ ., data = iris))
Похоже, что y
является обязательным для cvFit.default
. Но:
> cvFit(rpart(formula=Species~., data=iris), y=iris$Species)
Error in cvFit.call(call, data = data, x = x, y = y, cost = cost, K = K, :
'x' must have 0 observations
Что я делаю неправильно? Какой пакет позволил бы мне сделать кросс-валидацию с деревом CART без необходимости самостоятельно ее кодировать? (Я ооочень ленивый ...)
Если порыться в документации ** cvTools ** оказывается что большинство этих инструментов были построены с учетом переменных непрерывного ответа, а не дискретных. Возможно, вы можете заставить его работать, но похоже, что вам нужно будет предоставить свою собственную функцию «cost» для вычисления ошибки классификации. – joran
@joran: Именно - спасибо! См. [Мой собственный ответ] (http://stackoverflow.com/a/16724706/946850). – krlmlr