2016-04-20 13 views
0

Ich bin relativ neu in SVM in R. Ich habe ein SVM-Modell erstellt, das mit den Standardeinstellungen funktioniert, aber wenn ich versuche, die tune.svm() -Funktion zu verfeinern Parameter mit den gleichen Daten löst folgenden Fehler aus:Tuning Ein-Klasse-SVM-Klassifizierung R mit E1071 ERROR

"Fehler in if (tunecontrol $ cross> n) stop (sQuote (" cross ")," darf die Stichprobengröße nicht überschreiten! "): Das Argument hat die Länge Null "

Jede Hilfe sehr

die trainingDataFrameNoLabels geschätzt werden würde, ist ein 107 * 5 Datenrahmen ist hier der Code-Schnipsel, die ich benutze.

`

install.packages("e1071") 
install.packages("raster") 
install.packages("Rcpp") 
install.packages("rgdal") 
library("e1071") 
library("raster") 
require(raster) 
trainingData=read.csv(file="Z:/BIO650/Buttomus_Species_Distribution_Model/Working_Data/Training_And_Validation/Training_With_Data.csv",header = TRUE, sep=",") 
trainingDataFrame=data.frame(trainingData) 
trainingDataFrameNoLabels=trainingDataFrame[,2:6] 
svmModel=svm(trainingDataFrameNoLabels,y=NULL, method = "one-classification") 
tobj = tune.svm(x=trainingDataFrameNoLabels[1:50,],y=NULL, method = "one-classification",gamma = 10^(-6:-3), nu = 0.001:0.5) 

`

Antwort

0

Wenn Sie eine Liste der Proben in der Melodie() -Aufruf Referenzierung, wird es diesen Fehler werfen. Ich habe 1.000 zufällig generierte Proben und ich war auch verwirrt. Das war es, indem es auf eine Liste und nicht auf ein Element Bezug nahm. Es weiß nicht, was damit zu tun ist. In meinem Fall habe ich also zufällig einen der 1000 Sätze ausgewählt und benutzt (in diesem vereinfachten Beispiel, was komplizierter ist).

svm.tune.rslts <- tune(svm, TARGET~., data = aDf_norm.trainsml,nrepeat=8, 
         ranges = list(gamma = 2^(-9:10), cost = 2^(-9:10)), 
         tunecontrol = tune.control(sampling = "cross",cross=10)) 

rnd<-sample(1:1000,1) 
svm.tune.rslts <- tune(svm, TARGET~., data = aDf_norm.trainsml[[rnd]],nrepeat=8, 
         ranges = list(gamma = 2^(-9:10), cost = 2^(-9:10)), 
         tunecontrol = tune.control(sampling = "cross",cross=10))