Les posteurs les plus actifs de la semaine
Aucun utilisateur |
Sujets les plus vus
Comment utiliser la fonction predict
2 participants
Page 1 sur 1
Comment utiliser la fonction predict
Bonjour,
je viens de commencer la programmation en R et j'ai du mal a utiliser la fonction predict. En fait je suis en train de faire une prediction des scenarios d'optimisation pour des programmes donnes. Je dispose donc d'un dataframe avec les programmes, les fonctions(qui est une partie du programme), des features(projection des fonctions dans un espace multidimensionnel), les scenario ids, et les speedups(qui est un reel) Pour chaque programme, je cherche le voisin le plus proche (en calculant la distance euclidienne ) et je prends le scenario id du voisin le plus proche. Cependant je cherche a optimiser le programme en ayant a chaque fois le speedup le plus eleve et donc au lieu de calculer la distance euclidienne, je cherche des coefficients d'un vecteur lambda tels que: distance(x,y) = sqrt(sum(lambda[i]* (x[i] - y[i])^2 )) et je recherche le voisin le plus proche et je prends son scenario id. Jusque la tout va bien, mais j'aimerais utiliser la fonction predict pour predire le scenario id d'un programme quelconque et c'est la que j'implemente la fonction model et je fais predict(model, data = testX) et c'est la qu'il m'affiche
Erreur dans UseMethod("predict") :
pas de méthode pour 'predict' applicable pour un objet de classe "function"
Voici le code (oui c'est long mais tout est explique ci dessus ) : merci de m'aider
model <- function(ids, x, y, inputData) {
# code pour trouver les coefficients
# initial values of lambda (to obtain euclidean distance)
lambda <- c()
lambda[1:length(x)] <- 1
distance <-function(a,b,lambda){
distSq <- 0.0
for(i in 1 : length(a)){
distSq <- distSq + (as.numeric(lambda[i])*((as.numeric(a[i])-as.numeric(b[i]))^2))
}
return (as.numeric(distSq^(1/2)))
}
testIds <- ids[1:floor(length(ids) /fold) ]
testX <- x [1:floor(nrow(x) /fold) ,]
trainingIds <- ids[-(1:floor(length(ids)/fold)) ]
trainingX <- x [-(1:floor(nrow(x) /fold)),]
trainingY <- y [-(1:floor(length(y) /fold)) ]
nnPredict <- function(testX) {
# prediction code
predictor <- c()
for (i in 1 : nrow(testX)) {
distanceVector <- apply(trainingX,1,function(a){distance(testX[i,],a,lambda)})
predictor <- c(predictor, trainingY[which.min(distanceVector)])
}
return(predictor)
}
# finds the vector of scenario speedups and returns the average speedup
averageSpeedup <- function(testIds, testX, inputData) {
testY <- nnPredict(testX)
truc <- data.frame("ids" = testIds, "y" = testY)
for (i in 1 : nrow(truc)) {
if(length(which(inputData$ids == truc$ids[i] & inputData$"scenario id" == truc$y[i])) != 0L)
truc$speedup[i] <- inputData[which(inputData$ids == truc$ids[i] & inputData$"scenario id" == truc$y[i]), "speedup"]
}
return (mean(truc$speedup))
}
# initial speedup average (using euclidean distance)
maxAverage <- averageSpeedup(testIds,testX, inputData)
for (i in 1 : 1000) {
lambda <- runif(length(x),0,2)
if (averageSpeedup(testIds, testX, inputData) > maxAverage) {
nnPredictor <- nnPredict(testX)
maxAverage <- averageSpeedup(testIds, testX, inputData)
}
}
return(nnPredict)
}
je viens de commencer la programmation en R et j'ai du mal a utiliser la fonction predict. En fait je suis en train de faire une prediction des scenarios d'optimisation pour des programmes donnes. Je dispose donc d'un dataframe avec les programmes, les fonctions(qui est une partie du programme), des features(projection des fonctions dans un espace multidimensionnel), les scenario ids, et les speedups(qui est un reel) Pour chaque programme, je cherche le voisin le plus proche (en calculant la distance euclidienne ) et je prends le scenario id du voisin le plus proche. Cependant je cherche a optimiser le programme en ayant a chaque fois le speedup le plus eleve et donc au lieu de calculer la distance euclidienne, je cherche des coefficients d'un vecteur lambda tels que: distance(x,y) = sqrt(sum(lambda[i]* (x[i] - y[i])^2 )) et je recherche le voisin le plus proche et je prends son scenario id. Jusque la tout va bien, mais j'aimerais utiliser la fonction predict pour predire le scenario id d'un programme quelconque et c'est la que j'implemente la fonction model et je fais predict(model, data = testX) et c'est la qu'il m'affiche
Erreur dans UseMethod("predict") :
pas de méthode pour 'predict' applicable pour un objet de classe "function"
Voici le code (oui c'est long mais tout est explique ci dessus ) : merci de m'aider
model <- function(ids, x, y, inputData) {
# code pour trouver les coefficients
# initial values of lambda (to obtain euclidean distance)
lambda <- c()
lambda[1:length(x)] <- 1
distance <-function(a,b,lambda){
distSq <- 0.0
for(i in 1 : length(a)){
distSq <- distSq + (as.numeric(lambda[i])*((as.numeric(a[i])-as.numeric(b[i]))^2))
}
return (as.numeric(distSq^(1/2)))
}
testIds <- ids[1:floor(length(ids) /fold) ]
testX <- x [1:floor(nrow(x) /fold) ,]
trainingIds <- ids[-(1:floor(length(ids)/fold)) ]
trainingX <- x [-(1:floor(nrow(x) /fold)),]
trainingY <- y [-(1:floor(length(y) /fold)) ]
nnPredict <- function(testX) {
# prediction code
predictor <- c()
for (i in 1 : nrow(testX)) {
distanceVector <- apply(trainingX,1,function(a){distance(testX[i,],a,lambda)})
predictor <- c(predictor, trainingY[which.min(distanceVector)])
}
return(predictor)
}
# finds the vector of scenario speedups and returns the average speedup
averageSpeedup <- function(testIds, testX, inputData) {
testY <- nnPredict(testX)
truc <- data.frame("ids" = testIds, "y" = testY)
for (i in 1 : nrow(truc)) {
if(length(which(inputData$ids == truc$ids[i] & inputData$"scenario id" == truc$y[i])) != 0L)
truc$speedup[i] <- inputData[which(inputData$ids == truc$ids[i] & inputData$"scenario id" == truc$y[i]), "speedup"]
}
return (mean(truc$speedup))
}
# initial speedup average (using euclidean distance)
maxAverage <- averageSpeedup(testIds,testX, inputData)
for (i in 1 : 1000) {
lambda <- runif(length(x),0,2)
if (averageSpeedup(testIds, testX, inputData) > maxAverage) {
nnPredictor <- nnPredict(testX)
maxAverage <- averageSpeedup(testIds, testX, inputData)
}
}
return(nnPredict)
}
Dernière édition par sara4391 le Mer 10 Juil 2013 - 8:11, édité 1 fois
sara- Nombre de messages : 4
Date d'inscription : 10/07/2013
Re: Comment utiliser la fonction predict
J'ai lu qu'en principe predict prend un objet qui herite de lm, mais dans mon cas il n'y a pas de regression lineaire, il s'agit d'un algo que j'implemente "a la main", quelqu'un pourrait m'aider svp ?
sara- Nombre de messages : 4
Date d'inscription : 10/07/2013
Re: Comment utiliser la fonction predict
predict est une fonction générique qui fonctionne avec différents types d'objets comme lm mais pas seulement :
methods(predict)
Une possibilité : créer un objet avec une class particulière ("algo" par exemple) et lui associée une fonction de prédiction : predict.algo.
Cdlt
methods(predict)
Une possibilité : créer un objet avec une class particulière ("algo" par exemple) et lui associée une fonction de prédiction : predict.algo.
Cdlt
droopy- Nombre de messages : 1156
Date d'inscription : 04/09/2009
Re: Comment utiliser la fonction predict
c'est a dire que je cree une classe "algo" et a l'interieur je cree une methode de classe predict.algo ? je n'ai pas compris l'idee
sara- Nombre de messages : 4
Date d'inscription : 10/07/2013
Re: Comment utiliser la fonction predict
concretement il te faut créer ta propre fonction pour les prédictions
droopy- Nombre de messages : 1156
Date d'inscription : 04/09/2009
Re: Comment utiliser la fonction predict
Oui, c'est bon ca a marche, merci
sara- Nombre de messages : 4
Date d'inscription : 10/07/2013
Sujets similaires
» comment je peux utiliser SPSS
» Predict avec lm ...
» R: formule utilisée dans predict()
» Loi statistique à utiliser.
» Quelle loi utiliser?
» Predict avec lm ...
» R: formule utilisée dans predict()
» Loi statistique à utiliser.
» Quelle loi utiliser?
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum