J'essaye de créer une fonction me permettant de modéliser et prédire sur le jeu de données MNIST.
Le but est d'avoir une fonction qui me permet d'utiliser outer sur plusieurs paramètres.
Dans cette fonction, on utilise une seconde fonction qui est évaluée pour chaque combinaison de paramètre.
J'aimerai alors utiliser la fonction parallelSVM pour optimiser les temps de calculs.
Mais quand j'essaye d'utiliser les fonctions, j'ai toujours la même erreur:Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 library(parallelSVM) library(parallel) list_args <- Vectorize(function(a,b) c(as.list(a),as.list(b)), SIMPLIFY = FALSE) make_args_mtx <- function(alist){ Reduce(function(x,y) outer(x,y,list_args),alist) } multi.outer <- function(f,...){ args <- make_args_mtx(list(...)) res <- apply(args, 1:length(dim(args)), function(a) do.call(f,a[[1]])) return(res) } cr <- 2 optim.svm <- function(a,b,c,d,e){ svmrad <- parallelSVM(x=Xfinal, y=Y, numberCores=cr,kernel=a,probability=TRUE, gamma=b, coef0=c, degree=d, cost=e) pred.svm <- predict.parallelSVM(svmrad, newdata=testreduced,decision.values=T) taux <- sum(pred.svm != test[,1]) / nrow(test) return(taux) }
Les deux fonctions donnentCode:
1
2
3
4
5
6
7 optim.svm('linear',0.05,0.2,2,50) resultat <- multi.outer(optim.svm, a=c("linear","polynomial","radial","sigmoid"), b=seq(0.00,0.1,0.05), c=seq(0,0.3,0.3), d=seq(2,4,2), e=seq(0,100,50))
Je sais que parallelSVM n'a pas besoin de stocker au préalable les paramètres dans chaque CPU utilisée mais qu'il les prend dans l'environnement global.Code:Error in { : task 1 failed - "objet 'd' introuvable"
J'ai testé d'utiliser get("a",environment()) à la place des paramètres mais rien ne change :( Quelqu'un pourrait-il m'aider s'il vous plaît?
EDIT : JE me suis aperçue ne pas avoir mis comment trouver Xfinal et testreduced
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 X <- train[,-1] Y <- train[,1] Xreduced <- X/255 Xcov <- cov(Xreduced) pcaX <- prcomp(Xcov) ev <- pcaX$sdev^2 head(cumsum(ev/sum(ev)), 100) nbaxes <- 58 dim(as.matrix(Xreduced)) dim(pcaX$rotation[,1:nbaxes]) Xfinal <- as.matrix(Xreduced) %*% pcaX$rotation[,1:nbaxes] Y <- class.ind(Y) testreduced <- test[,-1]/255 testreduced <- as.matrix(testreduced) %*% pcaX$rotation[,1:nbaxes]