W zadaniu, jesteśmy proszeni o wykonanie sprawdzenia krzyżowego w modelu CART. Próbowałem używać funkcji cvFit
z cvTools
, ale otrzymałem dziwny komunikat o błędzie. Oto minimalne przykład:Cross-validating a CART model
library(rpart)
library(cvTools)
data(iris)
cvFit(rpart(formula=Species~., data=iris))
Błąd widzę jest:
Error in nobs(y) : argument "y" is missing, with no default
a 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))
Wygląda że y
jest obowiązkowe dla cvFit.default
. Ale:
> 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
Co robię źle? Który pakiet pozwoliłby mi przeprowadzić walidację krzyżową z drzewem CART bez konieczności samodzielnego kodowania? (Jestem leniwy taaak ...)
Jeśli kopać w dokumentacji ** ** wydaje cvTools większość narzędzi została zbudowana z myślą o ciągłych zmiennych odpowiedzi, a nie dyskretnych. Prawdopodobnie mógłbyś sprawić, żeby działało, ale wygląda na to, że musisz podać swoją własną funkcję "kosztu", aby obliczyć błąd klasyfikacji. – joran
@joran: Dokładnie - dziękuję! Zobacz [moja własna odpowiedź] (http://stackoverflow.com/a/16724706/946850). – krlmlr