2016-05-18 16 views
1

Ich habe das kernlab-Paket verwendet und hatte Probleme mit der Funktion ksvm/predict mit vorberechneten Kernen.Fehler bei der Verwendung des Kernlab-Pakets mit vorberechneten Kernen

Die Fehlermeldung bekam ich habe, ist:

> ksvm.mod <- ksvm(trainingset.outer, traininglabels.outer, kernel = "matrix",type="C-svc", C = 60, prob.model = TRUE) 
> temp <- predict(ksvm.mod, test.kernel.outer) 
Error in .local(object, ...) : test vector does not match model ! 

ich für den Ort des Fehlers auf den Quellcode ausgesehen haben und festgestellt, dass es Unterschiede in den Spalten

newnrows <- nrow(newdata) 
newncols <- ncol(newdata) 
if(!is(newdata,"kernelMatrix") && !is.null(xmatrix(object))){ 
    if(is(xmatrix(object),"list") && is(xmatrix(object)[[1]],"matrix")) oldco <- ncol(xmatrix(object)[[1]]) 
    if(is(xmatrix(object),"matrix")) oldco <- ncol(xmatrix(object)) 
    if (oldco != newncols) stop ("test vector does not match model !") 
} 

jedoch fällig ist, die Objekte I gleiche Spalten verwendet haben

> ncol(trainingset.outer) 
[1] 1498 
> ncol(test.kernel.outer) 
[1] 1498 

Dann habe, habe ich an der Zusammenarbeit sah lumns nach den Modellen gespeichert und fand die folgenden:

> ncol(xmatrix(ksvm.mod)[[1]]) 
Error in xmatrix(ksvm.mod)[[1]] : subscript out of bounds 
> xmatrix(ksvm.mod)[[1]] 
Error in xmatrix(ksvm.mod)[[1]] : subscript out of bounds 
> xmatrix(ksvm.mod) 
<0 x 0 matrix> 
> ?xmatrix 
> ksvm.mod 
Support Vector Machine object of class "ksvm" 

SV type: C-svc (classification) 
parameter : cost C = 60 

[1] " Kernel matrix used as input." 

Number of Support Vectors : 831 

Objective Function Value : -211534.1 
Training error : 0.257677 
Probability model included. ​ 
> ncol(xmatrix(gene)[[1]]) # for dataframes used without precomputed kernels 
[1] 172 

Ich denke, das Modell nicht jedes Objekt gespeichert haben, bin ich in Verständnis korrekt? Da es im Web keine guten Beispiele für die Verwendung des Pakets mit vorberechneten Kernen gibt, schreibe ich für Ihre Hilfe.

PS: Ich werde versuchen, die Daten für Tests zur Verfügung zu stellen, falls erforderlich.

Antwort

0

Sie tun es halb richtig. Das Vorhersageobjekt möchte nur den Kernel-Abstand zwischen newdata und Support-Vektoren, aber es extrahiert sie nicht selbst, Sie müssen sie selbst übergeben.

Versuchen Sie folgendes:

ksvm.mod <- ksvm(trainingset.outer, traininglabels.outer, kernel = "matrix",type="C-svc", C = 60, prob.model = TRUE) 
temp <- predict(ksvm.mod, test.kernel.outer[, SVindex(ksvm.mod)) 

Ich bin hier test.kernel.outer unter der Annahme, ein kernelMatrix ist, die den Kernel Abstand zwischen Testdaten (Zeilen) und Zugdaten (Spalten) misst.

Verwandte Themen