Я написал код 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 ГБ ОЗУ и несколькими процессорами.