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

Calcul scientifique Python Discussion :

Projet : Résidus des moindres carrés [Python 3.X]


Sujet :

Calcul scientifique Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti Avatar de scrat51
    Homme Profil pro
    Doctorant
    Inscrit en
    Avril 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Doctorant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2014
    Messages : 17
    Par défaut Projet : Résidus des moindres carrés
    Bonjour,

    J'ai un projet à faire sur le calcul des résidus des moindres carrés. J'ai travaillé et codé quelque chose mais, mes résultats ne me semblent pas bon comparés au volume de données du CSV du départ. C'est pour ça que je vous écris pour demander de l'aide

    Je vous communique donc mon code et le sujet pour que vous puissiez voir ce que j'ai fait et me dire où j'ai cafouillé !

    Je ne vois pas ou pourrait être mon erreur.

    Merci d'avance pour votre aide

    Sujet

    QUESTION 3

    Importer la base de données disponibles http://archive.ics.uci.edu/ml/machin...lity-white.csv

    Créer une matrice Z qui contient les 11 premières colonnes et toutes les lignes du tableau. On prendra pour y le vecteur qui contient la dernière colonne de ce tableau. On aura donc une matrice Z de taille 4898×11.

    On reprend l'estimateur des moindres carrés proposé ci-dessus:

    β̂ Z=(Z⊤Z)−1Z⊤y.

    Donner la valeur des résidus obtenus: ∥Zβ̂ Z−y∥22 ?

    On ne donnera que la partie entière de ce nombre.

    QUESTION 4

    On propose maintenant de faire un pré-traitement classique sur les colonnes de Z, que l’on appelle classiquement “standardisation des variables”. Cela consiste à retirer à chaque colonne sa moyenne, puis à la diviser par son écart-type. Après standardisation, chaque colonne a une moyenne nulle et une variance de 1.

    Implémenter la standardisation sur la matrice Z précédente. On note X la matrice ainsi obtenue. On reprend l'estimateur des moindres carrés proposé ci-dessus, cette fois pour la matrice X: β̂ X=(X⊤X)−1X⊤y.

    Donner la valeur de ∥Xβ̂ X−y∥22:

    Mon code

    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
     
    #!/usr/env python 3
    import numpy as np
    import pandas as pd
    from numpy import linalg as NO
    from numpy import linalg as LA
     
    #Chargement des datas
    dataset = pd.read_csv('winequality-white.csv')
    #print (dataset.head())
     
    #Création des variables
    #Z = matrice Z
    #y = vecteur y
    Z = dataset[['fixed acidity', 'volatile acidity', 'citric acid', 'residual sugar', 'chlorides', 'free sulfur dioxide', 'total sulfur dioxide', 'density', 'pH', 'sulphates', 'alcohol']] #the relevant column name
    y = dataset['quality'] #Variable indépendante
     
    #print ("Dataset in running....\n\n\n")
    #print ("Dataset is .....\n\n\n")
    #print (Z,y) #affichage du dataset final
     
    #Question 3 -calcul de beta Z avec la formule
    print ("Résidus en cours de calcul .\n\n")
    print ("=============================\n\n")
     
    #calcul de (Z ^T *Z)
    ZTZ = np.dot(Z.T,Z)
    #=debug
    #print (ZTZ)
     
    #calcul (Z ^T Z)^-1
    Zinv = np.linalg.inv(np.dot(Z.T, Z))
    #=debug
    #print (Zinv)
     
    #construction de beta
    betaZ = np.dot(Zinv, Z.T) @ y
    #=debug
    #print ("Beta Z devient : \n\n",betaz)
     
    ##calculs des résidus
    #Z * betaZ -> norme 2
    ZbetaZ = np.dot(Z, betaZ)
    normeZ = LA.norm(ZbetaZ)
    #=debug
    #print ("Zbetaz devient : \n\n",normeZ)
     
    #norme 2 de y
    norme_y = LA.norm(y)
    #print ("Norme 2 de y", norme_y)
     
    #Z * betaZ - y => norme 2
    residus = np.subtract(normeZ,norme_y)
    residus_1 = np.square(residus)
     
    print ("Résidus question 3 : \n",residus_1)
     
    #Question 4
    #Implémentation de la matrice Z
    #Matrice X est son résulat
     
    dataset_Z = dataset[['fixed acidity', 'volatile acidity', 'citric acid', 'residual sugar', 'chlorides', 'free sulfur dioxide', 'total sulfur dioxide', 'density', 'pH', 'sulphates', 'alcohol']]
    dataset[['fixed acidity', 'volatile acidity', 'citric acid', 'residual sugar', 'chlorides', 'free sulfur dioxide', 'total sulfur dioxide', 'density', 'pH', 'sulphates', 'alcohol']] = (dataset_Z -dataset_Z.mean())/ dataset_Z.std()
     
    #X est la nouvelle matrice après standardisation 
    X = dataset
    #print (X)
     
    #calcul de (X ^T *X)
    XT = np.dot(X.T,X)
    #=debug
    #print (XT)
     
    #calcul de X inverse
    Xinv = np.linalg.inv(np.dot(X.T,X))
    #=debug
    #print (Xinv)
    #beta
    betaX = np.dot(Xinv,X.T) @ y
    #=debug
    #print ("Beta X devient : \n\n",betaX)
     
    ##calculs des résidus
    #Z * betaX -> norme 2
    XbetaX = np.dot(X,betaX)
    normeX = LA.norm(XbetaX)
    #=debug
    #print ("XbetaX devient : \n\n",normeX)
     
    #norme 2 de y
    norme_y = LA.norm(y)
    #print ("Norme 2 de y", norme_y)
     
    #X * betaX - y => norme 2
    residusX = np.subtract(normeX,norme_y)
    residusX_1 = np.square(residusX)
     
    print ("Résidus question 4 : \n",residusX_1)

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2004
    Messages : 16
    Par défaut
    Voici une possible implémentation de la solution à la question 3 et 4 du sujet que vous avez donné :
    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
     
    import numpy as np
    import pandas as pd
     
    # Chargement des données à partir du fichier CSV
    data = pd.read_csv("http://archive.ics.uci.edu/ml/machine-learning-databases/wine-quality/winequality-white.csv", sep=';')
     
    # Sélection des colonnes à utiliser dans la matrice Z et du vecteur y
    Z = data.iloc[:, :11]
    y = data.iloc[:, 11]
     
    # Calcul de l'estimateur des moindres carrés pour la matrice Z
    beta_Z = np.linalg.inv(Z.T.dot(Z)).dot(Z.T).dot(y)
     
    # Calcul des résidus pour la matrice Z
    residus_Z = np.linalg.norm(Z.dot(beta_Z) - y) ** 2
     
    # Affichage des résidus arrondis à l'entier le plus proche
    print(int(round(residus_Z)))
     
    # Standardisation de la matrice Z
    X = (Z - Z.mean()) / Z.std()
    # Calcul de l'estimateur des moindres carrés pour la matrice X
    beta_X = np.linalg.inv(X.T.dot(X)).dot(X.T).dot(y)
     
    # Calcul des résidus pour la matrice X
    residus_X = np.linalg.norm(X.dot(beta_X) - y) ** 2
     
    # Affichage des résidus arrondis à l'entier le plus proche
    print(int(round(residus_X)))
    Ce code importe les données à partir d'un fichier CSV, crée la matrice Z et le vecteur y en sélectionnant les colonnes appropriées, calcule l'estimateur des moindres carrés pour chacune des matrices Z et X, et affiche les résidus arrondis à l'entier le plus proche.

    Je vous recommande de lire la documentation de NumPy et de pandas pour en savoir plus sur les différentes fonctions utilisées dans ce code et sur la façon de les utiliser.

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

Discussions similaires

  1. Algorithme des moindre carrés alternatifs
    Par antoinerochette dans le forum Algorithmes et structures de données
    Réponses: 10
    Dernier message: 16/10/2008, 16h09
  2. Réponses: 2
    Dernier message: 24/05/2008, 21h27
  3. méthode des moindres carrés
    Par sinna dans le forum Mathématiques
    Réponses: 4
    Dernier message: 05/04/2008, 21h41
  4. Methode des moindres carrées
    Par 77Camille dans le forum Mathématiques
    Réponses: 2
    Dernier message: 11/06/2007, 18h40
  5. Détermination d'un plan des moindres carrés
    Par bernard6 dans le forum MATLAB
    Réponses: 8
    Dernier message: 05/04/2007, 16h23

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