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 :

Trouver les jeux de données tirés au hasard


Sujet :

R

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Octobre 2015
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Octobre 2015
    Messages : 101
    Par défaut Trouver les jeux de données tirés au hasard
    Bonjour,

    J'ai un jeu de données de n=100 observations sur lequel je souhaite créer un modèle linéaire multiple par la méthode du split (70 obs pour l'apprentissage et 30 obs pour le test), l'opération a été répéter 100 fois avec à chaque fois 70 et 30 observations tirées au hasard sans remise. La moyenne du score des R2 a par la suite été calculée.

    Ma question: Par quel moyen je pourrai avoir le vecteur sous forme de data frame qui contient tous les tirages faits au hasard?
    pour plus d'informations voici le lien du code utilisé.

    http://www.developpez.net/forums/d18.../#post10514683

  2. #2
    Membre chevronné
    Inscrit en
    Février 2011
    Messages
    276
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 276
    Par défaut
    Bonjour,

    j'avoue que je n'ai pas compris ce que tu cherchais a conserver sous forme de data.frame, les tirages ? les R²?

    cdlt

  3. #3
    Membre expérimenté
    Homme Profil pro
    Data scientist
    Inscrit en
    Février 2017
    Messages
    211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Data scientist
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2017
    Messages : 211
    Par défaut
    Bonjour,

    Je pense qu'il cherche les échantillons tirés au hasard par le Boostrap.

  4. #4
    Membre chevronné
    Inscrit en
    Février 2011
    Messages
    276
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 276
    Par défaut
    si c'est du split sampling (sans remise) a priori ce n'est pas du bootstrap (avec remise).
    Je ferai quelque chose comme ça :
    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
    # un jeu de données pour l'exemple 
    df <- data.frame(x = rnorm(100))
    df$y <- df$x * 3 - 2 + rnorm(100, 0, 1.5)
     
    N <- 100 # nbre de tirages
    tirages <- matrix(integer(), nrow(df), N)
    i <- 1:100
    r2tr <- numeric(N)
    r2t <- numeric(N)
     
    for (j in 1:N) {
      aux <- sample(i, 70)
      tirages[ , j] <- c(aux, setdiff(i, aux))
      lm1 <- lm(y ~ x, df[aux,])
      r2tr[j] <- summary(lm1)$adj.r.squared
      p <- predict(lm1, newdata = df[-aux,])
      yt <- df$y[-aux]
      r2t[j] <- 1-sum((yt-p)^2)/sum((yt-mean(yt))^2)
      }
    Comme ça les 70 premières lignes de la matrice "tirages" contiennent les tirages qui ont participé à l'estimation des paramètres et les 30 dernières lignes à celles qui n'ont pas participé.

    Après la fonction set.seed peut-être très utile aussi parce qu'elle permet de refaire les mêmes tirages aléatoires, d'une fois sur l'autre.
    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    tir1 <- sample(100, 70)
    tir2 <- sample(100, 70)
    all.equal(tir1, tir2)
    [1] "Mean relative difference: 0.7230462"
     
    # avec set.seed
    set.seed(10)
    tir1 <- sample(100, 70)
    set.seed(10)
    tir2 <- sample(100, 70)
    all.equal(tir1, tir2)
    [1] TRUE
    cdlt

  5. #5
    Membre confirmé
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Octobre 2015
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Octobre 2015
    Messages : 101
    Par défaut
    Bonsoir à tous,

    Marou a raison, je cherche les échantillons tirés au hasard. Cependant tototode je n'ai pas trouvé dans ton code la ligne qui me donne cela. Pour que vous puissiez comprendre mon approche je vous ai donné dans mon premier message le lien du code que j'ai utilisé, Je vous donne le code ci dessous.

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    df <- data.frame(y = rnorm(100,5,0.02))
    df$x1 <- df$y * 3 - 2 + rnorm(100, 0, 1.5)
    df$x2<-df$y/2+rnorm(100,7,1)
    df
     
    N <- 100 # le nombre de répétition
     
    {val.errorst=matrix(numeric(),N, 2)
      stor.r2t=matrix(numeric(),N, 2)
      stor.rmset=matrix(numeric(),N, 2)
      stor.pet=matrix(numeric(),N, 2)
      stor.biait=matrix(numeric(), N, 2)
     
      val.errors=matrix(numeric(),N, 2)
      stor.r2=matrix(numeric(),N, 2)
      stor.rmse=matrix(numeric(),N, 2)
      stor.pe=matrix(numeric(),N, 2)
      stor.biai=matrix(numeric(),N, 2)
    }
     
    library(leaps)
     
    for (j in 1:N) {
      train<-sample(seq(100), 70, replace=FALSE)
      regfit.bestfwd=regsubsets(y~.,data=df[train,],nvmax =2)
      summar.regfitfwd<-summary(regfit.bestfwd)
      summar.regfitfwd
      #le calcul de la statistique des modèles sur un jeu d'apprentissage 
      app.matt = model.matrix(y~.,data=df[train,])
      #le calcul de la statistique des modèles sur un jeu test 
      tst.mat=model.matrix(y~.,data=df[-train,])
      for(i in 1:2){
        coefi=coef(regfit.bestfwd,id=i)
        predapp=app.matt[,names(coefi)]%*% coefi
        val.errorst[j, i]=mean((df$y[train]-predapp)^2)
        stor.r2t[j, i]=(cor(df$y[train], predapp))^2
        stor.rmset[j, i]=sqrt(val.errorst[j, i]) #rmse: root mean squared error
        stor.pet[j, i]=stor.rmset[j, i]/mean(df$y[train]) #pe: pourcentage d'erreur
        stor.biait[j,i]=(sum(predapp-df$y[train])/sum(df$y[train]))*100 #biai: pourcentage de biais
     
        predtst=tst.mat [,names(coefi)]%*% coefi
        val.errors[j, i]=mean((df$y[-train]-predtst)^2)
        stor.r2[j, i]=(cor(df$y[-train], predtst))^2
        stor.rmse[j, i]=sqrt(val.errors[j, i])
        stor.pe[j, i]=stor.rmse[j, i]/mean(df$y[-train])
        stor.biai[j,i]=(sum(predtst-df$y[-train])/sum(df$y[-train]))*100
      }
    }
    Sur la base de ce code comment j'obtiens tous les tirages sous forme de data frame?

  6. #6
    Membre chevronné
    Inscrit en
    Février 2011
    Messages
    276
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 276
    Par défaut
    re,

    ce sont les lignes qui amènent a tirages.
    Pour simplifier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    library(leaps)
     tirages <- matrix(integer(), 70, N)
    for (j in 1:N) {
      train<-sample(100, 70, replace=FALSE)
      tirages[, j] <- train
    cdlt

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Trouver des jeux de données
    Par openlife dans le forum Autres
    Réponses: 0
    Dernier message: 22/09/2009, 16h19
  2. Problème pour trouver les données commune dans une requête
    Par Winterrage dans le forum Langage SQL
    Réponses: 3
    Dernier message: 08/02/2008, 10h14
  3. Trouver les X nombres les plus proche d'un nombre donné
    Par pyrou dans le forum Langage SQL
    Réponses: 4
    Dernier message: 06/07/2007, 08h53
  4. [Conception] Comment sont chargées les données dans les jeux?
    Par drcd dans le forum Développement 2D, 3D et Jeux
    Réponses: 15
    Dernier message: 24/10/2006, 15h09
  5. Trouver les tables d'une base de données access
    Par boss_gama dans le forum ASP
    Réponses: 2
    Dernier message: 22/06/2006, 11h56

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