2015-01-07 32 views
1

我試圖按照this link來創建自定義SVM並通過一些交叉驗證來運行它。我的主要原因是在我的網格搜索中運行Sigma,Cost和Epsilon參數,最接近的脫字符模型(svmRadial)只能執行其中的兩個。自定義SVM模型在調整插入符號時出錯

當我嘗試運行,下面的代碼中,我得到以下錯誤所有的地方,在我的網格每次迭代:

Warning in eval(expr, envir, enclos) : 
    model fit failed for Fold1.: sigma=0.2, C=2, epsilon=0.1 Error in if (!isS4(modelFit) & !(method$label %in% c("Ensemble Partial Least Squares Regression", : 
    argument is of length zero 

即使當我從鏈接複製代碼逐字,我得到一個類似的錯誤,我不知道如何解決它。我發現this link,它經歷瞭如何構建自定義模型,並且我看到了這個錯誤被引用的位置,但仍然不確定問題是什麼。下面我有我的代碼:

#Generate Tuning Criteria across Parameters 
C <- c(1,2) 
sigma <- c(0.1,.2) 
epsilon <- c(0.1,.2) 
grid <- data.frame(C,sigma) 

#Parameters 
prm <- data.frame(parameter = c("C", "sigma","epsilon"), 
        class = rep("numeric", 3), 
        label = c("Cost", "Sigma", "Epsilon")) 

#Tuning Grid 
svmGrid <- function(x, y, len = NULL) { 
    expand.grid(sigma = sigma, 
       C = C, 
       epsilon = epsilon) 
} 

#Fit Element Function 
svmFit <- function(x, y, wts, param, lev, last, weights, classProbs, ...) { 
    ksvm(x = as.matrix(x), y = y, 
     type = "eps-svr", 
     kernel = rbfdot, 
     kpar = list(sigma = param$sigma), 
     C = param$C, 
     epsilon = param$epsilon, 
     prob.model = classProbs, 
     ...) 
} 

#Predict Element Function 
svmPred <- function(modelFit, newdata, preProc = NULL, submodels = NULL) 
    predict(modelFit, newdata) 

#Sort Element Function 
svmSort <- function(x) x[order(x$C),] 

#Model 
newSVM <- list(type="Regression", 
       library="kernlab", 
       loop = NULL, 
       parameters = prm, 
       grid = svmGrid, 
       fit = svmFit, 
       predict = svmPred, 
       prob = NULL, 
       sort = svmSort, 
       levels = NULL)      


#Train 
tc<-trainControl("repeatedcv",number=2, repeats = 0, 
       verboseIter = T,savePredictions=T) 
svmCV <- train(
    Y~ 1 
    + X1 
    + X2 
    ,data = data_nn, 
    method=newSVM, 
    trControl=tc 
    ,preProc = c("center","scale"))     
svmCV 

回答

0

查看second link提供,我決定嘗試之後,包括標籤到模型的參數和解決的問題!有趣的是,它的工作原因是脫字號文件說價值是可選的,但如果它有效,我不能抱怨。

#Model 
newSVM <- list(label="My Model", 
        type="Regression", 
        library="kernlab", 
        loop = NULL, 
        parameters = prm, 
        grid = svmGrid, 
        fit = svmFit, 
        predict = svmPred, 
        prob = NULL, 
        sort = svmSort, 
        levels = NULL) 
相關問題