R пакет mlr: опция для пользовательских ядер в classif.ksvm

Я хочу построить svm с кастомным ядром. Обычно я использую пакет R kernlab для этого. Поскольку я хочу опробовать разные ядра и настроить гиперпараметры, я хотел использовать красивый пакет mlr, Однако, насколько я вижу, он не поддерживает опцию типа ядра "матрица" для передачи пользовательского ядра ученику ksvm ("classif.ksvm").

Кто-нибудь знает, есть ли план исправить это? Или, если есть другой пакет, который позволяет использовать собственные ядра и красивые оболочки для настройки параметров и методов передискретизации. Насколько мне известно, пакет caret также не принимает пользовательских ядер.

1 ответ

Решение

У нас нет планов поддержать это. Вы можете определить индивидуального ученика, чтобы поддержать это довольно легко, хотя. Есть два изменения в classif.ksvm насколько я вижу (не проверено).

Сначала разрешите новое значение параметра для параметра ядра:

makeDiscreteLearnerParam(id = "kernel", default = "rbfdot",
    values = c("vanilladot", "polydot", "rbfdot", "tanhdot", "laplacedot", "besseldot", "anovadot", "splinedot", "matrix"))

Затем измените функцию train, чтобы учесть новое ядро:

trainLearner.classif.ksvm = function(.learner, .task, .subset, .weights = NULL, degree, offset, scale, sigma, order, length, lambda, normalized,  ...) {
  kpar = learnerArgsToControl(list, degree, offset, scale, sigma, order, length, lambda, normalized)
  f = getTaskFormula(.task)
  pm = .learner$predict.type == "prob"
  parlist = list(...)
  if (base::length(kpar) > 0L)
    kernlab::ksvm(f, data = getTaskData(.task, .subset), kpar = kpar, prob.model = pm, ...)
  else if (parlist$kernel == "matrix")
    kernlab::ksvm(kernlab::as.kernelMatrix(getTaskData(.task, .subset)), data = getTaskData(.task, .subset), prob.model = pm, ...)
  else
    kernlab::ksvm(f, data = getTaskData(.task, .subset), prob.model = pm, ...)
}

Это предполагает, что данные, которые вы передаете в задаче, определяют пользовательское ядро, что немного глупо...

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