сравнивая производительность всех ядер ksvm сразу - PullRequest
0 голосов
/ 19 мая 2018

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

Прямо сейчас у меня есть базовая установка:

# call ksvm
model <-  ksvm(as.matrix(data[,1:10]),as.factor(data[,11]),type="C-svc",kernel="vanilladot",C=100,scaled=TRUE)
# calculate a1.am
a <- colSums(model@xmatrix[[1]] * model@coef[[1]])
a
# calculate a0
a0 <- -model@b
a0
# see what the model predicts
pred <- predict(model,data[,1:10])
pred
# see what fraction of the model's predictions match the actual classification
sum(pred == data[,11]) / nrow(data)

, и она выплевывает все прогнозы и метрику точности

[1] 0.8639144

В идеале мне нужна таблица, котораявыглядит так

kernel       accuracy
vanilladot   0.8639144
polydot      0.7285432
besseldot    1
...          ...

Существует ли быстрый и простой способ сделать это, или это единственный способ вручную создать таблицу с названием модели и метрикой точности, а затем распечатать или построить ее?

1 Ответ

0 голосов
/ 19 мая 2018

Вы можете перебрать все ядра в цикле for:

myKernels = c("vanilladot","polydot","besseldot")
results=list()
for(i in 1:length(myKernels)){
  # call ksvm using  kernel instead of linear
  model <-  ksvm(as.matrix(data[,1:10]),as.factor(data[,11]),type="C-svc",kernel=myKernels[[i]],C=100,scaled=TRUE)
  # calculate a1.am
  a <- colSums(model@xmatrix[[1]] * model@coef[[1]])
  a
  # calculate a0
  a0 <- -model@b
  a0
  # see what the model predicts
  pred <- predict(model,data[,1:10])
  pred
  # see what fraction of the model's predictions match the actual classification
  results[[i]]=data.table(kernel=myKernels[[i]],accuracy=sum(pred == data[,11]) / nrow(data))
}
rindlist(results)
...