{"id":127,"date":"2026-04-29T06:53:39","date_gmt":"2026-04-29T05:53:39","guid":{"rendered":"https:\/\/vmi3217629.contaboserver.net\/?p=127"},"modified":"2026-04-29T06:56:11","modified_gmt":"2026-04-29T05:56:11","slug":"la-regression-lineaire-et-la-regression-logistique","status":"publish","type":"post","link":"https:\/\/vmi3217629.contaboserver.net\/?p=127","title":{"rendered":"R\u00e9gression de A \u00e0 Z"},"content":{"rendered":"\n<!DOCTYPE html>\n<html lang=\"fr\">\n<head>\n<meta charset=\"UTF-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<title>Comment na\u00eet un mod\u00e8le \u2014 R\u00e9gression lin\u00e9aire et logistique de A \u00e0 Z \u2014 MathsVivantes<\/title>\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Playfair+Display:ital,wght@0,400;0,700;1,400&#038;family=Source+Serif+4:ital,wght@0,300;0,400;0,600;1,300;1,400&#038;display=swap\" rel=\"stylesheet\">\n<style>\n  :root {\n    --noir: #0f0e0b;\n    --creme: #f5f0e8;\n    --acier: #1a2a3a;\n    --acier-clair: #3a6a9a;\n    --acier-pale: #e8f0f8;\n    --or: #c8a010;\n    --or-clair: #f0d060;\n    --rouge: #b03a2e;\n    --vert: #2e6b3e;\n    --gris: #6b6560;\n    --gris-clair: #e8e2d8;\n  }\n\n  * { margin: 0; padding: 0; box-sizing: border-box; }\n\n  body {\n    background-color: var(--creme);\n    color: var(--noir);\n    font-family: 'Source Serif 4', Georgia, serif;\n    font-weight: 300;\n    line-height: 1.8;\n  }\n\n  .hero {\n    background: #080f18;\n    color: var(--creme);\n    padding: 80px 40px 70px;\n    position: relative;\n    overflow: hidden;\n  }\n  .hero::before {\n    content: \"\u2202 \u03b2 \u03a3 \u2207 L\";\n    position: absolute;\n    top: 20px; right: 40px;\n    font-size: 5rem;\n    opacity: 0.05;\n    font-family: 'Playfair Display', serif;\n    letter-spacing: 0.3em;\n  }\n  .hero-inner { max-width: 760px; margin: 0 auto; }\n\n  .article-rubrique {\n    display: inline-block;\n    background: var(--acier-clair);\n    color: white;\n    font-size: 0.7rem;\n    letter-spacing: 0.18em;\n    text-transform: uppercase;\n    padding: 4px 12px;\n    margin-bottom: 24px;\n    font-weight: 600;\n  }\n\n  .hero h1 {\n    font-family: 'Playfair Display', serif;\n    font-size: clamp(1.8rem, 4.5vw, 3rem);\n    line-height: 1.2;\n    margin-bottom: 24px;\n    font-weight: 700;\n  }\n  .hero h1 em { color: var(--or-clair); font-style: italic; }\n\n  .hero-intro {\n    font-size: 1.15rem;\n    opacity: 0.75;\n    max-width: 600px;\n    font-style: italic;\n    border-left: 3px solid var(--acier-clair);\n    padding-left: 20px;\n    margin-bottom: 32px;\n  }\n  .meta { font-size: 0.8rem; opacity: 0.45; letter-spacing: 0.08em; text-transform: uppercase; }\n\n  \/* NAVIGATION INTERNE *\/\n  .nav-article {\n    background: var(--acier);\n    color: var(--creme);\n    padding: 24px 32px;\n    margin-bottom: 0;\n  }\n  .nav-article-titre {\n    font-size: 0.72rem;\n    letter-spacing: 0.18em;\n    text-transform: uppercase;\n    color: var(--acier-clair);\n    margin-bottom: 12px;\n    font-weight: 600;\n  }\n  .nav-article a {\n    display: block;\n    color: rgba(245,240,232,0.7);\n    text-decoration: none;\n    font-size: 0.9rem;\n    padding: 3px 0;\n    transition: color 0.2s;\n  }\n  .nav-article a:hover { color: var(--or-clair); }\n\n  .article-body { max-width: 760px; margin: 0 auto; padding: 60px 40px 80px; }\n  .article-body p { font-size: 1.05rem; margin-bottom: 1.6em; color: #2a2520; }\n\n  \/* PARTIES *\/\n  .partie-header {\n    background: var(--acier);\n    color: white;\n    padding: 20px 28px;\n    margin: 3em 0 1.5em;\n  }\n  .partie-numero {\n    font-size: 0.72rem;\n    letter-spacing: 0.2em;\n    text-transform: uppercase;\n    color: var(--acier-clair);\n    margin-bottom: 6px;\n  }\n  .partie-titre {\n    font-family: 'Playfair Display', serif;\n    font-size: 1.4rem;\n    font-weight: 700;\n  }\n\n  h2 {\n    font-family: 'Playfair Display', serif;\n    font-size: 1.4rem;\n    margin: 2.5em 0 0.8em;\n    color: var(--noir);\n    font-weight: 700;\n    padding-bottom: 8px;\n    border-bottom: 2px solid var(--gris-clair);\n  }\n  h2 .num {\n    color: var(--acier-clair);\n    margin-right: 8px;\n  }\n\n  h3 {\n    font-family: 'Playfair Display', serif;\n    font-size: 1.1rem;\n    font-weight: 700;\n    margin: 1.8em 0 0.6em;\n    color: var(--acier);\n  }\n\n  \/* ENCADR\u00c9S *\/\n  .encadre {\n    border: 1.5px solid var(--acier-clair);\n    background: white;\n    padding: 24px 28px;\n    margin: 2em 0;\n    position: relative;\n  }\n  .encadre-titre {\n    position: absolute;\n    top: -12px; left: 20px;\n    background: white;\n    padding: 0 8px;\n    font-size: 0.72rem;\n    letter-spacing: 0.15em;\n    text-transform: uppercase;\n    color: var(--acier-clair);\n    font-weight: 600;\n  }\n  .encadre p { margin-bottom: 0.8em; font-size: 0.98rem; }\n  .encadre p:last-child { margin-bottom: 0; }\n\n  .encadre-result {\n    background: #080f18;\n    color: var(--creme);\n    border: none;\n    padding: 24px 32px;\n    margin: 2em 0;\n  }\n  .encadre-result .encadre-titre { background: #080f18; color: var(--or-clair); }\n  .encadre-result p { color: rgba(245,240,232,0.85); margin-bottom: 0.6em; font-size: 0.98rem; }\n\n  .definition {\n    background: var(--acier-pale);\n    border-left: 4px solid var(--acier-clair);\n    padding: 20px 24px;\n    margin: 1.8em 0;\n  }\n  .definition strong { color: var(--acier); font-family: 'Playfair Display', serif; }\n\n  .attention {\n    background: #fff8e8;\n    border-left: 4px solid var(--or);\n    padding: 20px 24px;\n    margin: 1.8em 0;\n  }\n  .attention strong { color: var(--or); font-family: 'Playfair Display', serif; }\n\n  \/* FORMULES *\/\n  .formule {\n    text-align: center;\n    font-size: 1.25rem;\n    font-family: 'Playfair Display', serif;\n    margin: 1.5em 0;\n    color: var(--noir);\n    padding: 18px;\n    background: white;\n    border: 2px solid var(--acier-clair);\n  }\n  .formule-label {\n    font-size: 0.7rem;\n    letter-spacing: 0.15em;\n    text-transform: uppercase;\n    color: var(--acier-clair);\n    margin-bottom: 8px;\n    font-family: 'Source Serif 4', serif;\n    font-style: normal;\n    font-weight: 600;\n  }\n\n  .formule-bloc {\n    background: white;\n    border: 2px solid var(--acier-clair);\n    padding: 20px 24px;\n    margin: 1.5em 0;\n  }\n  .formule-bloc .label {\n    font-size: 0.7rem;\n    letter-spacing: 0.15em;\n    text-transform: uppercase;\n    color: var(--acier-clair);\n    font-weight: 600;\n    margin-bottom: 10px;\n    display: block;\n  }\n  .formule-bloc .math {\n    font-family: 'Playfair Display', serif;\n    font-size: 1.15rem;\n    text-align: center;\n    line-height: 2;\n  }\n\n  \/* \u00c9TAPES *\/\n  .etapes-container { margin: 1.5em 0; }\n  .etape {\n    display: flex;\n    gap: 16px;\n    margin-bottom: 12px;\n    background: white;\n    border-left: 3px solid var(--acier-clair);\n    padding: 14px 20px;\n  }\n  .etape-num {\n    font-family: 'Playfair Display', serif;\n    font-weight: 700;\n    color: var(--acier-clair);\n    font-size: 1.1rem;\n    min-width: 28px;\n  }\n  .etape-content { font-size: 0.97rem; color: #2a2520; }\n  .etape-content .math {\n    font-family: 'Playfair Display', serif;\n    font-size: 1.05rem;\n    display: block;\n    margin: 6px 0;\n    text-align: center;\n  }\n\n  \/* SCHEMA *\/\n  .schema-container {\n    background: white;\n    border: 1.5px solid var(--acier-clair);\n    padding: 24px;\n    margin: 2em 0;\n    text-align: center;\n  }\n  .schema-titre {\n    font-size: 0.72rem;\n    letter-spacing: 0.15em;\n    text-transform: uppercase;\n    color: var(--acier-clair);\n    font-weight: 600;\n    margin-bottom: 16px;\n  }\n\n  \/* TABLE *\/\n  .table-container { overflow-x: auto; margin: 2em 0; }\n  table { width: 100%; border-collapse: collapse; background: white; font-size: 0.95rem; }\n  th { background: var(--acier); color: white; padding: 12px 16px; text-align: center; font-family: 'Playfair Display', serif; font-weight: 400; }\n  td { padding: 10px 16px; text-align: center; border-bottom: 1px solid var(--gris-clair); color: #2a2520; }\n  tr:last-child td { border-bottom: none; }\n  tr:nth-child(even) td { background: #f0f4f8; }\n\n  \/* CODE *\/\n  .code-block {\n    background: #080f18;\n    color: #c0d8f0;\n    padding: 24px 28px;\n    margin: 2em 0;\n    font-family: 'Courier New', monospace;\n    font-size: 0.87rem;\n    line-height: 1.7;\n    overflow-x: auto;\n    position: relative;\n  }\n  .code-label { position: absolute; top: 8px; right: 12px; font-size: 0.65rem; letter-spacing: 0.15em; text-transform: uppercase; color: var(--acier-clair); font-family: 'Source Serif 4', serif; }\n  .code-comment { color: #4a6a8a; }\n  .code-keyword { color: #80b0e0; }\n  .code-string { color: var(--or-clair); }\n  .code-number { color: #80e0b0; }\n  .code-function { color: #a0c8f0; }\n\n  \/* EXERCICE *\/\n  .exercice {\n    background: #080f18;\n    color: var(--creme);\n    padding: 36px 40px;\n    margin: 3em 0;\n  }\n  .exercice h3 { color: var(--or-clair); font-style: normal; margin-top: 0; margin-bottom: 1em; font-size: 1.1rem; font-weight: 600; border: none; padding: 0; }\n  .exercice p { color: rgba(245,240,232,0.82); font-size: 0.97rem; margin-bottom: 0.8em; }\n  .exercice .correction { border-top: 1px solid rgba(58,106,154,0.4); margin-top: 1.5em; padding-top: 1.2em; }\n  .exercice .correction-titre { font-size: 0.7rem; letter-spacing: 0.18em; text-transform: uppercase; color: var(--or-clair); margin-bottom: 0.8em; font-weight: 600; }\n\n  blockquote {\n    padding: 0 0 0 32px;\n    margin: 2em 0;\n    position: relative;\n    font-style: italic;\n    font-size: 1.1rem;\n    color: #3a3530;\n  }\n  blockquote::before {\n    content: \"\\201C\";\n    position: absolute;\n    left: 0; top: -10px;\n    font-size: 3.5rem;\n    color: var(--acier-clair);\n    font-family: 'Playfair Display', serif;\n    line-height: 1;\n  }\n  blockquote cite { display: block; font-size: 0.82rem; font-style: normal; letter-spacing: 0.1em; text-transform: uppercase; color: var(--gris); margin-top: 8px; }\n\n  .separateur {\n    border: none;\n    border-top: 1px solid var(--gris-clair);\n    margin: 3em 0;\n  }\n\n  .conclusion { border-top: 2px solid var(--noir); margin-top: 3em; padding-top: 2em; }\n\n  @media (max-width: 600px) {\n    .hero { padding: 50px 20px 40px; }\n    .article-body { padding: 40px 20px 60px; }\n    .exercice { padding: 24px 20px; }\n    .code-block { padding: 16px; font-size: 0.78rem; }\n    .nav-article { padding: 16px 20px; }\n  }\n<\/style>\n<\/head>\n<body>\n\n<!-- HERO -->\n<div class=\"hero\">\n  <div class=\"hero-inner\">\n    <div class=\"article-rubrique\">Machine Learning \u00b7 Article #11<\/div>\n    <h1>Comment na\u00eet un mod\u00e8le :<br>r\u00e9gression lin\u00e9aire et logistique<br><em>de A \u00e0 Z<\/em><\/h1>\n    <p class=\"hero-intro\">Derri\u00e8re chaque pr\u00e9diction d&rsquo;une IA se cachent des dizaines de formules math\u00e9matiques. Aujourd&rsquo;hui on ouvre le capot \u2014 d\u00e9riv\u00e9es, matrices, vraisemblance, gradient \u2014 et on construit tout from scratch, sans rien cacher.<\/p>\n    <div class=\"meta\">Par Odilon AKOWANOU &nbsp;\u00b7&nbsp; MathsVivantes &nbsp;\u00b7&nbsp; Lecture : 20 min<\/div>\n  <\/div>\n<\/div>\n\n<!-- NAVIGATION INTERNE -->\n<div class=\"nav-article\">\n  <div style=\"max-width:760px; margin:0 auto;\">\n    <div class=\"nav-article-titre\">\ud83d\udccb Sommaire de l&rsquo;article<\/div>\n    <a href=\"#partie1\">Partie I \u2014 R\u00e9gression Lin\u00e9aire : construction math\u00e9matique compl\u00e8te<\/a>\n    <a href=\"#partie2\">Partie II \u2014 R\u00e9gression Logistique : construction math\u00e9matique compl\u00e8te<\/a>\n    <a href=\"#partie3\">Partie III \u2014 Impl\u00e9mentation Python from scratch<\/a>\n    <a href=\"#exercice\">Exercice corrig\u00e9<\/a>\n  <\/div>\n<\/div>\n\n<!-- CORPS -->\n<article class=\"article-body\">\n\n  <p>\n    Dans les articles pr\u00e9c\u00e9dents, nous avons utilis\u00e9 la r\u00e9gression lin\u00e9aire et la r\u00e9gression logistique comme des bo\u00eetes noires \u2014 on entre des donn\u00e9es, on obtient des pr\u00e9dictions. Aujourd&rsquo;hui, on ouvre ces bo\u00eetes. On va construire chaque formule, justifier chaque choix, et comprendre pourquoi les math\u00e9matiques nous donnent exactement ces \u00e9quations et pas d&rsquo;autres.\n  <\/p>\n\n  <p>\n    Pr\u00e9pare-toi : cet article est dense. Mais chaque \u00e9tape sera expliqu\u00e9e avec une patience absolue. Quand tu auras fini, tu comprendras ce que tr\u00e8s peu de gens comprennent vraiment \u2014 m\u00eame parmi ceux qui utilisent ces mod\u00e8les quotidiennement.\n  <\/p>\n\n  <!-- ============================================================ -->\n  <!-- PARTIE 1 : R\u00c9GRESSION LIN\u00c9AIRE -->\n  <!-- ============================================================ -->\n\n  <div class=\"partie-header\" id=\"partie1\">\n    <div class=\"partie-numero\">Partie I<\/div>\n    <div class=\"partie-titre\">R\u00e9gression Lin\u00e9aire \u2014 Construction math\u00e9matique compl\u00e8te<\/div>\n  <\/div>\n\n  <h2><span class=\"num\">1.1<\/span> Le probl\u00e8me pos\u00e9<\/h2>\n\n  <p>\n    On dispose de n observations. Chaque observation est un couple (x\u1d62, y\u1d62) : une valeur d&rsquo;entr\u00e9e x\u1d62 et une valeur de sortie y\u1d62. On veut trouver une droite <strong>\u0177 = ax + b<\/strong> qui pr\u00e9dit le mieux possible y \u00e0 partir de x.\n  <\/p>\n\n  <p>\n    Mais qu&rsquo;est-ce que \u00ab\u00a0le mieux possible\u00a0\u00bb ? Il faut choisir une mesure de l&rsquo;erreur. La plus naturelle est la distance entre la valeur r\u00e9elle y\u1d62 et la valeur pr\u00e9dite \u0177\u1d62 = ax\u1d62 + b. On appelle cette distance le <strong>r\u00e9sidu<\/strong> :\n  <\/p>\n\n  <div class=\"formule\">\n    <div class=\"formule-label\">R\u00e9sidu de l&rsquo;observation i<\/div>\n    e\u1d62 = y\u1d62 \u2212 \u0177\u1d62 = y\u1d62 \u2212 (ax\u1d62 + b)\n  <\/div>\n\n  <p>\n    Pourquoi ne pas simplement minimiser la somme des r\u00e9sidus \u03a3e\u1d62 ? Parce que les erreurs positives et n\u00e9gatives s&rsquo;annuleraient \u2014 une droite tr\u00e8s mauvaise pourrait avoir une somme nulle. On utilise donc les <strong>carr\u00e9s des r\u00e9sidus<\/strong>, qui sont toujours positifs.\n  <\/p>\n\n  <h2><span class=\"num\">1.2<\/span> La fonction de co\u00fbt J(a, b)<\/h2>\n\n  <p>\n    On d\u00e9finit la fonction de co\u00fbt \u2014 aussi appel\u00e9e erreur quadratique moyenne (MSE pour Mean Squared Error) :\n  <\/p>\n\n  <div class=\"formule-bloc\">\n    <span class=\"label\">Fonction de co\u00fbt \u2014 Erreur quadratique moyenne<\/span>\n    <div class=\"math\">J(a, b) = (1\/n) \u00d7 \u03a3\u1d62\u208c\u2081\u207f (y\u1d62 \u2212 ax\u1d62 \u2212 b)\u00b2<\/div>\n  <\/div>\n\n  <p>\n    J(a, b) est une fonction de deux variables : la pente a et l&rsquo;ordonn\u00e9e \u00e0 l&rsquo;origine b. Notre objectif est de trouver les valeurs de a et b qui <strong>minimisent J<\/strong>.\n  <\/p>\n\n  <div class=\"schema-container\">\n    <div class=\"schema-titre\">\ud83d\udcd0 Visualisation de la fonction de co\u00fbt \u2014 une parabole en 3D<\/div>\n    <svg width=\"100%\" viewBox=\"0 0 520 260\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n      <rect width=\"520\" height=\"260\" fill=\"white\"\/>\n      <!-- Axes 3D simplifi\u00e9s -->\n      <line x1=\"260\" y1=\"240\" x2=\"60\" y2=\"160\" stroke=\"#0f0e0b\" stroke-width=\"1.5\"\/>\n      <line x1=\"260\" y1=\"240\" x2=\"460\" y2=\"160\" stroke=\"#0f0e0b\" stroke-width=\"1.5\"\/>\n      <line x1=\"260\" y1=\"240\" x2=\"260\" y2=\"40\" stroke=\"#0f0e0b\" stroke-width=\"1.5\"\/>\n      <!-- Labels axes -->\n      <text x=\"42\" y=\"156\" font-size=\"12\" fill=\"#6b6560\" font-style=\"italic\">a<\/text>\n      <text x=\"466\" y=\"156\" font-size=\"12\" fill=\"#6b6560\" font-style=\"italic\">b<\/text>\n      <text x=\"248\" y=\"32\" font-size=\"12\" fill=\"#6b6560\" font-style=\"italic\">J(a,b)<\/text>\n      <!-- Parabole en 3D (ellipse repr\u00e9sentant le bol) -->\n      <ellipse cx=\"260\" cy=\"175\" rx=\"130\" ry=\"50\" fill=\"none\" stroke=\"#3a6a9a\" stroke-width=\"1.5\" stroke-dasharray=\"6,3\" opacity=\"0.5\"\/>\n      <ellipse cx=\"260\" cy=\"155\" rx=\"90\" ry=\"34\" fill=\"none\" stroke=\"#3a6a9a\" stroke-width=\"1.5\" stroke-dasharray=\"6,3\" opacity=\"0.6\"\/>\n      <ellipse cx=\"260\" cy=\"140\" rx=\"55\" ry=\"20\" fill=\"none\" stroke=\"#3a6a9a\" stroke-width=\"1.5\" opacity=\"0.7\"\/>\n      <!-- Point minimum -->\n      <circle cx=\"260\" cy=\"128\" r=\"6\" fill=\"#c8a010\"\/>\n      <text x=\"268\" y=\"124\" font-size=\"11\" fill=\"#c8a010\" font-weight=\"bold\">Minimum J*<\/text>\n      <text x=\"245\" y=\"142\" font-size=\"10\" fill=\"#c8a010\">(a*, b*)<\/text>\n      <!-- Courbes de niveau -->\n      <text x=\"60\" y=\"240\" font-size=\"10\" fill=\"#6b6560\">Courbes de niveau de J \u2014 le minimum est le fond du \u00ab\u00a0bol\u00a0\u00bb<\/text>\n    <\/svg>\n  <\/div>\n\n  <h2><span class=\"num\">1.3<\/span> Minimisation par les d\u00e9riv\u00e9es partielles<\/h2>\n\n  <p>\n    Un minimum d&rsquo;une fonction de plusieurs variables se trouve l\u00e0 o\u00f9 toutes ses d\u00e9riv\u00e9es partielles sont nulles. On pose donc :\n  <\/p>\n\n  <div class=\"formule-bloc\">\n    <span class=\"label\">Conditions du premier ordre<\/span>\n    <div class=\"math\">\u2202J\/\u2202a = 0 &nbsp;&nbsp; et &nbsp;&nbsp; \u2202J\/\u2202b = 0<\/div>\n  <\/div>\n\n  <h3>Calcul de \u2202J\/\u2202b<\/h3>\n\n  <div class=\"etapes-container\">\n    <div class=\"etape\">\n      <div class=\"etape-num\">\u2460<\/div>\n      <div class=\"etape-content\">\n        On part de J(a,b) = (1\/n) \u03a3(y\u1d62 \u2212 ax\u1d62 \u2212 b)\u00b2\n        <span class=\"math\">\u2202J\/\u2202b = (1\/n) \u00d7 \u03a3 2(y\u1d62 \u2212 ax\u1d62 \u2212 b) \u00d7 (\u22121)<\/span>\n      <\/div>\n    <\/div>\n    <div class=\"etape\">\n      <div class=\"etape-num\">\u2461<\/div>\n      <div class=\"etape-content\">\n        On simplifie :\n        <span class=\"math\">\u2202J\/\u2202b = \u2212(2\/n) \u00d7 \u03a3(y\u1d62 \u2212 ax\u1d62 \u2212 b)<\/span>\n      <\/div>\n    <\/div>\n    <div class=\"etape\">\n      <div class=\"etape-num\">\u2462<\/div>\n      <div class=\"etape-content\">\n        On pose \u2202J\/\u2202b = 0 :\n        <span class=\"math\">\u03a3(y\u1d62 \u2212 ax\u1d62 \u2212 b) = 0<\/span>\n      <\/div>\n    <\/div>\n    <div class=\"etape\">\n      <div class=\"etape-num\">\u2463<\/div>\n      <div class=\"etape-content\">\n        On d\u00e9veloppe :\n        <span class=\"math\">\u03a3y\u1d62 \u2212 a \u03a3x\u1d62 \u2212 nb = 0<\/span>\n      <\/div>\n    <\/div>\n    <div class=\"etape\">\n      <div class=\"etape-num\">\u2464<\/div>\n      <div class=\"etape-content\">\n        On divise par n \u2014 on reconna\u00eet les moyennes x\u0304 = \u03a3x\u1d62\/n et \u0233 = \u03a3y\u1d62\/n :\n        <span class=\"math\" style=\"color:#c8a010; font-weight:700;\">b = \u0233 \u2212 a x\u0304<\/span>\n      <\/div>\n    <\/div>\n  <\/div>\n\n  <p>\n    Cette \u00e9quation dit quelque chose de beau : <strong>la droite de r\u00e9gression passe toujours par le point moyen (x\u0304, \u0233)<\/strong>. Quoi que soient les donn\u00e9es, le centre de gravit\u00e9 est toujours sur la droite.\n  <\/p>\n\n  <h3>Calcul de \u2202J\/\u2202a<\/h3>\n\n  <div class=\"etapes-container\">\n    <div class=\"etape\">\n      <div class=\"etape-num\">\u2460<\/div>\n      <div class=\"etape-content\">\n        <span class=\"math\">\u2202J\/\u2202a = \u2212(2\/n) \u00d7 \u03a3 x\u1d62(y\u1d62 \u2212 ax\u1d62 \u2212 b)<\/span>\n      <\/div>\n    <\/div>\n    <div class=\"etape\">\n      <div class=\"etape-num\">\u2461<\/div>\n      <div class=\"etape-content\">\n        On pose \u2202J\/\u2202a = 0 :\n        <span class=\"math\">\u03a3 x\u1d62(y\u1d62 \u2212 ax\u1d62 \u2212 b) = 0<\/span>\n      <\/div>\n    <\/div>\n    <div class=\"etape\">\n      <div class=\"etape-num\">\u2462<\/div>\n      <div class=\"etape-content\">\n        On substitue b = \u0233 \u2212 ax\u0304 (r\u00e9sultat pr\u00e9c\u00e9dent) :\n        <span class=\"math\">\u03a3 x\u1d62(y\u1d62 \u2212 ax\u1d62 \u2212 \u0233 + ax\u0304) = 0<\/span>\n      <\/div>\n    <\/div>\n    <div class=\"etape\">\n      <div class=\"etape-num\">\u2463<\/div>\n      <div class=\"etape-content\">\n        On regroupe :\n        <span class=\"math\">\u03a3 x\u1d62(y\u1d62 \u2212 \u0233) \u2212 a \u03a3 x\u1d62(x\u1d62 \u2212 x\u0304) = 0<\/span>\n      <\/div>\n    <\/div>\n    <div class=\"etape\">\n      <div class=\"etape-num\">\u2464<\/div>\n      <div class=\"etape-content\">\n        On isole a. On peut montrer que \u03a3x\u1d62(x\u1d62\u2212x\u0304) = \u03a3(x\u1d62\u2212x\u0304)\u00b2 et \u03a3x\u1d62(y\u1d62\u2212\u0233) = \u03a3(x\u1d62\u2212x\u0304)(y\u1d62\u2212\u0233) :\n        <span class=\"math\" style=\"color:#c8a010; font-weight:700;\">a = \u03a3(x\u1d62\u2212x\u0304)(y\u1d62\u2212\u0233) \/ \u03a3(x\u1d62\u2212x\u0304)\u00b2<\/span>\n      <\/div>\n    <\/div>\n  <\/div>\n\n  <div class=\"encadre-result\">\n    <span class=\"encadre-titre\">\u2705 Formules closes de la r\u00e9gression lin\u00e9aire<\/span>\n    <p style=\"font-family:'Playfair Display',serif; font-size:1.1rem; text-align:center; margin:10px 0;\">a = \u03a3(x\u1d62\u2212x\u0304)(y\u1d62\u2212\u0233) \/ \u03a3(x\u1d62\u2212x\u0304)\u00b2<\/p>\n    <p style=\"font-family:'Playfair Display',serif; font-size:1.1rem; text-align:center; margin:10px 0;\">b = \u0233 \u2212 a\u00b7x\u0304<\/p>\n    <p>Ces formules donnent la solution exacte et unique en un seul calcul \u2014 c&rsquo;est la m\u00e9thode des moindres carr\u00e9s ordinaires (OLS).<\/p>\n  <\/div>\n\n  <h2><span class=\"num\">1.4<\/span> La forme matricielle \u2014 pour plusieurs variables<\/h2>\n\n  <p>\n    Avec une seule variable x, on a les formules closes. Mais si on veut pr\u00e9dire y \u00e0 partir de x\u2081, x\u2082, &#8230;, x\u209a (plusieurs variables), on generalise avec les matrices. Le mod\u00e8le devient :\n  <\/p>\n\n  <div class=\"formule-bloc\">\n    <span class=\"label\">Mod\u00e8le vectoriel<\/span>\n    <div class=\"math\">\u0177 = X\u03b2 &nbsp;&nbsp; avec &nbsp;&nbsp; \u03b2 = [b, a\u2081, a\u2082, &#8230;, a\u209a]\u1d40<\/div>\n  <\/div>\n\n  <p>\n    O\u00f9 X est la matrice des donn\u00e9es (n lignes \u00d7 p+1 colonnes, avec une colonne de 1 pour le biais b). La fonction de co\u00fbt devient :\n  <\/p>\n\n  <div class=\"formule-bloc\">\n    <span class=\"label\">Co\u00fbt en forme matricielle<\/span>\n    <div class=\"math\">J(\u03b2) = (1\/n) ||y \u2212 X\u03b2||\u00b2 = (1\/n)(y \u2212 X\u03b2)\u1d40(y \u2212 X\u03b2)<\/div>\n  <\/div>\n\n  <p>\n    On d\u00e9rive par rapport \u00e0 \u03b2 et on pose \u2202J\/\u2202\u03b2 = 0. Le calcul matriciel donne les <strong>\u00e9quations normales<\/strong> :\n  <\/p>\n\n  <div class=\"formule-bloc\">\n    <span class=\"label\">\u00c9quations normales \u2192 Solution matricielle<\/span>\n    <div class=\"math\">X\u1d40X\u03b2 = X\u1d40y<\/div>\n    <div class=\"math\" style=\"color:#c8a010; font-weight:700; margin-top:8px;\">\u03b2* = (X\u1d40X)\u207b\u00b9 X\u1d40y<\/div>\n  <\/div>\n\n  <div class=\"definition\">\n    <strong>Condition d&rsquo;existence :<\/strong> La matrice X\u1d40X doit \u00eatre inversible. C&rsquo;est le cas si et seulement si les colonnes de X sont lin\u00e9airement ind\u00e9pendantes \u2014 autrement dit, aucune variable explicative n&rsquo;est une combinaison lin\u00e9aire des autres.\n  <\/div>\n\n  <hr class=\"separateur\"\/>\n\n  <!-- ============================================================ -->\n  <!-- PARTIE 2 : R\u00c9GRESSION LOGISTIQUE -->\n  <!-- ============================================================ -->\n\n  <div class=\"partie-header\" id=\"partie2\">\n    <div class=\"partie-numero\">Partie II<\/div>\n    <div class=\"partie-titre\">R\u00e9gression Logistique \u2014 Construction math\u00e9matique compl\u00e8te<\/div>\n  <\/div>\n\n  <h2><span class=\"num\">2.1<\/span> Pourquoi pas le MSE ici ?<\/h2>\n\n  <p>\n    Pour la classification binaire (y \u2208 {0, 1}), on pourrait na\u00efvement utiliser le m\u00eame MSE. Deux probl\u00e8mes fondamentaux apparaissent :\n  <\/p>\n\n  <div class=\"encadre\">\n    <span class=\"encadre-titre\">\u26a0\ufe0f Probl\u00e8mes du MSE pour la classification<\/span>\n    <p><strong>Probl\u00e8me 1 \u2014 Valeurs hors [0,1] :<\/strong> La droite lin\u00e9aire peut pr\u00e9dire des valeurs n\u00e9gatives ou sup\u00e9rieures \u00e0 1, qui n&rsquo;ont aucun sens comme probabilit\u00e9s.<\/p>\n    <p><strong>Probl\u00e8me 2 \u2014 Fonction de co\u00fbt non convexe :<\/strong> Si on applique le MSE avec la sigmo\u00efde, la fonction J(\u03b8) a de nombreux minima locaux \u2014 la descente de gradient ne converge pas vers le minimum global.<\/p>\n    <p><strong>Solution :<\/strong> Choisir une autre fonction de co\u00fbt, d\u00e9riv\u00e9e du principe de <strong>Maximum de Vraisemblance<\/strong>.<\/p>\n  <\/div>\n\n  <h2><span class=\"num\">2.2<\/span> Le mod\u00e8le probabiliste<\/h2>\n\n  <p>\n    Le mod\u00e8le logistique suppose que la probabilit\u00e9 que y = 1 suit une loi de Bernoulli :\n  <\/p>\n\n  <div class=\"formule-bloc\">\n    <span class=\"label\">Mod\u00e8le probabiliste<\/span>\n    <div class=\"math\">p(y=1 | x ; \u03b8) = \u03c3(\u03b8\u1d40x) = 1 \/ (1 + e^(\u2212\u03b8\u1d40x))<\/div>\n    <div class=\"math\">p(y=0 | x ; \u03b8) = 1 \u2212 \u03c3(\u03b8\u1d40x)<\/div>\n  <\/div>\n\n  <p>\n    On peut \u00e9crire ces deux \u00e9quations en une seule formule compacte, valable pour y \u2208 {0,1} :\n  <\/p>\n\n  <div class=\"formule-bloc\">\n    <span class=\"label\">Formule compacte de Bernoulli<\/span>\n    <div class=\"math\">p(y | x ; \u03b8) = \u03c3(\u03b8\u1d40x)^y \u00d7 (1 \u2212 \u03c3(\u03b8\u1d40x))^(1\u2212y)<\/div>\n  <\/div>\n\n  <p>\n    V\u00e9rifie : si y=1, on obtient \u03c3(\u03b8\u1d40x)\u00b9 \u00d7 (1\u2212\u03c3)\u2070 = \u03c3(\u03b8\u1d40x). Si y=0, on obtient \u03c3\u2070 \u00d7 (1\u2212\u03c3)\u00b9 = 1\u2212\u03c3. Parfait.\n  <\/p>\n\n  <h2><span class=\"num\">2.3<\/span> La vraisemblance \u2014 Maximum Likelihood Estimation (MLE)<\/h2>\n\n  <p>\n    L&rsquo;id\u00e9e du MLE est la suivante : parmi tous les param\u00e8tres \u03b8 possibles, trouve celui qui rend les donn\u00e9es observ\u00e9es <em>les plus probables<\/em>.\n  <\/p>\n\n  <p>\n    Si les n observations sont ind\u00e9pendantes, la probabilit\u00e9 conjointe d&rsquo;observer toutes les donn\u00e9es est le <strong>produit<\/strong> des probabilit\u00e9s individuelles. C&rsquo;est la <strong>vraisemblance<\/strong> :\n  <\/p>\n\n  <div class=\"formule-bloc\">\n    <span class=\"label\">Fonction de vraisemblance<\/span>\n    <div class=\"math\">L(\u03b8) = \u03a0\u1d62\u208c\u2081\u207f p(y\u1d62 | x\u1d62 ; \u03b8)<\/div>\n    <div class=\"math\">L(\u03b8) = \u03a0\u1d62\u208c\u2081\u207f \u03c3(\u03b8\u1d40x\u1d62)^y\u1d62 \u00d7 (1 \u2212 \u03c3(\u03b8\u1d40x\u1d62))^(1\u2212y\u1d62)<\/div>\n  <\/div>\n\n  <h2><span class=\"num\">2.4<\/span> La log-vraisemblance<\/h2>\n\n  <p>\n    Maximiser L(\u03b8) est difficile \u00e0 cause des produits. Or le logarithme est une fonction croissante \u2014 maximiser L(\u03b8) revient \u00e0 maximiser log(L(\u03b8)). Et le log transforme les produits en sommes :\n  <\/p>\n\n  <div class=\"etapes-container\">\n    <div class=\"etape\">\n      <div class=\"etape-num\">\u2460<\/div>\n      <div class=\"etape-content\">\n        On prend le log :\n        <span class=\"math\">\u2113(\u03b8) = log L(\u03b8) = \u03a3\u1d62 log[\u03c3(\u03b8\u1d40x\u1d62)^y\u1d62 \u00d7 (1\u2212\u03c3(\u03b8\u1d40x\u1d62))^(1\u2212y\u1d62)]<\/span>\n      <\/div>\n    <\/div>\n    <div class=\"etape\">\n      <div class=\"etape-num\">\u2461<\/div>\n      <div class=\"etape-content\">\n        On utilise log(a\u1d47) = b\u00b7log(a) :\n        <span class=\"math\">\u2113(\u03b8) = \u03a3\u1d62 [y\u1d62 log \u03c3(\u03b8\u1d40x\u1d62) + (1\u2212y\u1d62) log(1\u2212\u03c3(\u03b8\u1d40x\u1d62))]<\/span>\n      <\/div>\n    <\/div>\n  <\/div>\n\n  <p>\n    On veut <strong>maximiser<\/strong> \u2113(\u03b8). Par convention, on pr\u00e9f\u00e8re <strong>minimiser<\/strong> les fonctions de co\u00fbt. On d\u00e9finit donc la <strong>Binary Cross-Entropy Loss<\/strong> (perte par entropie crois\u00e9e) :\n  <\/p>\n\n  <div class=\"formule-bloc\">\n    <span class=\"label\">Fonction de co\u00fbt \u2014 Binary Cross-Entropy<\/span>\n    <div class=\"math\">J(\u03b8) = \u2212(1\/n) \u2113(\u03b8)<\/div>\n    <div class=\"math\" style=\"color:#c8a010; font-weight:700; margin-top:8px;\">J(\u03b8) = \u2212(1\/n) \u03a3\u1d62 [y\u1d62 log(p\u1d62) + (1\u2212y\u1d62) log(1\u2212p\u1d62)]<\/div>\n    <div class=\"math\" style=\"margin-top:4px; font-size:0.95rem; color:#6b6560;\">o\u00f9 p\u1d62 = \u03c3(\u03b8\u1d40x\u1d62)<\/div>\n  <\/div>\n\n  <div class=\"definition\">\n    <strong>Pourquoi \u00ab\u00a0Cross-Entropy\u00a0\u00bb ?<\/strong> En th\u00e9orie de l&rsquo;information, l&rsquo;entropie crois\u00e9e mesure la diff\u00e9rence entre deux distributions de probabilit\u00e9. Ici, elle mesure la distance entre la distribution pr\u00e9dite par le mod\u00e8le et la distribution r\u00e9elle des \u00e9tiquettes {0,1}. Minimiser cette distance, c&rsquo;est maximiser l&rsquo;accord entre mod\u00e8le et donn\u00e9es.\n  <\/div>\n\n  <h2><span class=\"num\">2.5<\/span> La descente de gradient<\/h2>\n\n  <p>\n    Contrairement \u00e0 la r\u00e9gression lin\u00e9aire, il n&rsquo;existe pas de formule close pour minimiser J(\u03b8) en logistique. On utilise un algorithme it\u00e9ratif : la <strong>descente de gradient<\/strong>.\n  <\/p>\n\n  <p>\n    L&rsquo;id\u00e9e : partir d&rsquo;un \u03b8 quelconque, calculer le gradient (la direction de mont\u00e9e) et faire un pas dans la direction oppos\u00e9e (descente).\n  <\/p>\n\n  <div class=\"formule-bloc\">\n    <span class=\"label\">Algorithme de descente de gradient<\/span>\n    <div class=\"math\">\u03b8 \u2190 \u03b8 \u2212 \u03b1 \u00b7 \u2207J(\u03b8)<\/div>\n    <div class=\"math\" style=\"font-size:0.9rem; color:#6b6560; margin-top:6px;\">\u03b1 = taux d&rsquo;apprentissage (hyperparam\u00e8tre)<\/div>\n  <\/div>\n\n  <h2><span class=\"num\">2.6<\/span> Calcul du gradient \u2014 la d\u00e9riv\u00e9e compl\u00e8te<\/h2>\n\n  <p>\n    Il faut calculer \u2202J\/\u2202\u03b8. On proc\u00e8de \u00e9tape par \u00e9tape en utilisant la r\u00e8gle de la cha\u00eene.\n  <\/p>\n\n  <h3>\u00c9tape 1 \u2014 D\u00e9riv\u00e9e de la sigmo\u00efde<\/h3>\n\n  <p>\n    Une propri\u00e9t\u00e9 remarquable de la sigmo\u00efde : sa d\u00e9riv\u00e9e s&rsquo;exprime simplement en fonction d&rsquo;elle-m\u00eame.\n  <\/p>\n\n  <div class=\"etapes-container\">\n    <div class=\"etape\">\n      <div class=\"etape-num\">\u2460<\/div>\n      <div class=\"etape-content\">\n        \u03c3(z) = 1\/(1+e\u207b\u1dbb)\n        <span class=\"math\">d\u03c3\/dz = e\u207b\u1dbb \/ (1+e\u207b\u1dbb)\u00b2<\/span>\n      <\/div>\n    <\/div>\n    <div class=\"etape\">\n      <div class=\"etape-num\">\u2461<\/div>\n      <div class=\"etape-content\">\n        On r\u00e9\u00e9crit :\n        <span class=\"math\">d\u03c3\/dz = [1\/(1+e\u207b\u1dbb)] \u00d7 [e\u207b\u1dbb\/(1+e\u207b\u1dbb)]<\/span>\n      <\/div>\n    <\/div>\n    <div class=\"etape\">\n      <div class=\"etape-num\">\u2462<\/div>\n      <div class=\"etape-content\">\n        Or e\u207b\u1dbb\/(1+e\u207b\u1dbb) = 1 \u2212 1\/(1+e\u207b\u1dbb) = 1 \u2212 \u03c3(z) :\n        <span class=\"math\" style=\"color:#c8a010; font-weight:700;\">d\u03c3\/dz = \u03c3(z) \u00d7 (1 \u2212 \u03c3(z))<\/span>\n      <\/div>\n    <\/div>\n  <\/div>\n\n  <h3>\u00c9tape 2 \u2014 Gradient de J(\u03b8)<\/h3>\n\n  <div class=\"etapes-container\">\n    <div class=\"etape\">\n      <div class=\"etape-num\">\u2460<\/div>\n      <div class=\"etape-content\">\n        On part de J(\u03b8) = \u2212(1\/n) \u03a3[y\u1d62 log(p\u1d62) + (1\u2212y\u1d62)log(1\u2212p\u1d62)] avec p\u1d62 = \u03c3(\u03b8\u1d40x\u1d62)\n      <\/div>\n    <\/div>\n    <div class=\"etape\">\n      <div class=\"etape-num\">\u2461<\/div>\n      <div class=\"etape-content\">\n        On d\u00e9rive par rapport \u00e0 \u03b8 par la r\u00e8gle de la cha\u00eene :\n        <span class=\"math\">\u2202J\/\u2202\u03b8 = \u2212(1\/n) \u03a3 [y\u1d62 \u00d7 (1\/p\u1d62) \u2212 (1\u2212y\u1d62) \u00d7 1\/(1\u2212p\u1d62)] \u00d7 \u2202p\u1d62\/\u2202\u03b8<\/span>\n      <\/div>\n    <\/div>\n    <div class=\"etape\">\n      <div class=\"etape-num\">\u2462<\/div>\n      <div class=\"etape-content\">\n        Or \u2202p\u1d62\/\u2202\u03b8 = p\u1d62(1\u2212p\u1d62) \u00d7 x\u1d62 (d\u00e9riv\u00e9e de la sigmo\u00efde \u00d7 d\u00e9riv\u00e9e de \u03b8\u1d40x\u1d62)\n      <\/div>\n    <\/div>\n    <div class=\"etape\">\n      <div class=\"etape-num\">\u2463<\/div>\n      <div class=\"etape-content\">\n        On substitue et on simplifie :\n        <span class=\"math\">\u2202J\/\u2202\u03b8 = \u2212(1\/n) \u03a3 [y\u1d62(1\u2212p\u1d62) \u2212 (1\u2212y\u1d62)p\u1d62] \u00d7 x\u1d62<\/span>\n      <\/div>\n    <\/div>\n    <div class=\"etape\">\n      <div class=\"etape-num\">\u2464<\/div>\n      <div class=\"etape-content\">\n        On d\u00e9veloppe le crochet : y\u1d62 \u2212 y\u1d62p\u1d62 \u2212 p\u1d62 + y\u1d62p\u1d62 = y\u1d62 \u2212 p\u1d62 :\n        <span class=\"math\" style=\"color:#c8a010; font-weight:700;\">\u2202J\/\u2202\u03b8 = (1\/n) \u03a3 (p\u1d62 \u2212 y\u1d62) \u00d7 x\u1d62<\/span>\n      <\/div>\n    <\/div>\n  <\/div>\n\n  <div class=\"encadre-result\">\n    <span class=\"encadre-titre\">\u2705 Gradient de la r\u00e9gression logistique<\/span>\n    <p style=\"font-family:'Playfair Display',serif; font-size:1.1rem; text-align:center; margin:10px 0;\">\u2207J(\u03b8) = (1\/n) \u03a3\u1d62 (p\u1d62 \u2212 y\u1d62) \u00b7 x\u1d62<\/p>\n    <p>Ce r\u00e9sultat est remarquable : le gradient a <strong>exactement la m\u00eame forme<\/strong> que celui de la r\u00e9gression lin\u00e9aire \u2014 (pr\u00e9diction \u2212 r\u00e9alit\u00e9) \u00d7 entr\u00e9e. Seule la d\u00e9finition de p\u1d62 change (sigmo\u00efde au lieu de droite).<\/p>\n    <p style=\"margin-top:8px;\">La mise \u00e0 jour \u00e0 chaque it\u00e9ration :<\/p>\n    <p style=\"font-family:'Playfair Display',serif; font-size:1.05rem; text-align:center;\">\u03b8 \u2190 \u03b8 \u2212 \u03b1 \u00d7 (1\/n) \u00d7 X\u1d40(p \u2212 y)<\/p>\n  <\/div>\n\n  <h2><span class=\"num\">2.7<\/span> Comparaison finale des deux mod\u00e8les<\/h2>\n\n  <div class=\"table-container\">\n    <table>\n      <tr>\n        <th>Aspect<\/th>\n        <th>R\u00e9gression Lin\u00e9aire<\/th>\n        <th>R\u00e9gression Logistique<\/th>\n      <\/tr>\n      <tr><td>Sortie<\/td><td>\u0177 = \u03b8\u1d40x \u2208 \u211d<\/td><td>p = \u03c3(\u03b8\u1d40x) \u2208 [0,1]<\/td><\/tr>\n      <tr><td>Fonction de co\u00fbt<\/td><td>MSE : (1\/n)\u03a3(y\u1d62\u2212\u0177\u1d62)\u00b2<\/td><td>Cross-Entropy : \u2212(1\/n)\u03a3[y log p + (1\u2212y)log(1\u2212p)]<\/td><\/tr>\n      <tr><td>Origine de J<\/td><td>G\u00e9om\u00e9trique (moindres carr\u00e9s)<\/td><td>Probabiliste (MLE)<\/td><\/tr>\n      <tr><td>Solution<\/td><td>Formule close : \u03b2=(X\u1d40X)\u207b\u00b9X\u1d40y<\/td><td>It\u00e9rative : descente de gradient<\/td><\/tr>\n      <tr><td>Gradient<\/td><td>(1\/n)X\u1d40(\u0177\u2212y)<\/td><td>(1\/n)X\u1d40(p\u2212y)<\/td><\/tr>\n      <tr><td>Convexit\u00e9 de J<\/td><td>\u2705 Toujours convexe<\/td><td>\u2705 Toujours convexe<\/td><\/tr>\n      <tr><td>Usage<\/td><td>Pr\u00e9dire une valeur continue<\/td><td>Pr\u00e9dire une probabilit\u00e9 0\/1<\/td><\/tr>\n    <\/table>\n  <\/div>\n\n  <blockquote>\n    Les deux mod\u00e8les sont plus proches qu&rsquo;il n&rsquo;y para\u00eet. Ils partagent la m\u00eame architecture lin\u00e9aire \u2014 seule la fa\u00e7on d&rsquo;interpr\u00e9ter la sortie et de mesurer l&rsquo;erreur diff\u00e8re.\n    <cite>\u2014 Unit\u00e9 profonde du machine learning<\/cite>\n  <\/blockquote>\n\n  <hr class=\"separateur\"\/>\n\n  <!-- ============================================================ -->\n  <!-- PARTIE 3 : CODE PYTHON FROM SCRATCH -->\n  <!-- ============================================================ -->\n\n  <div class=\"partie-header\" id=\"partie3\">\n    <div class=\"partie-numero\">Partie III<\/div>\n    <div class=\"partie-titre\">Impl\u00e9mentation Python from scratch \u2014 sans sklearn<\/div>\n  <\/div>\n\n  <p>\n    Maintenant qu&rsquo;on comprend les formules, on les impl\u00e9mente \u00e0 la main. Pas de sklearn. Pas de biblioth\u00e8ques de machine learning. Juste numpy et les formules qu&rsquo;on vient de d\u00e9river.\n  <\/p>\n\n  <h3>R\u00e9gression Lin\u00e9aire \u2014 formules closes<\/h3>\n\n  <div class=\"code-block\">\n    <span class=\"code-label\">Python \u2014 From Scratch<\/span>\n<span class=\"code-comment\"># ============================================================\n# R\u00c9GRESSION LIN\u00c9AIRE \u2014 IMPL\u00c9MENTATION FROM SCRATCH\n# Formules d\u00e9riv\u00e9es math\u00e9matiquement dans cet article\n# ============================================================<\/span>\n<span class=\"code-keyword\">import<\/span> numpy <span class=\"code-keyword\">as<\/span> np\n<span class=\"code-keyword\">import<\/span> matplotlib.pyplot <span class=\"code-keyword\">as<\/span> plt\n\n<span class=\"code-keyword\">class<\/span> <span class=\"code-function\">RegressionLineaire<\/span>:\n    <span class=\"code-keyword\">def<\/span> <span class=\"code-function\">__init__<\/span>(self):\n        self.a = <span class=\"code-keyword\">None<\/span>  <span class=\"code-comment\"># pente<\/span>\n        self.b = <span class=\"code-keyword\">None<\/span>  <span class=\"code-comment\"># ordonn\u00e9e \u00e0 l&rsquo;origine<\/span>\n\n    <span class=\"code-keyword\">def<\/span> <span class=\"code-function\">fit<\/span>(self, x, y):\n        <span class=\"code-string\">\u00ab\u00a0\u00a0\u00bb\u00a0\u00bb\n        Formules closes d\u00e9riv\u00e9es par les moindres carr\u00e9s :\n        a = \u03a3(x\u1d62\u2212x\u0304)(y\u1d62\u2212\u0233) \/ \u03a3(x\u1d62\u2212x\u0304)\u00b2\n        b = \u0233 \u2212 a\u00b7x\u0304\n        \u00ab\u00a0\u00a0\u00bb\u00a0\u00bb<\/span>\n        x_moy = np.<span class=\"code-function\">mean<\/span>(x)\n        y_moy = np.<span class=\"code-function\">mean<\/span>(y)\n\n        <span class=\"code-comment\"># Num\u00e9rateur : covariance<\/span>\n        numerateur = np.<span class=\"code-function\">sum<\/span>((x &#8211; x_moy) * (y &#8211; y_moy))\n\n        <span class=\"code-comment\"># D\u00e9nominateur : variance de x<\/span>\n        denominateur = np.<span class=\"code-function\">sum<\/span>((x &#8211; x_moy)**<span class=\"code-number\">2<\/span>)\n\n        self.a = numerateur \/ denominateur\n        self.b = y_moy &#8211; self.a * x_moy\n\n        <span class=\"code-function\">print<\/span>(<span class=\"code-string\">f\u00a0\u00bbPente a = {self.a:.4f}\u00a0\u00bb<\/span>)\n        <span class=\"code-function\">print<\/span>(<span class=\"code-string\">f\u00a0\u00bbOrdonn\u00e9e b = {self.b:.4f}\u00a0\u00bb<\/span>)\n\n    <span class=\"code-keyword\">def<\/span> <span class=\"code-function\">predict<\/span>(self, x):\n        <span class=\"code-keyword\">return<\/span> self.a * x + self.b\n\n    <span class=\"code-keyword\">def<\/span> <span class=\"code-function\">mse<\/span>(self, x, y):\n        <span class=\"code-string\">\u00ab\u00a0\u00a0\u00bb\u00a0\u00bbMSE = (1\/n) \u03a3(y\u1d62 \u2212 \u0177\u1d62)\u00b2\u00a0\u00bb\u00a0\u00bb\u00a0\u00bb<\/span>\n        y_pred = self.<span class=\"code-function\">predict<\/span>(x)\n        <span class=\"code-keyword\">return<\/span> np.<span class=\"code-function\">mean<\/span>((y &#8211; y_pred)**<span class=\"code-number\">2<\/span>)\n\n    <span class=\"code-keyword\">def<\/span> <span class=\"code-function\">r2<\/span>(self, x, y):\n        <span class=\"code-string\">\u00ab\u00a0\u00a0\u00bb\u00a0\u00bbR\u00b2 = 1 \u2212 SS_res\/SS_tot\u00a0\u00bb\u00a0\u00bb\u00a0\u00bb<\/span>\n        ss_res = np.<span class=\"code-function\">sum<\/span>((y &#8211; self.<span class=\"code-function\">predict<\/span>(x))**<span class=\"code-number\">2<\/span>)\n        ss_tot = np.<span class=\"code-function\">sum<\/span>((y &#8211; np.<span class=\"code-function\">mean<\/span>(y))**<span class=\"code-number\">2<\/span>)\n        <span class=\"code-keyword\">return<\/span> <span class=\"code-number\">1<\/span> &#8211; ss_res\/ss_tot\n\n<span class=\"code-comment\"># &#8212; Test avec donn\u00e9es agricoles du Borgou &#8212;<\/span>\nx = np.<span class=\"code-function\">array<\/span>([<span class=\"code-number\">100<\/span>, <span class=\"code-number\">150<\/span>, <span class=\"code-number\">200<\/span>, <span class=\"code-number\">120<\/span>, <span class=\"code-number\">180<\/span>, <span class=\"code-number\">250<\/span>], dtype=<span class=\"code-function\">float<\/span>)\ny = np.<span class=\"code-function\">array<\/span>([<span class=\"code-number\">200<\/span>, <span class=\"code-number\">280<\/span>, <span class=\"code-number\">350<\/span>, <span class=\"code-number\">230<\/span>, <span class=\"code-number\">320<\/span>, <span class=\"code-number\">420<\/span>], dtype=<span class=\"code-function\">float<\/span>)\n\nmodele = <span class=\"code-function\">RegressionLineaire<\/span>()\nmodele.<span class=\"code-function\">fit<\/span>(x, y)\n<span class=\"code-function\">print<\/span>(<span class=\"code-string\">f\u00a0\u00bbMSE = {modele.mse(x, y):.2f}\u00a0\u00bb<\/span>)\n<span class=\"code-function\">print<\/span>(<span class=\"code-string\">f\u00a0\u00bbR\u00b2 = {modele.r2(x, y):.4f}\u00a0\u00bb<\/span>)\n<span class=\"code-function\">print<\/span>(<span class=\"code-string\">f\u00a0\u00bbPr\u00e9diction pour 220mm : {modele.predict(220):.1f} kg\u00a0\u00bb<\/span>)\n  <\/div>\n\n  <h3>R\u00e9gression Logistique \u2014 descente de gradient<\/h3>\n\n  <div class=\"code-block\">\n    <span class=\"code-label\">Python \u2014 From Scratch<\/span>\n<span class=\"code-comment\"># ============================================================\n# R\u00c9GRESSION LOGISTIQUE \u2014 IMPL\u00c9MENTATION FROM SCRATCH\n# Gradient d\u00e9riv\u00e9 math\u00e9matiquement : \u2207J = (1\/n)X\u1d40(p\u2212y)\n# ============================================================<\/span>\n\n<span class=\"code-keyword\">class<\/span> <span class=\"code-function\">RegressionLogistique<\/span>:\n    <span class=\"code-keyword\">def<\/span> <span class=\"code-function\">__init__<\/span>(self, alpha=<span class=\"code-number\">0.1<\/span>, n_iter=<span class=\"code-number\">1000<\/span>):\n        self.alpha = alpha      <span class=\"code-comment\"># taux d&rsquo;apprentissage<\/span>\n        self.n_iter = n_iter    <span class=\"code-comment\"># nombre d&rsquo;it\u00e9rations<\/span>\n        self.theta = <span class=\"code-keyword\">None<\/span>\n        self.historique_cout = []\n\n    <span class=\"code-keyword\">def<\/span> <span class=\"code-function\">_sigmoide<\/span>(self, z):\n        <span class=\"code-string\">\u00ab\u00a0\u00a0\u00bb\u00a0\u00bb\u03c3(z) = 1 \/ (1 + e^{-z})\u00a0\u00bb\u00a0\u00bb\u00a0\u00bb<\/span>\n        <span class=\"code-keyword\">return<\/span> <span class=\"code-number\">1<\/span> \/ (<span class=\"code-number\">1<\/span> + np.<span class=\"code-function\">exp<\/span>(-np.<span class=\"code-function\">clip<\/span>(z, &#8211;<span class=\"code-number\">500<\/span>, <span class=\"code-number\">500<\/span>)))\n\n    <span class=\"code-keyword\">def<\/span> <span class=\"code-function\">_cout<\/span>(self, p, y):\n        <span class=\"code-string\">\u00ab\u00a0\u00a0\u00bb\u00a0\u00bb\n        Cross-Entropy : J = -(1\/n) \u03a3[y\u00b7log(p) + (1-y)\u00b7log(1-p)]\n        \u00ab\u00a0\u00a0\u00bb\u00a0\u00bb<\/span>\n        n = <span class=\"code-function\">len<\/span>(y)\n        eps = <span class=\"code-number\">1e-15<\/span>  <span class=\"code-comment\"># \u00e9viter log(0)<\/span>\n        <span class=\"code-keyword\">return<\/span> -(<span class=\"code-number\">1<\/span>\/n) * np.<span class=\"code-function\">sum<\/span>(y * np.<span class=\"code-function\">log<\/span>(p + eps) +\n                                 (<span class=\"code-number\">1<\/span>-y) * np.<span class=\"code-function\">log<\/span>(<span class=\"code-number\">1<\/span>-p + eps))\n\n    <span class=\"code-keyword\">def<\/span> <span class=\"code-function\">fit<\/span>(self, X, y):\n        <span class=\"code-string\">\u00ab\u00a0\u00a0\u00bb\u00a0\u00bb\n        Descente de gradient :\n        \u03b8 \u2190 \u03b8 \u2212 \u03b1 \u00d7 (1\/n) \u00d7 X\u1d40(p \u2212 y)\n        \u00ab\u00a0\u00a0\u00bb\u00a0\u00bb<\/span>\n        n, p = X.shape\n        <span class=\"code-comment\"># Ajouter colonne de biais<\/span>\n        X_b = np.<span class=\"code-function\">c_<\/span>[np.<span class=\"code-function\">ones<\/span>((n, <span class=\"code-number\">1<\/span>)), X]\n\n        <span class=\"code-comment\"># Initialisation des param\u00e8tres \u00e0 z\u00e9ro<\/span>\n        self.theta = np.<span class=\"code-function\">zeros<\/span>(X_b.shape[<span class=\"code-number\">1<\/span>])\n\n        <span class=\"code-keyword\">for<\/span> iteration <span class=\"code-keyword\">in<\/span> <span class=\"code-function\">range<\/span>(self.n_iter):\n            <span class=\"code-comment\"># Pr\u00e9dictions : p = \u03c3(X\u03b8)<\/span>\n            z = X_b @ self.theta\n            p_pred = self.<span class=\"code-function\">_sigmoide<\/span>(z)\n\n            <span class=\"code-comment\"># Gradient : \u2207J = (1\/n) \u00d7 X\u1d40(p \u2212 y)<\/span>\n            gradient = (<span class=\"code-number\">1<\/span>\/n) * X_b.T @ (p_pred &#8211; y)\n\n            <span class=\"code-comment\"># Mise \u00e0 jour : \u03b8 \u2190 \u03b8 \u2212 \u03b1\u00b7\u2207J<\/span>\n            self.theta -= self.alpha * gradient\n\n            <span class=\"code-comment\"># Enregistrer le co\u00fbt<\/span>\n            cout = self.<span class=\"code-function\">_cout<\/span>(p_pred, y)\n            self.historique_cout.<span class=\"code-function\">append<\/span>(cout)\n\n            <span class=\"code-keyword\">if<\/span> iteration % <span class=\"code-number\">200<\/span> == <span class=\"code-number\">0<\/span>:\n                <span class=\"code-function\">print<\/span>(<span class=\"code-string\">f\u00a0\u00bbIt\u00e9ration {iteration:4d} | Co\u00fbt = {cout:.4f}\u00a0\u00bb<\/span>)\n\n    <span class=\"code-keyword\">def<\/span> <span class=\"code-function\">predict_proba<\/span>(self, X):\n        X_b = np.<span class=\"code-function\">c_<\/span>[np.<span class=\"code-function\">ones<\/span>((X.shape[<span class=\"code-number\">0<\/span>], <span class=\"code-number\">1<\/span>)), X]\n        <span class=\"code-keyword\">return<\/span> self.<span class=\"code-function\">_sigmoide<\/span>(X_b @ self.theta)\n\n    <span class=\"code-keyword\">def<\/span> <span class=\"code-function\">predict<\/span>(self, X, seuil=<span class=\"code-number\">0.5<\/span>):\n        <span class=\"code-keyword\">return<\/span> (self.<span class=\"code-function\">predict_proba<\/span>(X) >= seuil).<span class=\"code-function\">astype<\/span>(int)\n\n    <span class=\"code-keyword\">def<\/span> <span class=\"code-function\">accuracy<\/span>(self, X, y):\n        <span class=\"code-keyword\">return<\/span> np.<span class=\"code-function\">mean<\/span>(self.<span class=\"code-function\">predict<\/span>(X) == y)\n\n<span class=\"code-comment\"># &#8212; Test : r\u00e9ussite au BEPC &#8212;<\/span>\nX = np.<span class=\"code-function\">array<\/span>([[<span class=\"code-number\">2<\/span>],[<span class=\"code-number\">4<\/span>],[<span class=\"code-number\">6<\/span>],[<span class=\"code-number\">8<\/span>],[<span class=\"code-number\">10<\/span>],[<span class=\"code-number\">12<\/span>],[<span class=\"code-number\">3<\/span>],[<span class=\"code-number\">9<\/span>]], dtype=<span class=\"code-function\">float<\/span>)\ny = np.<span class=\"code-function\">array<\/span>([<span class=\"code-number\">0<\/span>,<span class=\"code-number\">0<\/span>,<span class=\"code-number\">1<\/span>,<span class=\"code-number\">1<\/span>,<span class=\"code-number\">1<\/span>,<span class=\"code-number\">1<\/span>,<span class=\"code-number\">0<\/span>,<span class=\"code-number\">1<\/span>], dtype=<span class=\"code-function\">float<\/span>)\n\nmodele_log = <span class=\"code-function\">RegressionLogistique<\/span>(alpha=<span class=\"code-number\">0.5<\/span>, n_iter=<span class=\"code-number\">1000<\/span>)\nmodele_log.<span class=\"code-function\">fit<\/span>(X, y)\n<span class=\"code-function\">print<\/span>(<span class=\"code-string\">f\u00a0\u00bb\\nPr\u00e9cision : {modele_log.accuracy(X, y):.0%}\u00a0\u00bb<\/span>)\n<span class=\"code-function\">print<\/span>(<span class=\"code-string\">f\u00a0\u00bbP(r\u00e9ussite | 7h) = {modele_log.predict_proba(np.array([[7]]))[0]:.1%}\u00a0\u00bb<\/span>)\n\n<span class=\"code-comment\"># Courbe d&rsquo;apprentissage<\/span>\nplt.<span class=\"code-function\">plot<\/span>(modele_log.historique_cout, color=<span class=\"code-string\">&lsquo;#3a6a9a&rsquo;<\/span>, linewidth=<span class=\"code-number\">2<\/span>)\nplt.<span class=\"code-function\">xlabel<\/span>(<span class=\"code-string\">&lsquo;It\u00e9ration&rsquo;<\/span>)\nplt.<span class=\"code-function\">ylabel<\/span>(<span class=\"code-string\">&lsquo;Cross-Entropy Loss&rsquo;<\/span>)\nplt.<span class=\"code-function\">title<\/span>(<span class=\"code-string\">&lsquo;Convergence de la descente de gradient&rsquo;<\/span>)\nplt.<span class=\"code-function\">grid<\/span>(alpha=<span class=\"code-number\">0.3<\/span>)\nplt.<span class=\"code-function\">show<\/span>()\n  <\/div>\n\n  <!-- EXERCICE -->\n  <div class=\"exercice\" id=\"exercice\">\n    <h3>\u270f\ufe0f Exercice corrig\u00e9 \u2014 Construction compl\u00e8te sur donn\u00e9es r\u00e9elles<\/h3>\n    <p>\n      Voici 5 observations : heures de travail x = [1, 2, 3, 4, 5] et salaire journalier y = [1500, 2200, 2800, 3600, 4000] FCFA.\n    <\/p>\n    <p><strong>a)<\/strong> Calcule x\u0304 et \u0233.<\/p>\n    <p><strong>b)<\/strong> Calcule \u03a3(x\u1d62\u2212x\u0304)(y\u1d62\u2212\u0233) et \u03a3(x\u1d62\u2212x\u0304)\u00b2.<\/p>\n    <p><strong>c)<\/strong> D\u00e9duis a et b. \u00c9cris l&rsquo;\u00e9quation de la droite.<\/p>\n    <p><strong>d)<\/strong> Calcule le MSE de ce mod\u00e8le.<\/p>\n    <p><strong>e)<\/strong> Pour la logistique : si \u03b8\u2080 = \u22125 et \u03b8\u2081 = 1, calcule p pour x = 3 heures. D\u00e9cision si seuil = 0,5 ?<\/p>\n\n    <div class=\"correction\">\n      <div class=\"correction-titre\">\u25b8 Correction<\/div>\n      <p><strong>a)<\/strong> x\u0304 = (1+2+3+4+5)\/5 = <strong>3<\/strong> &nbsp;|&nbsp; \u0233 = (1500+2200+2800+3600+4000)\/5 = <strong>2820<\/strong><\/p>\n      <p><strong>b)<\/strong><\/p>\n      <p>\u03a3(x\u1d62\u2212x\u0304)(y\u1d62\u2212\u0233) = (\u22122)(\u22121320)+(\u22121)(\u2212620)+(0)(\u221220)+(1)(780)+(2)(1180)<\/p>\n      <p>= 2640 + 620 + 0 + 780 + 2360 = <strong>6400<\/strong><\/p>\n      <p>\u03a3(x\u1d62\u2212x\u0304)\u00b2 = 4+1+0+1+4 = <strong>10<\/strong><\/p>\n      <p><strong>c)<\/strong> a = 6400\/10 = <strong>640<\/strong> FCFA\/heure<\/p>\n      <p>b = 2820 \u2212 640\u00d73 = 2820 \u2212 1920 = <strong>900<\/strong> FCFA<\/p>\n      <p>Droite : <strong>\u0177 = 640x + 900<\/strong><\/p>\n      <p><strong>d)<\/strong> Pr\u00e9dictions : \u0177 = [1540, 2180, 2820, 3460, 4100]<\/p>\n      <p>R\u00e9sidus : [\u221240, 20, \u221220, 140, \u2212100]<\/p>\n      <p>R\u00e9sidus\u00b2 : [1600, 400, 400, 19600, 10000]<\/p>\n      <p>MSE = (1600+400+400+19600+10000)\/5 = 32000\/5 = <strong>6400<\/strong><\/p>\n      <p><strong>e)<\/strong> z = \u03b8\u2080 + \u03b8\u2081\u00d73 = \u22125 + 3 = \u22122<\/p>\n      <p>p = \u03c3(\u22122) = 1\/(1+e\u00b2) = 1\/(1+7,389) \u2248 <strong>0,119 soit 12%<\/strong><\/p>\n      <p>0,119 &lt; 0,5 \u2192 d\u00e9cision : <strong>0 (n\u00e9gatif)<\/strong> \u2705<\/p>\n    <\/div>\n  <\/div>\n\n  <div class=\"conclusion\">\n    <h2>Ce qu&rsquo;on retient<\/h2>\n    <p>\n      Tu viens de traverser l&rsquo;int\u00e9gralit\u00e9 de la construction math\u00e9matique des deux mod\u00e8les les plus utilis\u00e9s en machine learning. La r\u00e9gression lin\u00e9aire na\u00eet des moindres carr\u00e9s et admet une solution exacte via les matrices. La r\u00e9gression logistique na\u00eet du principe de vraisemblance maximale et s&rsquo;optimise par descente de gradient.\n    <\/p>\n    <p>\n      Ces deux mod\u00e8les partagent une architecture commune \u2014 un produit lin\u00e9aire \u03b8\u1d40x transform\u00e9 diff\u00e9remment \u2014 et leurs gradients ont la m\u00eame forme \u00e9l\u00e9gante : (pr\u00e9diction \u2212 r\u00e9alit\u00e9) \u00d7 entr\u00e9e. Ce n&rsquo;est pas un hasard, c&rsquo;est la signature d&rsquo;une famille math\u00e9matique profonde : les <strong>mod\u00e8les lin\u00e9aires g\u00e9n\u00e9ralis\u00e9s (GLM)<\/strong>.\n    <\/p>\n    <p>\n      Dans le prochain article, nous plongerons dans la <strong>loi normale et la courbe en cloche<\/strong> \u2014 la distribution qui gouverne les notes de tes \u00e9l\u00e8ves, les erreurs de mesure, et presque tout ce qui varie autour d&rsquo;une moyenne dans la nature.\n    <\/p>\n  <\/div>\n\n<\/article>\n\n<\/body>\n<\/html>\n","protected":false},"excerpt":{"rendered":"<p>Comment na\u00eet un mod\u00e8le \u2014 R\u00e9gression lin\u00e9aire et logistique de A \u00e0 Z \u2014 MathsVivantes Machine Learning \u00b7 Article #11 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_uag_custom_page_level_css":"","site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[10,5],"tags":[],"class_list":["post-127","post","type-post","status-publish","format-standard","hentry","category-data-et-maths","category-data-science-pratique"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>R\u00e9gression de A \u00e0 Z - AfrikIntelligent<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/vmi3217629.contaboserver.net\/?p=127\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"R\u00e9gression de A \u00e0 Z - AfrikIntelligent\" \/>\n<meta property=\"og:description\" content=\"Comment na\u00eet un mod\u00e8le \u2014 R\u00e9gression lin\u00e9aire et logistique de A \u00e0 Z \u2014 MathsVivantes Machine Learning \u00b7 Article #11 [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vmi3217629.contaboserver.net\/?p=127\" \/>\n<meta property=\"og:site_name\" content=\"AfrikIntelligent\" \/>\n<meta property=\"article:published_time\" content=\"2026-04-29T05:53:39+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-04-29T05:56:11+00:00\" \/>\n<meta name=\"author\" content=\"Odilon\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"Odilon\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"14 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/vmi3217629.contaboserver.net\\\/?p=127#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/vmi3217629.contaboserver.net\\\/?p=127\"},\"author\":{\"name\":\"Odilon\",\"@id\":\"https:\\\/\\\/vmi3217629.contaboserver.net\\\/#\\\/schema\\\/person\\\/a3da39574d729b6b3ff7514ccc055923\"},\"headline\":\"R\u00e9gression de A \u00e0 Z\",\"datePublished\":\"2026-04-29T05:53:39+00:00\",\"dateModified\":\"2026-04-29T05:56:11+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/vmi3217629.contaboserver.net\\\/?p=127\"},\"wordCount\":2632,\"commentCount\":0,\"articleSection\":[\"Data &amp; Maths\",\"Data Science en Pratique\"],\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/vmi3217629.contaboserver.net\\\/?p=127#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/vmi3217629.contaboserver.net\\\/?p=127\",\"url\":\"https:\\\/\\\/vmi3217629.contaboserver.net\\\/?p=127\",\"name\":\"R\u00e9gression de A \u00e0 Z - AfrikIntelligent\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/vmi3217629.contaboserver.net\\\/#website\"},\"datePublished\":\"2026-04-29T05:53:39+00:00\",\"dateModified\":\"2026-04-29T05:56:11+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/vmi3217629.contaboserver.net\\\/#\\\/schema\\\/person\\\/a3da39574d729b6b3ff7514ccc055923\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/vmi3217629.contaboserver.net\\\/?p=127#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/vmi3217629.contaboserver.net\\\/?p=127\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/vmi3217629.contaboserver.net\\\/?p=127#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/vmi3217629.contaboserver.net\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"R\u00e9gression de A \u00e0 Z\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/vmi3217629.contaboserver.net\\\/#website\",\"url\":\"https:\\\/\\\/vmi3217629.contaboserver.net\\\/\",\"name\":\"AfrikIntelligent\",\"description\":\"Append autrement\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/vmi3217629.contaboserver.net\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/vmi3217629.contaboserver.net\\\/#\\\/schema\\\/person\\\/a3da39574d729b6b3ff7514ccc055923\",\"name\":\"Odilon\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/57bcd6a76fa395ae5e994943b66ccd3dd7e71cd0b1b77b351986e88c27801523?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/57bcd6a76fa395ae5e994943b66ccd3dd7e71cd0b1b77b351986e88c27801523?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/57bcd6a76fa395ae5e994943b66ccd3dd7e71cd0b1b77b351986e88c27801523?s=96&d=mm&r=g\",\"caption\":\"Odilon\"},\"sameAs\":[\"https:\\\/\\\/vmi3217629.contaboserver.net\"],\"url\":\"https:\\\/\\\/vmi3217629.contaboserver.net\\\/?author=1\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"R\u00e9gression de A \u00e0 Z - AfrikIntelligent","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/vmi3217629.contaboserver.net\/?p=127","og_locale":"fr_FR","og_type":"article","og_title":"R\u00e9gression de A \u00e0 Z - AfrikIntelligent","og_description":"Comment na\u00eet un mod\u00e8le \u2014 R\u00e9gression lin\u00e9aire et logistique de A \u00e0 Z \u2014 MathsVivantes Machine Learning \u00b7 Article #11 [&hellip;]","og_url":"https:\/\/vmi3217629.contaboserver.net\/?p=127","og_site_name":"AfrikIntelligent","article_published_time":"2026-04-29T05:53:39+00:00","article_modified_time":"2026-04-29T05:56:11+00:00","author":"Odilon","twitter_card":"summary_large_image","twitter_misc":{"\u00c9crit par":"Odilon","Dur\u00e9e de lecture estim\u00e9e":"14 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/vmi3217629.contaboserver.net\/?p=127#article","isPartOf":{"@id":"https:\/\/vmi3217629.contaboserver.net\/?p=127"},"author":{"name":"Odilon","@id":"https:\/\/vmi3217629.contaboserver.net\/#\/schema\/person\/a3da39574d729b6b3ff7514ccc055923"},"headline":"R\u00e9gression de A \u00e0 Z","datePublished":"2026-04-29T05:53:39+00:00","dateModified":"2026-04-29T05:56:11+00:00","mainEntityOfPage":{"@id":"https:\/\/vmi3217629.contaboserver.net\/?p=127"},"wordCount":2632,"commentCount":0,"articleSection":["Data &amp; Maths","Data Science en Pratique"],"inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/vmi3217629.contaboserver.net\/?p=127#respond"]}]},{"@type":"WebPage","@id":"https:\/\/vmi3217629.contaboserver.net\/?p=127","url":"https:\/\/vmi3217629.contaboserver.net\/?p=127","name":"R\u00e9gression de A \u00e0 Z - AfrikIntelligent","isPartOf":{"@id":"https:\/\/vmi3217629.contaboserver.net\/#website"},"datePublished":"2026-04-29T05:53:39+00:00","dateModified":"2026-04-29T05:56:11+00:00","author":{"@id":"https:\/\/vmi3217629.contaboserver.net\/#\/schema\/person\/a3da39574d729b6b3ff7514ccc055923"},"breadcrumb":{"@id":"https:\/\/vmi3217629.contaboserver.net\/?p=127#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vmi3217629.contaboserver.net\/?p=127"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/vmi3217629.contaboserver.net\/?p=127#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/vmi3217629.contaboserver.net\/"},{"@type":"ListItem","position":2,"name":"R\u00e9gression de A \u00e0 Z"}]},{"@type":"WebSite","@id":"https:\/\/vmi3217629.contaboserver.net\/#website","url":"https:\/\/vmi3217629.contaboserver.net\/","name":"AfrikIntelligent","description":"Append autrement","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/vmi3217629.contaboserver.net\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Person","@id":"https:\/\/vmi3217629.contaboserver.net\/#\/schema\/person\/a3da39574d729b6b3ff7514ccc055923","name":"Odilon","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/secure.gravatar.com\/avatar\/57bcd6a76fa395ae5e994943b66ccd3dd7e71cd0b1b77b351986e88c27801523?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/57bcd6a76fa395ae5e994943b66ccd3dd7e71cd0b1b77b351986e88c27801523?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/57bcd6a76fa395ae5e994943b66ccd3dd7e71cd0b1b77b351986e88c27801523?s=96&d=mm&r=g","caption":"Odilon"},"sameAs":["https:\/\/vmi3217629.contaboserver.net"],"url":"https:\/\/vmi3217629.contaboserver.net\/?author=1"}]}},"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false},"uagb_author_info":{"display_name":"Odilon","author_link":"https:\/\/vmi3217629.contaboserver.net\/?author=1"},"uagb_comment_info":0,"uagb_excerpt":"Comment na\u00eet un mod\u00e8le \u2014 R\u00e9gression lin\u00e9aire et logistique de A \u00e0 Z \u2014 MathsVivantes Machine Learning \u00b7 Article #11 [&hellip;]","_links":{"self":[{"href":"https:\/\/vmi3217629.contaboserver.net\/index.php?rest_route=\/wp\/v2\/posts\/127","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vmi3217629.contaboserver.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vmi3217629.contaboserver.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vmi3217629.contaboserver.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vmi3217629.contaboserver.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=127"}],"version-history":[{"count":2,"href":"https:\/\/vmi3217629.contaboserver.net\/index.php?rest_route=\/wp\/v2\/posts\/127\/revisions"}],"predecessor-version":[{"id":130,"href":"https:\/\/vmi3217629.contaboserver.net\/index.php?rest_route=\/wp\/v2\/posts\/127\/revisions\/130"}],"wp:attachment":[{"href":"https:\/\/vmi3217629.contaboserver.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=127"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vmi3217629.contaboserver.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=127"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vmi3217629.contaboserver.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=127"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}