Projet moindres carrés : résidus python numpy
Bonsoir
J'ai un deuxième projet en maths à coder, sur les résidus des moindres carrés. Mon premier projet, c'est OK j'ai bien compris. J'ai mis du temps, mais j'ai compris.
J'ai donc travaillé et produit un code mais, les résultats que j'ai en exécutant mon code ne me semble pas juste vu la taille immense de la matrice ! (Je trouve pour la question 3 : 11 et 0 pour la question 4). Cela peut vous sembler facile mais pour moi, c'est complexe !
Je ne vois pas mon erreur (j'ai dû cafouiller quelque part dans le code) et je suis bloqué. Mon code fonctionne certes, mais, les résultats devraient être plus grands.
Pourriez-vous m'aider SVP ? Je vous communique l'énoncé et mon code.
Je pense que les chiffres doivent être énormes (la valeur des résidus).
Merci beaucoup pour votre aide précieuse.
À bientôt
Le sujet :
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.
QUESTION 3
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 travail (le code)
J'ai un deuxième projet en maths à coder, sur les résidus des moindres carrés. Mon premier projet, c'est OK j'ai bien compris. J'ai mis du temps, mais j'ai compris.
J'ai donc travaillé et produit un code mais, les résultats que j'ai en exécutant mon code ne me semble pas juste vu la taille immense de la matrice ! (Je trouve pour la question 3 : 11 et 0 pour la question 4). Cela peut vous sembler facile mais pour moi, c'est complexe !
Je ne vois pas mon erreur (j'ai dû cafouiller quelque part dans le code) et je suis bloqué. Mon code fonctionne certes, mais, les résultats devraient être plus grands.
Pourriez-vous m'aider SVP ? Je vous communique l'énoncé et mon code.
Je pense que les chiffres doivent être énormes (la valeur des résidus).
Merci beaucoup pour votre aide précieuse.
À bientôt
Le sujet :
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.
QUESTION 3
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 travail (le 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)
Linux n'a pas de racines IP
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
D'accord, merci. Je vais essayer ! As-tu eu cette erreur ?
tu as copié/collé l'intégralité du code? sous quelle version de Python es-tu ?
Merci pour ta réponse. Oui, j'ai copié / collé ton code pour voir et j'ai eu l'erreur grr
J'ai la version 3.9.2
C'est bien la norme 2 - la différence au carré ?
Concernant le calcul des résidus, as-tu voir par rapport à ce que j'avais fait ?
Merci
J'ai réussi à implémenter mais, est-ce que tu pourrai regarder stp ?
J'ai utilisé la librairie sklearn pour effecter la standardisation des variables ( Colonnes de Z). Si tu peux voir à la main, np.mean et np.std pour voir si on trouve pareil, cela serait cool !
Merci beaucoup