Ошибка имени уровня Kernlab в ksvm class.weights - PullRequest
0 голосов
/ 18 июня 2019

Я хотел бы использовать 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?

Спасибо,

...