2017-01-13 23 views
1

svmをカスタムカーネルでビルドしたいと思っています。 通常、私はそのためにRパッケージkernlabを使用しています。 異なるカーネルを試してハイパーパラメータを調整したいので、素敵なパッケージmlrを使いたいと思っていました。しかし、わかっている限り、ksvmラーナー( "classif.ksvm")にカスタムカーネルを渡すためのカーネルタイプのオプション "matrix"はサポートしていません。Rパッケージmlr:classif.ksvmのカスタムカーネルのオプション

誰かがそれを修正する計画があるかどうかを知っていますか?あるいは、カスタムカーネルとパラメータやリサンプリングメソッドをチューニングするための素晴らしいラッパーを可能にする別のパッケージがある場合。私の知る限り、キャレットパッケージはカスタムカーネルを使用していません。

+0

同様のケースでは、mlrに 'configureMlr(on.par.out.of.bounds =" quiet ")'があります。しかしこの場合、引数 'kernel =" matrix "は、@Lars Kotthoffのように学習者を変えなければならないような振舞いを変えます。 –

答えて

3

私たちはそれをサポートする予定はありません。あなたはこれを非常に簡単にサポートするカスタム学習者を定義することができます。 classif.ksvmには2つの変更があります(テストされていません)。その後

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

これは、データと仮定していますあなたはこのタスクを渡しています。カスタムカーネルを定義しています。これはちょっとしたクルージングです...

+0

Larsに感謝します。私はそれを試してみましょう! – afh

+0

svmでjaccard kernelを起動する方法に関するチュートリアルを親切に教えていただけますか? –

+0

AFAIKこれはRでは実装されていません。 –