TP1 AFD Correction

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 5

Correction du TP 1 en Analyse et Fouilles de Données

Régression Linéaire Univariée


4/ Représentation des données
1/ …, copier/coller tout le contenu du fichier tp1_bib.txt et l’exécuter

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from mpl_toolits.mplot3d import axes3d
pd.set_option(‘display.notebook_repr_html’, False)
pd.set_option(‘display.max_columns’, None)
pd.set_option(‘display.max_rows’, 150)
pd.set_option(‘display.max_seq_items’, None)
#%config InlineBackend.figure_formats = {‘pdf’,}
%matplotlib inline
import seaborn as sns
sns.set_context(‘notebook’)
sns.set_style(‘white’)

2/ Instruction 1: lire de la base tp1_data.txt et délimiter les valeurs d’attributs parune virgule.

data =np.loadtxt('/ex1data1.txt', delimiter=',')

3/ Instruction 2: attribuer chaque colonne à une variable.

X= np.c_[np.ones(data.shape[0]),data[:,0]]
y= np.c_[data[:,1]]

4/ Instruction 3: représenter un nuage de points avec les paramètres suivants:

➢ l’axe des abscisses: la population

➢ l’axe des ordonnées: le bénéfice

➢ la taille des points= 30

➢ la couleur des points: rouge

➢ la forme des points: croix


plt.scatter(X[:,1], y, s=30, c='r', marker='x')
5/ Instruction 4: attribuer à l’axe des abscisses un seuil minimal égal à 4 et un seuil maximal
égal à 24.

plt.xlim(4,24)

6/ Instruction 5: nommer l’axe des abscisses « Population of City in 10,000s » et l’axe des
ordonnées « Profit in $10,000s ».
plt.xlabel("Population of City in 10.000s")
plt.ylabel("Profit in $10.000s")

#En exécutant les 4 dernières lignes de codes ci-dessus vous


obtiendrez la figure suivante comme résultat dans l’interpréteur

5/ L’algorithme de Descente du Gradient (Gradient Descent)


5.1/ Calcul de la fonction coût

En se basant sur l’équation 1 et 2, écrire une fonction « computeCost » permettant decalculer


la fonction coût en prenant en considération :

• Une variable m (représentant l’ensemble d’apprentissage) qui prend la taille de la


colonne « bénéfice ».

• Une variable J (représentant la fonction coût) qui est initialisée à 0.

def computeCost(X, y, theta=[[0],[0]]):


m = y.size
J = 0
h= X.dot(theta)
J = 1/(2*m)*np.sum(np.square(h-y))
return J

# Nous testons la fonction computeCost avec les variables X et y comme paramètres


computeCost(X,y)

#Résultat
32.072733877455676

5.2 / Définition de la fonction de Descente du Gradient « gradientDescent »


En s’appuyant sur la fonction coût ainsi que l’équation 3, écrire une fonction

« gradientDescent » ayant les mêmes paramètres que la fonction coût et en ajoutant:

• Une variable alpha initialisée à 0.01.


• Une variable num_iters prenant un nombre d’itérations initialisé à 1500.

def gradientDescent(X, y, theta=[[0],[0]], alpha=0.01, num_iters=1500):


.
.
.

Et en prenant en considération:

• La même variable m.

• Une variable J_history qui prend l’ensemble des résultats de la fonction coût pour
chaque itération.
.
.
.
m = y.size
J_history = np.zeros(num_iters)
for iter in np.arange(num_iters):
h = X.dot(theta)
theta = theta - alpha*(1/m)*(X.T.dot(h-y))
J_history[iter]=computeCost(X, y, theta)
return (theta, J_history)
5.3/ Représentation de la fonction de Descente du Gradient « gradientDescent »
En se focalisant sur l’ensemble des données tp1_data.txt, représenter graphiquement

l’ensemble des résultats de la fonction coût en appliquant la fonction « gradientDescent ».


theta, Cost_J = gradientDescent(X, y)
print('theta:', theta.ravel())
plt.plot(Cost_J)
.
.
.

Dans l’axe des abscisses, ajouter « Iterations » comme titre et « Cost_J » dans l’axe des
ordonnées.
.
.
.
plt.xlabel('Iterations')
plt.ylabel('CostJ')

#En exécutant les 5 dernières lignes de codes, nous obtiendrons la


représentation graphique suivante

5.4/ Traçage du modèle d’ajustement linéaire


En reprenant la même représentation du nuage de points dans la section 4, ajouter le
modèle d’ajustement linéaire.

xx=np.arange(5,23)
yy= theta[0]+theta[1]*xx
#Rerprésentation avec Gradient Descent
plt.scatter(X[:,1], y, s=30, c='r', marker='x')
plt.plot(xx, yy, label="Linear regression (Gradient Descent)")
plt.xlim(4, 24)
plt.xlabel('Population of City in 10.000s')
plt.ylabel('Profit in $10.000')
plt.legend(loc=4)

#En appliquant les 8 dernières lignes de codes ci-dessus (sans


compter le commentaire), nous obtiendrons la représentation
graphique suivante

… Avec cet ajustement, essayez prédire le bénéfice d’une ville avec une population de
35000 et 70000.

 En ayant appliqué l’algorithme de Descente du Gradient pour l’ensemble de données


tp1_data.txt , nous avons obtenu les valeurs optimales de Ѳ0 et Ѳ1, à savoir:

Ѳ𝟎 = −𝟑. 𝟔𝟑𝟎𝟐𝟗𝟏𝟒𝟒 et Ѳ𝟏 = 𝟏. 𝟏𝟔𝟔𝟑𝟔𝟐𝟑𝟓

 Donc notre « fonction de décision », que nous appelons aussi « hypothèse », sera égale à:

𝒉(𝒙) = −𝟑. 𝟔𝟑𝟎𝟐𝟗𝟏𝟒𝟒 + 𝟏. 𝟏𝟔𝟔𝟑𝟔𝟐𝟑𝟓 ∗ 𝒙

 Pour connaître l’estimation exacte pour une population de 35 000 nous utiliserons les
meilleures valeurs des paramètres Ѳ0 et Ѳ1, d’où l’obtention de l’hypothèse suivante:

𝒉(𝟑𝟓 𝟎𝟎𝟎) = −𝟑. 𝟔𝟑𝟎𝟐𝟗𝟏𝟒𝟒 + 𝟏. 𝟏𝟔𝟔𝟑𝟔𝟐𝟑𝟓 ∗ 𝟑𝟓𝟎𝟎𝟎 = 𝟒𝟎𝟖𝟏𝟗. 𝟎𝟓𝟏𝟗𝟓𝟖𝟓𝟔

 En appliquant une population de 70 000 nous aurons:

𝒉(𝟕𝟎 𝟎𝟎𝟎) = −𝟑. 𝟔𝟑𝟎𝟐𝟗𝟏𝟒𝟒 + 𝟏. 𝟏𝟔𝟔𝟑𝟔𝟐𝟑𝟓 ∗ 𝟕𝟎𝟎𝟎𝟎 = 𝟖𝟏𝟔𝟒𝟏. 𝟕𝟑𝟒𝟐𝟎𝟖𝟓𝟔

Vous aimerez peut-être aussi