SVM в R - классифицировать новый экземпляр - PullRequest
0 голосов
/ 29 октября 2018

Я построил свою модель SVM, используя код ниже:

X1 = c(2, 2, -2, -2, 1, 1, -1, -1)
X2 = c(2, -2, -2, 2, 1, -1, -1, 1)
Y = c(1, 1, 1, 1, 2, 2, 2, 2)
alldata = data.frame(X1, X2, Y)
svm_model <- svm(alldata$Y ~ . , kernel = "radial", type = "C-classification", alldata)

Теперь я хочу классифицировать новый экземпляр со значениями (4,5). Я попытался с помощью команды:

predict(svm_model, c(4,5))

но я получаю следующую ошибку:

Error in dimnames(x) <- dn : 
  length of 'dimnames' [2] not equal to array extent

Следующее, что я сделал, это создал небольшой фрейм данных, как показано ниже, попытался классифицировать и получил результат, показанный:

b1 = c(4)
b2 = c(5)
b = data.frame(b1,b2)
predict(svm_model, b)
   1 <NA> <NA> <NA> <NA> <NA> <NA> <NA> 
   1    1    1    1    2    2    2    2 

Где я совершаю ошибку?

Ответы [ 2 ]

0 голосов
/ 30 октября 2018

Для прогнозирования вам необходимо иметь одинаковые переменные X1 и X2 в вашем фрейме данных 'b'. Замените b1 и b2 в вашем коде на X1 и X2.

X1 = c(4)
X2 = c(5)
b = data.frame(X1,X2)

predict(svm_model, b)
0 голосов
/ 29 октября 2018

Это сообщение об ошибке указывает на то, что c(4,5) не содержит ту же информацию, что и в alldata, которую вы используете для обучения. Точнее, colnames() - это не одно и то же.

Создав новый фрейм данных:

new_data <- data.frame(X1 = 4, X2 = 5) вы сможете получить ожидаемый результат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...