Cette matrice à la forme suivante: Dans le cas de notre exemple tiré de la météorologie, si on veut expliqué la variable: « température(temp) » par les variables « vitesse du vent (v) », « précipitations(prec) » et « l'humidité (hum) ». On aurait le vecteur suivant: Y=(temp_1, temp_2, …, temp_n)' La matrice de design serait la suivante: Et enfin le vecteur suivant: La relation pour la régression linéaire multiple de la température serait donc: Avec toujours une suite de variables aléatoires indépendantes et identiquement distribuées de loi. Maintenant que les modèles sont posés, il nous reste reste à déterminer comment trouver le paramètre minimisant l'erreur quadratique. Une solution théorique On rappelle que le paramètre est solution du problème d'optimisation suivant:. Notons:. Le problème d'optimisation précédent se re-écrit alors: La fonction possède pour gradient et pour hessienne. Cette fonction est coercive (). De plus si on suppose la matrice régulière, c'est à dire qu'elle est de rang ou encore que ses colonnes sont indépendantes alors la matrice est définie positive.
À vous de jouer! Contexte Dans cette activité, vous allez faire appel à tout ce que vous avez étudié dans la deuxième partie du cours. Nous allons nous intéresser à la relation entre la distance qui nous sépare d'une galaxie, et la vitesse à laquelle elle s'éloigne de nous. Cette relation fut découverte pour la première fois par Erwin Hubble en 1929. Son article est disponible ici. Pour cela, vous aurez besoin du fichier. Votre tâche consiste à charger le contenu de ce fichier grâce à Pandas, regarder les données qu'elle contient, et effectuer une régression linéaire entre les deux variables distance et velocity. Pour faire cette régression, vous devez utiliser la bibliothèque scikit-learn. La page de documentation la plus approprié pour cette activité est ici. Il y a aussi un exemple complet d'une regression linéaire ici. Consigne N'oubliez pas de fournir les coordonnées de la courbe de régression. Votre graphique devrait être présentable: titres, labels, taille de police appropriée, et qui représente les données et la courbe.
C'est la cas par exemple dans le domaine de la météorologie. En effet, prévoir la température externe demande l'intervention de plusieurs variables comme: l'humidité, la vitesse du vent, les précipitations… Dans ce cas on peut toujours appliqué un autre modèle de régression linéaire: la régression linéaire multiple. Dans ce cas, on suppose que la variable à expliquer: suit le modèle suivant: Où:, est une suite de variables aléatoire indépendantes et identiquement distribuées de loi. Dans ce modèle, on a variables à estimées, contrairement au modèle précédent où, on en avait a estimées. En notant:. On choisira pour estimateur de, l'estimateur des moindres carrées comme dans le modèle de régression linéaire simple. Cet estimateur qu'on note est solution du problème d'optimisation suivant: Qui peut encore se re-écrire sous la forme:. Où: correspond à la norme euclidienne: Pour. est le vecteur contenant les observations., est appelée matrice de design, elle possède pour colonnes les observations des variables.
Vous pouvez télécharger le fichier csv ici. data = ad_csv('') # On transforme les colonnes en array x = (data['YearsExperience']) y = (data['Salary']) # On doit transformer la forme des vecteurs pour qu'ils puissent être # utilisés par Scikit learn x = shape(-1, 1) y = shape(-1, 1) On a deux colonnes, Years of experience le nombre d'années d'expérience et Salary qui donne le salaire. D'abord, on peut commencer par tracer la première variable en fonction de l'autre. On remarque bien la relation de linéarité entre les deux variables. tter(x, y) La fonction tter permet de tracer un nuage de points. Le résultat est le suivant: Evolution du salaire en fonction du nombre d'années d'expérience (Source: Kaggle) Il est temps de construire le modèle: reg = LinearRegression(normalize=True) (x, y) Je rappelle que l'on souhaite trouver la droite f(x)=ax+b qui minimise l'erreur. Pour accéder à ces valeurs on peut écrire: a = ef_ b = ercept_ Traçons la courbe de prédictions: ordonne = nspace(0, 15, 1000) tter(x, y) (ordonne, a*ordonne+b, color='r') On obtient le résultat suivant: Résultat de la régression avec Scikit learn Voilà!
Aujourd'hui, la question n'est plus de choisir entre R ou python, ces deux langages ont leurs avantages et leurs défauts. Votre choix doit se faire en fonction des projets que vous rencontrerez dans votre vie de data geek (on peut remplacer geek par scientist, analyst, miner,.... ). Mon article sur les langages de la data science vous éclairera aussi à ce sujet. Le seul conseil à vous donner: essayez-les, entraînez-vous et vous les adopterez très vite.
On remarque que plus \(\Gamma(a, b)\) est faible, plus la droite d'ajustement semble passer près des points de mesure. On ne présente pas ici les calculs permettant de minimiser une fonction de plusieurs variables mais on admettra que dans le cas précédent, les valeurs \(\hat a\) et \(\hat b\) qui minimise \(\Gamma(a, b)\) sont calculables analytiquement. Elles ont pour expression (pas à connaître par coeur): \[\begin{split} \begin{cases} \hat a &= \frac{\frac{1}{k}\sum_i x_i y_i - \left (\frac{1}{k}\sum x_i\right) \left (\frac{1}{k}\sum y_i\right)}{\frac{1}{k}\sum_i x_i^2 - {\left (\frac{1}{k}\sum x_i\right)}^2}\\ \hat b &= \overline{y} - \hat a \overline{x} \end{cases} \end{split}\] avec \(\overline{y}\) la moyenne des \(y_i\) et \(\overline{x}\) la moyenne des \(x_i\). 5. 2. numpy. polyfit ¶ 5. Syntaxe ¶ La majorité des méthodes numériques proposées par les logiciels utilisent la méthode des moindres carrés (DROITEREG sous Excel et Libreoffice par exemple). C'est aussi le cas de la fonction polyfit de la bibliothèque numpy.