ML vs Symbolique

Deux façons de faire
penser une machine.

Une qu'on programme avec des règles. Une qui apprend par l'exemple. Ce ne sont pas les mêmes outils — ce ne sont pas les mêmes problèmes.

south Comprendre la différence
diagnostic.py
# L'IA symbolique : on code chaque règle à la main

def diagnostiquer(patient):

    # Règle 1 : fièvre
    si patient.temperature > 38:
        et si patient.gorge == "rouge":
            retourner "angine probable"
        sinon:
            retourner "fièvre — consulter"

    # Règle 2 : toux
    si patient.toux == "sèche":
        et si patient.fievre == Vrai:
            retourner "covid possible"

    # Sinon : on sait pas
    retourner "symptômes insuffisants"

Approche 1

L'IA symbolique — on écrit les règles.

Le développeur code explicitement chaque règle. La machine applique. Elle ne comprend rien, elle exécute.

Approche 2

Le Machine Learning — la machine trouve les règles.

On ne programme pas les règles. On donne des exemples. La machine généralise.

ml_diagnostic.py
# Le ML : on montre des exemples, pas des règles

# Étape 1 : des données labellisées
exemples = [
    { "temp": 39.2, "toux": "sèche",  "résultat": "malade"  },
    { "temp": 36.8, "toux": "aucune", "résultat": "sain"    },
    { "temp": 38.5, "toux": "grasse", "résultat": "malade"  },
    # ... 10 000 exemples de plus
]

# Étape 2 : on entraîne le modèle
modele = RandomForest()
modele.entrainer(exemples)

# Étape 3 : il trouve les règles tout seul
nouveau_patient = { "temp": 38.9, "toux": "sèche" }
modele.predire(nouveau_patient)
# → "malade" (92% de confiance)

Cas concret

Détecter un spam — deux approches.

Même objectif. Deux philosophies radicalement différentes.

🔧 Approche symbolique
# On écrit les règles à la main

def est_spam(email):

  # Mots suspects
  mots_spam = [
    "gagné", "gratuit",
    "cliquez ici", "urgent"
  ]

  pour chaque mot dans mots_spam:
    si mot dans email.texte:
      retourner Vrai # → SPAM

  # Expéditeur inconnu ?
  si email.expediteur pas dans contacts:
    si email.liens > 3:
      retourner Vrai # → SPAM

  retourner Faux # → OK

# Problème : et si le spam
# évite ces mots ?
🧠 Approche ML
# On montre des exemples étiquetés

emails_entrainement = [
  ("Vous avez gagné !",    "spam"),
  ("Réunion lundi 9h",    "ok"  ),
  ("Offre exclusive !",    "spam"),
  ("Rapport Q3 en PJ",    "ok"  ),
  # ... 50 000 emails
]

# Entraînement
modele = NaiveBayes()
modele.entrainer(emails_entrainement)

# Prédiction
email_test = "Félicitations !"
modele.predire(email_test)
# → "spam" (88%)

# Il s'adapte aux nouveaux
# patterns automatiquement

Comparaison

Forces et faiblesses de chaque approche.

Il n'y a pas de meilleure approche. Il y a le bon outil pour le bon problème.

En pratique

Quand l'un brille, l'autre échoue.

Le bon outil dépend du problème.
Pas de solution universelle.

Aujourd'hui

Les deux ensemble — la vraie IA moderne.

Les LLM c'est du ML. Mais on y injecte de la logique symbolique pour les contrôler.