Partage
  • Partager sur Facebook
  • Partager sur Twitter

Projet : Résidus moindres carrés

numpy , pandas

Sujet résolu
    11 octobre 2022 à 11:35:13

    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


    #!/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)



    • Partager sur Facebook
    • Partager sur Twitter

    Linux , le marché en zone libre

    Projet : Résidus moindres carrés

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown