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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 donnent
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part Error in { : task 1 failed - "objet 'd' introuvable"
J'ai testé d'utiliser get("a",environment()) à la place des paramètres mais rien ne changeQuelqu'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 : Sélectionner tout - Visualiser dans une fenêtre à part
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]
Partager