Прямой поиск с моделью SVM в R - PullRequest
0 голосов
/ 21 декабря 2018

Я написал код R с намерением выполнить прямой поиск, чтобы выбрать лучшие функции из набора данных и построить модель SVM с высокими показателями AUC.

Набор данных состоит из 4000 столбцов (функций)и 700 строк (экземпляров).

Я наивен в программировании на R и не знаю, как улучшить этот код, чтобы он работал быстрее.

library("e1071")
library("ROCR")
library("AUC")
library("FSelector")

set.seed(658932)

matrix <- read.csv("combined_matrix.csv", header = TRUE)
data <- matrix
rownames(data) <- data[,1]
data<-data[,-1]


evaluator <- function(subset) {

  #k-fold cross validation
  k <- 5
  #splits <- runif(nrow(data))
  results = sapply(1:k, function(i) {
  idx <- sample(1:nrow(data), nrow(data)*7/10, F)
  test <- data[-idx, ]
  train <- data[idx, ]
  class1.svm.model <- svm(Class ~ ., data = train,metric="ROC",type="eps-regression",kernel="linear",na.action=na.omit,probability = TRUE)
  #prediction and ROC
  class1.svm.pred <- predict(class1.svm.model, test, probability = TRUE)
  #head(attr(class1.svm.pred, "probabilities"))
  c <- as.numeric(class1.svm.pred)
  c = c - 1
  pred <- prediction(c, test$Class)
  perf <- performance(pred,"tpr","fpr")
  area <- performance(pred,'auc')
  plot(perf,fpr.stop=0.1)
  abline(a=0, b= 1)
  auc <- performance(pred, measure = "auc")
  auc <- auc@y.values[[1]]
  tpr_fpr <- performance(pred, "tpr", "fpr")
  trp <- tpr_fpr@x.values[[1]]
  fpr <- tpr_fpr@y.values[[1]]
  area <- unlist(slot(area, "y.values"))
  return (area)


  })
  print(subset)
  write(subset,file = "outputforwardpc5.txt",append = TRUE)
  print(mean(results))
  write(mean(results),file = "outputforwardpc5.txt",append = TRUE)
  write(mean(results),file = "outputforwardpc5.csv",append = TRUE)
  return(mean(results))
}

subset <- forward.search(names(data)[-3854],evaluator)
write(subset,file = "outputforwardeclipse.txt",append = TRUE)
f <- as.simple.formula(subset, "Class")
print(f)

Я пытаюсь продвинуться вперед.search для поиска подмножества и передачи его в модель SVM, которая выполняет пятикратную проверку и возвращает область под кривой.

Код работает хорошо, однако он занимает огромное вычислительное время.Может ли кто-нибудь предложить мне способ закрепить этот код R?Я использую его на рабочей станции с 64 ГБ ОЗУ и несколькими процессорами.

...