Skip to content
Snippets Groups Projects
Select Git revision
2 results Searching

dict.py

Blame
  • Forked from Vuillemot Romain / INF-TC1
    Source project has a limited visibility.
    regression_lineaire.py 5.81 KiB
    import matplotlib.pyplot as plt
    import numpy as np
    
    def lecture_donnees(nom_fichier, delimiteur=','):
        """ Lit le fichier contenant les données et renvoiee les matrices correspondant
    
        Parametres
        ----------
        nom_fichier : nom du fichier contenant les données
        delimiteur : caratère délimitant les colonne dans le fichier ("," par défaut)
    
        Retour
        -------
        X : matrice des données de dimension [N, nb_var]
        Y : matrice contenant les valeurs de la variable cible de dimension [N, 1]
        N : nombre d'éléments
        nb_var : nombre de variables prédictives
    
        """
        
        data = np.loadtxt(nom_fichier, delimiter=delimiteur)
        
        #######################
        ##### A compléter ##### 
        #######################
        
        # return X, Y, N, nb_var
    
    def normalisation(X):
        """
        
    
        Parametres
        ----------
        X : matrice des données de dimension [N, nb_var]
        
        avec N : nombre d'éléments et nb_var : nombre de variables prédictives
    
        Retour
        -------
        X_norm : matrice des données centrées-réduites de dimension [N, nb_var]
        mu : moyenne des variables de dimension [1,nb_var]
        sigma : écart-type des variables de dimension [1,nb_var]
    
        """
        
        #########################################################
        ##### A compléter (et supprimer l'instruction pass) ##### 
        #########################################################
        pass
    
        # return X_norm, mu, sigma
    
    def calcule_cout(X, Y, theta):
        """ Calcule la valeur de la fonction cout (moyenne des différences au carré)
        
        Parametres
        ----------
        X : matrice des données de dimension [N, nb_var+1]
        Y : matrice contenant les valeurs de la variable cible de dimension [N, 1]
        theta : matrices contenant les paramètres theta du modèle linéaire de dimension [1, nb_var+1]
        
        avec N : nombre d'éléments et nb_var : nombre de variables prédictives
    
        Return
        -------
        cout : nombre correspondant à la valeur de la fonction cout (moyenne des différences au carré)
    
        """
    
        #########################################################
        ##### A compléter (et supprimer l'instruction pass) ##### 
        #########################################################
        pass
    
        # return cout
    
    def descente_gradient(X, Y, theta, alpha, nb_iters):
        """ Apprentissage des parametres de regression linéaire par descente du gradient
        
        Parametres
        ----------
        X : matrice des données de dimension [N, nb_var+1]
        Y : matrice contenant les valeurs de la variable cible de dimension [N, 1]
        theta : matrices contenant les paramètres theta du modèle linéaire de dimension [1, nb_var+1]
        alpha : taux d'apprentissage
        nb_iters : nombre d'itérations
        
        avec N : nombre d'éléments et nb_var : nombre de variables prédictives
    
    
        Retour
        -------
        theta : matrices contenant les paramètres theta appris par descente du gradient de dimension [1, nb_var+1]
        J_history : tableau contenant les valeurs de la fonction cout pour chaque iteration de dimension nb_iters
    
    
        """
        
        # Initialisation de variables utiles
        N = X.shape[0]
        J_history = np.zeros(nb_iters)
    
        for i in range(0, nb_iters):
    
            #########################################################
            ##### A compléter (et supprimer l'instruction pass) ##### 
            #########################################################
            pass
            
    
        return theta, J_history
    
    def affichage(X, Y, theta):
        """ Affichage en 2 dimensions des données et de la courbe de régression linéaire déterminée par theta
        
    
        Parametres
        ----------
        X : matrice des données de dimension [N, nb_var+1]
        Y : matrice contenant les valeurs de la variable cible de dimension [N, 1]
        theta : matrices contenant les paramètres theta du modèle linéaire de dimension [1, nb_var+1]
        
        avec N : nombre d'éléments et nb_var : nombre de variables prédictives
    
        Retour
        -------
        None
    
        """
        #########################################################
        ##### A compléter (et supprimer l'instruction pass) ##### 
        #########################################################
        pass
        
        plt.show()
    
    
    if __name__ == "__main__":
    
        # ===================== Partie 1: Lecture et normalisation des données=====================
        print("Lecture des données ...")
    
        X, Y, N, nb_var = lecture_donnees("food_truck.txt")
        # X, Y, N, nb_var = lecture_donnees("houses.txt")
    
        # Affichage des 10 premiers exemples du dataset
        print("Affichage des 10 premiers exemples du dataset : ")
        for i in range(0, 10):
            print(f"x = {X[i,:]}, y = {Y[i]}")
    
        # Normalisation des variables (centrage-réduction)
        print("Normalisation des variables ...")
    
        X, mu, sigma = normalisation(X)
    
        # Ajout d'une colonne de 1 à X (pour theta0)
        X = np.hstack((np.ones((N,1)), X)) 
    
        # ===================== Partie 2: Descente du gradient =====================
        print("Apprentissage par descente du gradient ...")
    
        # Choix du taux d'apprentissage et du nombre d'itérations
        alpha = 0.01
        nb_iters = 1500
    
        # Initialisation de theta et réalisation de la descente du gradient
        theta = np.zeros((1,nb_var+1))
        theta, J_history = descente_gradient(X, Y, theta, alpha, nb_iters)
    
        # Affichage de l'évolution de la fonction de cout lors de la descente du gradient
        plt.figure()
        plt.title("Evolution de le fonction de cout lors de la descente du gradient")
        plt.plot(np.arange(J_history.size), J_history)
        plt.xlabel("Nombre d'iterations")
        plt.ylabel("Cout J")
    
        # Affichage de la valeur de theta
        print(f"Theta calculé par la descente du gradient : {theta}")
    
        # Dans le cas d'une seule variable, afficher la courbe de regression linéaire
        if nb_var == 1 :
            affichage(X,Y,theta)
        plt.show()
    
        print("Regression linéaire Terminée.")