| library(cvTools) |
| library(foreach) |
| library(doParallel) |
| myfun = function (l) { |
| library(e1071) |
| #svm |
| svm.fit = svm(reac∼., data = train, nu = l, cost = i, gamma = j, kernel = “radial,” type = “nu-regression”) |
| svm.pre = ifelse(predict(svm.fit,train[, −9])>mean(predict(svm.fit,train[, −9])), 1, 0) |
| reac = as.numeric(train[,“reac”]) |
| n = ifelse(svm.pre = = train[, 9], 1, 0) |
| #result |
| t = table(pred = svm.pre, true = train[, 9]) |
| A = as.vector(t) |
| ac = (A[1] + A[4])/sum(A[1 : 4]) #Accuracy |
| s = A[4]/(A[3] + A[4]) #Sensitive |
| p = A[4]/(A[2] + A[4]) #precision |
| f = 2/(1/p + 1/s) #F1 score |
| pe = ((A[4] + A[2]) ∗ (A[4] + A[3]) + (A[3] + A[1]) ∗ (A[2] + A[1]))/(sum(A[1 : 4])^2) |
| k = (ac − pe)/(1 − pe) #Kappa |
| #output |
| c(l, ac, s, f, k, sum(n)) |
| } |
| set.seed(80) |
| R = 3 |
| K = 10 |
| cost.r = 3 |
| gamma.r = 10 |
| nu.r = seq(0.01, 1, 0.01) |
| cv = cvFolds(NROW(d.train), K = K, R = R) |
| af = foreach(r = 1: R,.combine = rbind) %do% { |
| library(foreach) |
| bf = foreach(k = 1: K,.combine = rbind) %do% { |
| validation.idx = cv$subsets[which(cv$which = = k),r] |
| train = d.train[-validation.idx,] |
| validation = d.train[validation.idx,] |
| cf = foreach (i = 1:cost.r,.combine = rbind) %do% { |
| df = foreach (j = 1:gamma.r,.combine = rbind) %do% { |
| library(snowfall) |
| library(parallel) |
| sfInit(parallel = T, cpus = detectCores() − 1) |
| sfExport(“train,” “myfun,” “j,” “i,” “K,” “R”) |
| a = sfLapply(nu.r, myfun) |
| b = matrix(unlist(a), ncol = 6, byrow = T) |
| sfStop() |
| cbind(rep(j, nrow(b)), b) |
| } |
| cbind(rep(i,nrow(df)), df) |
| } } } |