使用e1071 ERROR调整单类SVM分类R.

时间:2016-04-20 15:42:11

标签: svm libsvm

我对R中的SVM相对较新。我创建了一个SVM模型,可以正常使用默认设置但是当我尝试使用tune.svm()函数来优化具有相同数据的参数时,会抛出以下错误:

"错误if(tunecontrol $ cross> n)停止(sQuote(" cross"),"不得超过采样大小!"):参数是长度为零"

非常感谢任何帮助

trainingDataFrameNoLabels是一个107 * 5的数据帧,这里是我正在使用的代码片段。

`

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)

`

1 个答案:

答案 0 :(得分:0)

如果您在tune()调用中引用样本列表,则会抛出此错误。我有1000个随机生成的样本,我也很困惑。就是这样,引用一个列表而不是一个元素。它不知道该怎么做。所以在我的情况下,我随机选择了1000套中的一套并使用它(在这个更复杂的简化示例中)。

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)) 
相关问题