Ошибка в 1:nrow(newdata): аргумент длины 0 при использовании прогноза SVM

Я пытаюсь предсказать значения A на основе модели, обученной svm. Вот как выглядят мои обучающие и тестовые данные:

A     B    C     D
r00  r01  r02   r03
...  ...  ...   ...

Фрагмент кода приведен ниже:

featvecs = ["B"]

for (f in 1:nrow(featvecs)) {
    tuned <- svm(A ~., data = train[,c("A",featvecs[f,])], gamma = 0.01, cost = 10, kernel= "radial")
    svm.predict <- predict(tuned, test[,featvecs[f,]])
}

Я получаю следующую ошибку для строки svm.predict и не совсем понимаю, почему?

Error in 1:nrow(newdata) : argument of length 0

Структура данных поезда:

structure(list(A = structure(6L, .Label = c("'1'", 
"'2'", "'3'" ), class = "factor"), B =  structure(15L, .Label = c(...)...)

Структура тестовых данных:

structure(list(A = structure(2L, .Label = c("'1'", 
"'2'", "'3'" ), class = "factor"), B =  structure(17L, .Label = c(...)...)

person user2991421    schedule 13.10.2016    source источник
comment
Полезно, если вы можете привести небольшой пример всего процесса, через который вы проходите, особенно небольшое подмножество ваших данных dput(head(train)).   -  person zacdav    schedule 13.10.2016


Ответы (1)


Я подозреваю, что featvecs имеет только один столбец, поэтому featvecs[f,] имеет длину 1.

Затем test[,featvecs[f,]] выводит вектор вместо ожидаемого data.frame (см. разницу между mtcars[, "mpg"] и mtcars[, "mpg", drop = FALSE]), а nrow(), примененный к вектору, выводит NULL: 1:nrow(newdata) в исходном коде svm.predict() дает 1:NULL, что вызывает вашу ошибку.

Попробуйте добавить drop = FALSE к test[,featvecs[f,], drop = FALSE], чтобы получить data.frame.

person Aurèle    schedule 13.10.2016
comment
Огромное спасибо. Работал как шарм. - person user2991421; 13.10.2016