2017-01-13 8 views
1

사용자 정의 커널을 사용하여 svm을 빌드하려고합니다. 일반적으로 나는 R 패키지 kernlab을 사용합니다. 다른 커널을 시험해보고 하이퍼 파라미터를 조정하고 싶으므로 좋은 패키지 mlr을 사용하고 싶습니다. 그러나 필자가 볼 수있는 한 ksvm 학습자 ("classif.ksvm")에 맞춤 커널을 전달하는 커널 유형 옵션 "매트릭스"를 지원하지 않습니다.R 패키지 mlr : classif.ksvm의 사용자 정의 커널에 대한 옵션

문제를 해결할 계획이 있는지 아는 사람이 있습니까? 또는 튜닝 파라미터 및 리샘플링 메서드를위한 커스텀 커널과 래퍼를 허용하는 또 다른 패키지가있는 경우. 필자가 아는 한, 캐럿 패키지는 커스텀 커널을 사용하지 않는다.

+0

비슷한 경우 mlr에는'configureMlr (on.par.out.of.bounds = "quiet")'이 있습니다. 그러나이 경우'kernel = "matrix"라는 인자는 @Lars Kotthoff와 같이 학습자를 변경해야하는 방식으로 행동을 변경합니다. –

답변

3

지원할 계획이 없습니다. 당신은 아주 쉽게 이것을 지원하기 위해 커스텀 학습자를 정의 할 수 있습니다. classif.ksvm에는 두 가지 변경 사항이 있습니다 (테스트되지 않음). 그런 다음

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

, 계정에 새로운 커널을 취할 수있는 기차 기능을 변경 :

첫째, 커널 매개 변수의 새 매개 변수 값이 허용

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, ...) 
} 

이 데이터를 가정한다 당신은 작업을 통과하고 있습니다. 약간의 kludgy 인 사용자 정의 커널을 정의합니다 ...

+0

Lars에게 감사드립니다. 나는 그것을 밖으로 시도 할 것이다! – afh

+0

svm에서 jaccard 커널을 호출하는 방법에 대한 자습서를 친절하게 제공 할 수 있습니까? –

+0

AFAIK 이것은 R에서 구현되지 않습니다. –