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

MATLAB Discussion :

validation croisée (leave one out)


Sujet :

MATLAB

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2012
    Messages : 34
    Points : 21
    Points
    21
    Par défaut validation croisée (leave one out)
    Salut a tous,

    Alors voilà, nouveau problème.Je devais prédire des points à l'aide de transformations polynomiales. Jusque là pas de problème, le script fonctionne et je calcule une erreur moyenne quadratique (rms) pour chaque point. Je souhaiterai
    maintenant calculer l'erreur mais par validation croisée et plus précisément leave one out.
    Je vous mets mon script pr mieux comprendre:

    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
    % load gcp.txt
    load gcp
    x = gcp(:,1:2);
    y = gcp(:,3:4);
    [xx Mx mx] = scale(x);
    [yy My my] = scale(y);
    a = yy(:,1);
    b = yy(:,2);
    c = a.*b;
    one = ones(99,1);
    T = [a b one];
    % obtention de la matrice des coefficents coeff = (M*T)\(M*xx)
    M = T';
    H = inv(M*T)*M; 					
    coeff = H*xx;
    xxp=T*coeff;
    xp = descale(xxp,Mx,mx);   % J'obtiens mes points prédits
    scatter(xp(:,1),x(:,1));
    rms = sqrt(mean(sum((xp-x).^2,2)));
    Je poste mon problème ici car l'aide matlab pour ce problème est assez incomplète et il est très difficile d'appliquer les exemples pour mon cas. J'aimerais juste qu'il génère le modèle avec 98 points et qu'il le teste sur la 99e observation. Chaque point doit être testé ainsi

    Merci d'avance

    Pierrot

  2. #2
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2012
    Messages : 34
    Points : 21
    Points
    21
    Par défaut Répéter la suppression d'une ligne sous matlab
    Salut a tous,

    je vais renouveler ma question et être plus clair car un précédent post n'a eu que peu de succès.
    J'ai deux vecteurs du type:

    x1 x'1
    x2 x'2
    x3 x'3
    x4 x'4
    x5 x'5
    x6 x'6
    J'aimerai effectuer un calcul répétitif entre ces deux vecteurs mais seulement entre cinq valeurs. Il faudrait donc que je supprime seulement la première ligne, puis seulement la seconde, puis seulement la troisième pour qu'à chaque fois il me reste bien cinq valeurs mais ce n'est jamais la même qui disparait.
    Quelle est la boucle qui peut me permettre de faire cette chose?

    Merci d'avance

    Pierrot

  3. #3
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Ca n'a pas l'air très compliqué, as-tu essayé avec une boucle for?

    Sinon, la toolbox bioinfo possède des fonctions spécifiques à ce genre de problème comme crossvalind.
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2012
    Messages : 34
    Points : 21
    Points
    21
    Par défaut
    Salut Magellan,

    "Ca n'a pas l'air très compliqué" ne m'a que très peu aidé. Si j'en viens à poster quelque chose sur votre forum, c'est qu'auparavant j'ai cherché plusieurs heures..
    Je me doute qu'il faille une boucle for et l'ensemble des fonctions traitant de la cross-validation (y compris crossvalind) ne permettent pas de faire ce que je souhaite. Je peine toujours à implémenter ma boucle donc si quelqu'un a une idée, je suis preneur.

    Merci

  5. #5
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Citation Envoyé par magictol53 Voir le message
    S
    "Ca n'a pas l'air très compliqué" ne m'a que très peu aidé. Si j'en viens à poster quelque chose sur votre forum, c'est qu'auparavant j'ai cherché plusieurs heures..
    J'espérais que ces quelques mots te redonneraient au moins un peu d'espoir!!

    Tu as donné le principe dans ton deuxième post, as-tu essayé de le mettre en oeuvre?
    Il suffit de faire une boucle for qui supprimerait une ligne de tes données initiales, quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for k=1:size(ma_variable,1)
         copie_de_ma_variable = ma_variable;
         copie_de_ma_variable(k,:) = [];
         traitement sur copie_de_ma_variable;
    end
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2012
    Messages : 34
    Points : 21
    Points
    21
    Par défaut
    Merci Magellan,

    J'ai quelque chose de semblable mais sans résultat.
    J'essaie ton code et je reviens au post pour une éventuelle solution.

    A plus tard

  7. #7
    Membre éprouvé
    Avatar de ol9245
    Homme Profil pro
    Chercheur
    Inscrit en
    Avril 2007
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Avril 2007
    Messages : 985
    Points : 1 158
    Points
    1 158
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function [tout_moins_un, un_qui_reste] = separe(M, i)
    L = size(M, 1) ;
    cle = (1:L) == i ;
    tout_moins_un = M(cle, :) ;
    un_qui_reste = M(~cle, :) ;
    end
    à utiliser comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function main
    X = (1:10)' ; % un exemple
    Y = 3 * X + 1 + rand(size(X)) ; % un exemple
     
    for i = 1:10
        [Xa, Xb] = separe(X, i) ;
        [Ya, Yb] = separe(Y, i) ;
        % faire l'ajustement de Ya sur Xa
        % faire la vérification sur le couple (Xb, Yb)
    end
    end
    "La vraie grandeur se mesure par la liberté que vous donnez aux autres, et non par votre capacité à les contraindre de faire ce que vous voulez." Larry Wall, concepteur de Perl.

Discussions similaires

  1. Leave-one-out et cv.glm
    Par esteban98 dans le forum R
    Réponses: 5
    Dernier message: 11/05/2011, 14h09
  2. leave one out methode
    Par bensof1 dans le forum Statistiques, Data Mining et Data Science
    Réponses: 5
    Dernier message: 23/03/2011, 14h52
  3. Réseau neurones, Leave-one-out
    Par rob408231 dans le forum Méthodes prédictives
    Réponses: 7
    Dernier message: 30/05/2009, 04h23
  4. Leave one out
    Par sialamed dans le forum Méthodes prédictives
    Réponses: 1
    Dernier message: 17/06/2008, 23h31
  5. Validation croisée (leave one out)
    Par sialamed dans le forum OpenCV
    Réponses: 0
    Dernier message: 17/06/2008, 13h14

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