Я хотел бы использовать KSVM из пакета kernlab для R с взвешенными классами (или несбалансированными классами), но функция не распознает вектор и выдает ошибку .local(x, ...)
.
Я создал именованный вектор, копируя и вставляя уровни кадра данных TRAIN для переменной класса данных (z = "отрицательный", "положительный", "неопределенный"), затем я предоставил этот вектор в ksvm, как написано в руководство по функции (даже если нет примеров для несбалансированного анализа). Однако я получил ошибку с ошибкой.
Я также попытался дать вектор непосредственно в функции, как указано в посте ( Синтаксис класса веса в Kernlab? ), но была дана та же ошибка.
Затем я попытался дать оценку каждому классу, также это не сработало.
>
# define named vector
> VECT = c(1.0, 0.5, 0.7)
> names(VECT) = c("negative", "positive", "uncertain")
> VECT
negative positive uncertain
1.0 0.5 0.7
# show levels of dataframe
> unique(TRAIN$z)
[1] negative positive uncertain
Levels: negative positive uncertain
# run model with named vector
> mod = ksvm(z ~ a+b, data = TRAIN,
+ type = "C-svc",
+ kernel = "rbfdot",
+ kpar = "automatic",
+ C = 1,
+ prob.model = TRUE,
+ class.weights = VECT
+ )
Error in .local(x, ...) :
At least one level name is missing or misspelled.
# second approach
> mod = ksvm(cons ~ mr+fcn, data = TRAIN,
+ type = "C-svc",
+ kernel = "rbfdot",
+ kpar = "automatic",
+ C = 1,
+ prob.model = TRUE,
+ class.weights = c("negative" = 0.5,
+ "positive" = 1,
+ "uncertain" = 0.7)
+ )
Error in .local(x, ...) :
At least one level name is missing or misspelled.
# third approach
> VECT = c(1, 10, 5)
> names(VECT) = c("negative", "positive", "uncertain")
> VECT
negative positive uncertain
1 10 5
> mod = ksvm(cons ~ mr+fcn, data = TRAIN,
+ type = "C-svc",
+ kernel = "rbfdot",
+ kpar = "automatic",
+ C = c(0.5, 1, 0.7),
+ prob.model = TRUE,
+ class.weights = VECT
+ )
Error in .local(x, ...) :
At least one level name is missing or misspelled.
Итак, я ожидал полную модель, вместо этого я получил Error in .local(x, ...) :
At least one level name is missing or misspelled
.
Поскольку существует только три значения для переменной z, и я вставил их в
VECT, как это может быть ошибкой?
Как правильно выполнить несбалансированный анализ SVM?
Спасибо,