2015-08-15 3 views
4

Я подготовил модель svm. Я хотел бы протестировать его, но я столкнулся с ошибкой в ​​функции pred(). Для простоты, здесь я разделил данные теста и тренировки здесь в неслучайном разбиении на 70/30.Ошибка в предсказании svm

library(e1071) 

train <- mydata[1:9731, ] 
test <- mydata[(9731+1):13901, ] 

mysvm <- svm(formula = outcome ~ BW + GA, data = train, type = "C-classification", kernel = "linear", gamma = 1, cost = 2)  
predict(mysvm, newdata=test) 

Сообщение об ошибке из предсказать() является:

Error in names(ret2) <- rowns : 
    'names' attribute [4170] must be the same length as the vector [4106] 

Глава данных выглядит ...

> head(mydata) 
    BW outcome GA 
1 2.00 Survived 34 
2 2.81 Survived 41 
3 1.85 Survived 35 
4 2.23 Survived 32 
5 1.21 Survived 34 
6 2.91 Survived 37 

This user было то же самое сообщение об ошибке. Проблема заключалась в том, что он/она не использовал dataframes. Это не проблема в моем случае.

> class(test) 
[1] "data.frame" 
> class(train) 
[1] "data.frame" 

Я не уверен, почему эта ошибка происходит или что это значит. Отслеживание() и отладка (предсказание) также не помогли.

+1

Вы можете показать 'head (duput())' ваших исходных данных? (mydata) – erasmortg

ответ

6

Трудно представить решение, потому что вы не предоставили свои данные. Тем не менее, я думаю, у вас есть 64 строки с NA значениями для GA или BW в тестовых данных. Если вы удаляете строки с любой NAS, я думаю, что ваш прогноз будет работать:

predict(mysvm, newdata = test[!rowSums(is.na(test)), ]) 

Это, конечно, означает, что вы не получите никаких прогнозов для этих строк. Как вы справляетесь с этим, зависит от вас (например, вы могли бы приписать отсутствующие значения или все, что подходит для вашего конкретного случая использования).

+0

Спасибо! Вы правильно определили проблему. – Nirvan

-1

Я использую:

< модель - SVM (у = метки, х = данные, ...)

< ПРЕД - предсказывающие (модель, данные)

и все в порядке.

Смежные вопросы