IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

R Discussion :

Problème if en langage R


Sujet :

R

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2021
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2021
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Problème if en langage R
    Bonjour, c'est mon premier message sur ce forum et j'ai besoin d'aide en R s'il vous plaît

    J'ai un projet de machine Learning à rendre et ça fait 6h que j'essaie de débuguer mes if mais je n'y arrive pas

    je vous montre mon code :

    # Partie II : Super learning pour le choix des hyper paramètres k et d ( ou plus précisement du choix de la Matrice de poids des hyper paramètres k et d )


    On definit la fonction de perte de mauvaise classification.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    ```{r}
    perte <- function(u,y){
      if(u==y)
        return(1)
      else
        return(0)
    }
    ```

    On definit un kNN un peu special où l'on ne s'interesse qu'à une seule des 7 dimension de X pour lui atribuer une étiquette Y ( dans un premier temps dans [0;1]).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    ```{r}
    algo<-function(k,d,A,x){
      c<-0                                # on initialise le compteur c à 0.
      for (i in 1:k){                     # on cherche dans la boucle les k plus
        b<-which.min(abs(x[d]-A[,d]))     # proches voisins pour la coordonnée d
        c<-c+1/k*A[b,8]                   # avec d entre 1 et 7. enfin, on fait la
        A<-A[-b,]                         # somme des étiquettes divisé par k.
      }
      return(c)
    }
    ```
    On choisit un seuillage basique car nous n'avons pas de preference d'erreur dans les donnés du problème, il n'est pas plus grave de classer un 1 en 0 que de classer un 0 en 1 donc on choisit un seuil pile au milieu : 0.5.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    ```{r}
    seuil<-function(c){
      if(c<0.5){
        return(0)
      }else{
        return(1)
      }
    }
    ```
    calcul de la taille de la matrice de poids (que l'on notera SL)


    ```{r}
    200*7
    ```
    preparation de l'algorithme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ```{r}
    risque<-(rep(0,25))              # Initialisation du risque pour l'algo suivant.
    SL<-matrix(rep(0, 1400), 200, 7)  # De même pour la matrice des poids. 
    ```
    Algorithme de Super-Learning fait maison :
    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
     
    ```{r}
    for (k in 1:200){
      for (d in 1:7){        # Pour tout d et pour tout k on fait la grande boucle
        for (i in 1:25){
          test<-dat[50*(i-1)+1:50*i,]    # on retire le i-ème volet et on le nomme
          train<-dat[-(50*(i-1)+1:50*i),]  # test, tandis que on appelle le reste
          for (j in 1: 50){                # train. ( entrainement en anglais )
            testy<-test[j,8]
            testx<-test[j,-8]              # on separe les X et les Y de test.
            c<-algo(k,d,train,testx)       # on applique l'algorithme entrainé (on
            c<-seuil(c)                    # l'entraine en même temps à vrai dire)
            risque[i]<-risque[i]+1/50*perte(testy,c) # calcul du risque associé à
          }                                              # ce volet
        }
        SL[k,d]<-1/25*sum(risque)  # Calcul du poids (avant normalisation) associé
      }                               # k et d
    }
    ```

    le truc c est que quand j'utilise seuil ou perte dans un contexte normal ça marche très bien mais des que c'est dans les boucles de l'algorithme ça veut pas... J'ai essayé de bidouiller mais tantôt ça me sort '' Error in if (c < 0.5) { : l'argument est de longueur nulle '' comme c'est le cas actuellement tantôt c'est plutot " Error in if (u == y) return(1) else return(0) :
    l'argument est de longueur nulle " ou encore " Erreur boucle if : "la condition a une longueur > 1 "

    je suis dépité...

  2. #2
    Expert confirmé
    Avatar de olivier.decourt
    Homme Profil pro
    Formateur R/SAS/statistiques
    Inscrit en
    Avril 2008
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Formateur R/SAS/statistiques
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 064
    Points : 4 478
    Points
    4 478
    Par défaut
    Bonjour.
    Dans R, les if sont des structures de contrôle, pas des formules de calcul. Il vaudrait mieux utiliser des ifelse à l'intérieur de tes fonctions. Par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    perte <- function(u,y){
      ifelse(u==y,1,0)
    }
    Les messages d'erreur correspondent à des cas où les arguments de tes fonctions ne sont pas des simples nombres comme tu l'as prévu mais des structures contenant davantage de valeurs, probablement des vecteurs. Un moyen simple de débug serait de tracer avec des print() les valeurs des différents objets au fur et à mesure des itérations de ta boucle.
    Bon courage.
    Olivier

Discussions similaires

  1. Problèmes avec le langage PHP et IE 8
    Par Fredy Lelong dans le forum Langage
    Réponses: 6
    Dernier message: 10/03/2012, 10h13
  2. problème traité en langage C
    Par noussa309 dans le forum Débuter
    Réponses: 4
    Dernier message: 05/07/2011, 04h36
  3. problème avec le langage script
    Par ahmedENIS dans le forum Applications et environnements graphiques
    Réponses: 7
    Dernier message: 30/11/2010, 20h15
  4. Problème avec le langage VRML
    Par pouette13 dans le forum Développement 2D, 3D et Jeux
    Réponses: 5
    Dernier message: 01/06/2007, 20h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo