прогнозировать с ошибкой пакета kernlab Ошибка в .local(object, ): тестовый вектор не соответствует модели R

Я тестирую пакет kernlab в задаче регрессии. Кажется, это обычная проблема — получить 'Error in .local(object, ...) : test vector does not match model ! при передаче объекта ksvm в функцию predict. Однако я только что нашел ответы на проблемы классификации или пользовательские ядра, которые не применимы к моей проблеме (я использую встроенный для регрессии). У меня заканчиваются идеи, мой пример кода:

data <- matrix(rnorm(200*10),200,10)
tr <- data[1:150,]
ts <- data[151:200,]

mod <- ksvm(x = tr[,-1],
            y = tr[,1],
            kernel = "rbfdot", type = 'nu-svr',
            kpar = "automatic", C = 60, cross = 3)

pred <- predict(mod, 
                ts
                )

person nopeva    schedule 24.09.2013    source источник


Ответы (2)


Вы забыли удалить переменную y в тестовом наборе, поэтому он терпит неудачу, потому что количество предикторов не совпадает. Это будет работать:

predict(mod,ts[,-1])
person nograpes    schedule 24.09.2013
comment
иногда функция требует ответа, иногда нет... спасибо! - person nopeva; 24.09.2013
comment
@eccehomo Когда требуется ответ? - person nograpes; 24.09.2013
comment
Я имел в виду другие пакеты, такие как caret. Например, если вы попробуете функцию trainс method = rf, вам также придется предоставить ответ для прогнозов. - person nopeva; 24.09.2013

Вы можете использовать pred <- predict(mod, ts), если ts является фреймом данных.

Это было бы

    data <- setNames(data.frame(matrix(rnorm(200*10),200,10)),
                     c("Y",paste("X", 1:9, sep = "")))
    tr <- data[1:150,]
    ts <- data[151:200,]

    mod <- ksvm(as.formula("Y ~ ."), data = tr,
        kernel = "rbfdot", type = 'nu-svr',
        kpar = "automatic", C = 60, cross = 3)

    pred <- predict(mod, ts)
person Ivalbert Pereira    schedule 17.02.2020