Классификация SVM с ошибкой каретки (базовая)

Я, вероятно, делаю очень простую (и глупую) ошибку здесь, но я не могу понять это. Я играю с некоторыми данными из Kaggle ( Digit Recognizer) и пытаюсь использовать SVM с пакетом Caret для выполнения некоторой классификации. Если я просто вставлю значения метки в функцию в виде числового типа, train По-видимому, функция в карете по умолчанию регрессивна, а производительность довольно плохая. Итак, что я попытался затем, чтобы преобразовать его в фактор с помощью функции factor() и попробуйте запустить классификацию SVM. Вот код, где я генерирую фиктивные данные и затем подключаю их к Caret:

library(caret)
library(doMC)
registerDoMC(cores = 4)

ytrain <- factor(sample(0:9, 1000, replace=TRUE))
xtrain <- matrix(runif(252 * 1000,0 , 255), 1000, 252)

preProcValues <- preProcess(xtrain, method = c("center", "scale"))
transformerdxtrain <- predict(preProcValues, xtrain)

fitControl <- trainControl(method = "repeatedcv", number = 10, repeats = 10)
svmFit <- train(transformerdxtrain[1:10,], ytrain[1:10], method = "svmradial")

Я получаю эту ошибку:

Error in kernelMult(kernelf(object), newdata, xmatrix(object)[[p]], coef(object)[[p]]) : 
  dims [product 20] do not match the length of object [0]
In addition: Warning messages:
1: In train.default(transformerdxtrain[1:10, ], ytrain[1:10], method = "svmradial") :
  At least one of the class levels are not valid R variables names; This may cause errors if class probabilities are generated because the variables names will be converted to: X0, X1, X2, X3, X4, X5, X6, X7, X8, X9
2: In nominalTrainWorkflow(dat = trainData, info = trainInfo, method = method,  :
  There were missing values in resampled performance measures.

Может кто-нибудь сказать мне, что я делаю не так? Спасибо!

1 ответ

Решение

У вас есть 10 различных классов, и все же вы включаете только 10 случаев в train(), Это означает, что при повторной выборке у вас часто не будет всех 10 классов в отдельных экземплярах вашего классификатора. train() испытывает затруднения при объединении результатов этих SVM различной категории.

Это можно исправить с помощью некоторого сочетания увеличения количества дел, уменьшения количества классов или даже использования другого классификатора.

Мне было сложно использовать каретку в случае использования распознавания цифр. Я думаю, что часть проблемы заключается в том, что данные на этикетке числовые. Когда каретка пытается создать из него переменные, они заканчивают тем, что начинают с числа, которое действительно не принимается в качестве переменной R.

В моем случае я обошел это, дискретизируя данные этикеток с помощью dplyr. Предполагается, что ваши обучающие данные помещены во фрейм данных "train".

описать label до label2

поезд $label2=dplyr::recode(поезд $label, 0= "ноль", 1= "один", 2= "два",3= "три",4= "четыре",5= "пять",6= "шесть",7= "семь",8= "восемь",9= "девять")

переставьте столбцы, чтобы вы могли видеть новую метку2 рядом с исходной меткой

поезд<- поезд [, c((1),(786),(2:785))] голова (поезд)

изменить метку, чтобы она была факторизованной версией дискретизированной метки2

поезд $ метка <- коэффициент (поезд $ метка2)

kill label2, поскольку это временная переменная

поезд $ label2 <- NULL

посмотреть результат

голова (поезд)

Другие вопросы по тегам