<?xml version="1.0" encoding="UTF-8"?>
<quiz>
<question type="category">
  <category>
    <text>$course$/QCM de NSI/Première/k plus proches voisins (k-NN)</text>
  </category>
  <info format="html">
    <text><![CDATA[<p>Algorithme des k plus proches voisins (k-NN) : exemple<br/>
d'algorithme d'apprentissage supervisé. Distance entre<br/>
points, vote majoritaire, choix de k, applications,<br/>
forces et limites.</p>]]></text>
  </info>
</question>

<question type="multichoice">
  <name>
    <text>k plus proches voisins (k-NN) — Q01 : k-NN : qu'est-ce que c'est ?</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Que fait l'algorithme des <strong>k plus proches voisins</strong><br/>
(k-NN, <em>k-Nearest Neighbors</em>) ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Apprentissage supervisé : on dispose d'exemples<br/>
étiquetés (avec leur classe connue), on<br/>
apprend à prédire la classe pour de nouveaux<br/>
exemples.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Prédit la classe d'un nouvel élément en regardant les classes des k éléments les plus proches dans un jeu de données déjà étiqueté</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : c'est un algorithme<br/>
d'<strong>apprentissage supervisé</strong> par<br/>
mémorisation. On classe un nouveau point<br/>
selon ses voisins.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Mesure la complexité d'un programme</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la mesure de<br/>
complexité algorithmique<br/>
n'a aucun rapport avec<br/>
l'algorithme des k plus<br/>
proches voisins.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Cherche un élément dans une liste triée</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : c'est la recherche dichotomique.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Trie une liste par ordre croissant</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : aucun rapport avec le tri.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>k plus proches voisins (k-NN) — Q02 : Apprentissage supervisé</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Pourquoi parle-t-on d'apprentissage<br/>
<strong>supervisé</strong> pour k-NN ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Distinction : <strong>supervisé</strong> (avec étiquettes,<br/>
ex. classification, régression) vs <strong>non<br/>
supervisé</strong> (sans étiquettes, ex.<br/>
partitionnement automatique). k-NN est<br/>
supervisé.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Parce qu'il est lent à l'exécution</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>La rapidité d'exécution n'a<br/>
aucun rapport avec le<br/>
caractère supervisé d'un<br/>
algorithme d'apprentissage.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Parce qu'il ne fonctionne qu'avec un professeur dans la salle</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Cette interprétation est<br/>
fantaisiste. Le mot<br/>
« supervisé » est un terme<br/>
technique précis, sans<br/>
rapport avec une<br/>
présence humaine.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Parce qu'un humain doit surveiller le programme pendant son exécution</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Cette interprétation littérale<br/>
ne correspond pas au sens<br/>
technique. En apprentissage<br/>
automatique, « supervisé »<br/>
renvoie au fait que les<br/>
données portent une<br/>
étiquette connue, et non à<br/>
une surveillance humaine.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Parce que les données d'entraînement sont étiquetées : chaque exemple est associé à sa classe connue</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : « supervisé » = on a la<br/>
réponse pour les exemples<br/>
d'entraînement. L'algorithme apprend la<br/>
relation entrée → classe.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>k plus proches voisins (k-NN) — Q03 : Distance euclidienne</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Comment calcule-t-on la <strong>distance euclidienne</strong><br/>
entre deux points $A=(x_A, y_A)$ et $B=(x_B,<br/>
y_B)$ du plan ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Cette formule se généralise en dimension n :<br/>
$d = \\sqrt{\\sum_{i=1}^{n}(b_i - a_i)^2}$.<br/>
Pour comparer des distances, on peut omettre<br/>
la racine carrée.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>$d = \sqrt{(x_B - x_A)^2 + (y_B - y_A)^2}$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : formule de Pythagore.<br/>
C'est la distance « à vol d'oiseau »<br/>
entre les deux points.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$d = |x_A - x_B|$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : ce serait la distance sur l'axe<br/>
horizontal seulement.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$d = x_A + y_A + x_B + y_B$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : ce serait juste une somme.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$d = x_A \times y_A - x_B \times y_B$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : aucun rapport avec une distance.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>k plus proches voisins (k-NN) — Q04 : Vote majoritaire</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Une fois les k plus proches voisins<br/>
identifiés, comment k-NN détermine-t-il la<br/>
classe à attribuer ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Variante : <strong>vote pondéré</strong> par la distance<br/>
(les voisins plus proches comptent plus).<br/>
Permet de gérer les ex æquo.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Au hasard</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : k-NN est déterministe.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>En choisissant la classe du voisin le plus proche</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>C'est k-NN avec k = 1, cas particulier. En<br/>
général on utilise plusieurs voisins pour<br/>
plus de robustesse.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Par vote majoritaire : la classe la plus représentée parmi les k voisins l'emporte</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : si parmi les 5 voisins<br/>
les plus proches, 3 sont de la classe A et<br/>
2 de la classe B, on prédit A.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>En faisant la moyenne des classes</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : on ne fait pas la moyenne d'une<br/>
classe (c'est une catégorie, pas un<br/>
nombre).</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>k plus proches voisins (k-NN) — Q05 : Choix de k</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Pourquoi prend-on souvent k <strong>impair</strong> quand<br/>
on classe en deux classes ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Pour trois classes ou plus, un<br/>
$k$ impair n'évite pas<br/>
forcément les ex æquo : trois<br/>
classes peuvent par exemple<br/>
obtenir chacune $k/3$ voix.<br/>
On peut alors recourir à la<br/>
classe du voisin le plus<br/>
proche, ou à un vote pondéré<br/>
par la distance.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Pour éviter les égalités lors du vote majoritaire entre deux classes</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : avec k pair (par exemple<br/>
k = 4), on peut avoir 2 votes pour chaque<br/>
classe → indécision. Avec k impair (k = 5),<br/>
impossible.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Aucune raison particulière</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Cette parité répond au<br/>
contraire à un besoin<br/>
technique précis : éviter<br/>
les égalités lors du<br/>
vote, comme expliqué dans<br/>
la bonne réponse.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Parce que les nombres impairs sont plus rapides à calculer</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Aucun lien n'existe entre la<br/>
parité d'un nombre et la<br/>
rapidité de calcul.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Parce que k pair ne fonctionne pas</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : ça fonctionne, mais on doit gérer<br/>
les ex æquo.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>k plus proches voisins (k-NN) — Q06 : Exemple typique</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Lequel de ces problèmes est un <strong>bon candidat</strong><br/>
pour l'algorithme k-NN ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Autres exemples : reconnaissance de<br/>
chiffres manuscrits, classification de<br/>
fleurs (jeu de données Iris), recommandation<br/>
de films.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Compresser un fichier pour gagner de la place</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>La compression de fichiers<br/>
est une tâche très<br/>
différente, sans rapport<br/>
avec la classification.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Trier une liste de nombres</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : ce n'est pas un problème de<br/>
classification.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Reconnaître si un mail est un spam ou non, à partir d'exemples étiquetés</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : tâche de classification<br/>
binaire (spam / non spam). On peut<br/>
comparer le mail aux exemples connus<br/>
selon des caractéristiques (mots-clés,<br/>
longueur, etc.).</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Calculer la racine carrée d'un nombre</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : pas un problème d'apprentissage.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>k plus proches voisins (k-NN) — Q07 : Pas d'entraînement explicite</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Quelle particularité de k-NN le distingue<br/>
d'autres algorithmes d'apprentissage ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Conséquence : prédiction lente quand le jeu<br/>
d'entraînement est gros (il faut calculer la<br/>
distance à tous les exemples). Compromis :<br/>
stockage important, calcul à la prédiction.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Il n'a quasiment pas de phase d'entraînement : il mémorise les exemples et fait tout le calcul au moment de la prédiction</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : k-NN est un algorithme<br/>
dit « paresseux ». Pas de modèle interne ;<br/>
tout le travail est fait à la prédiction.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Il fonctionne sans aucune donnée d'entraînement</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Au contraire, l'algorithme<br/>
a besoin d'exemples<br/>
étiquetés pour pouvoir<br/>
comparer le nouveau<br/>
point.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Il a une phase d'entraînement très longue</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : c'est l'inverse. La phase<br/>
d'entraînement consiste juste à<br/>
<strong>mémoriser</strong> les exemples.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Il invente de nouveaux exemples au cours de la prédiction</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Aucun exemple n'est<br/>
inventé. L'algorithme se<br/>
contente de comparer le<br/>
point à classer aux<br/>
exemples déjà connus.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>k plus proches voisins (k-NN) — Q08 : Squelette de l'algorithme</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Quelle est la <strong>structure générale</strong> de<br/>
l'algorithme k-NN pour classer un nouveau<br/>
point <code>p</code> ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>En Python, on utilise typiquement :<br/>
<pre><code>distances = [(dist(p, e), c) for (e, c) in exemples]
distances.sort()
voisins = distances[:k]</code></pre></p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>1. Calculer la distance de <code>p</code> à chaque exemple connu.<br/>
2. Trier les exemples par distance croissante.<br/>
3. Garder les k premiers.<br/>
4. Retourner la classe majoritaire parmi ces k voisins.</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : algorithme en quatre<br/>
étapes claires. Les étapes 1 et 2<br/>
dominent le coût.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>1. Trier les exemples par classe.<br/>
2. Retourner la première classe.</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : aucun rapport avec la distance.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>1. Choisir un exemple au hasard.<br/>
2. Retourner sa classe.</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : k-NN n'est pas aléatoire.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>1. Calculer la moyenne des exemples.<br/>
2. La retourner comme classe.</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : on ne peut pas faire la moyenne<br/>
d'une classe.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>k plus proches voisins (k-NN) — Q09 : Paramètre k</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Que se passe-t-il si l'on prend <strong>k = 1</strong> ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Choix de k : compromis. k trop petit →<br/>
sensibilité au bruit. k trop grand → frontières<br/>
lissées, perte de précision locale. On choisit<br/>
souvent k empiriquement.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>La classe prédite est celle de l'unique voisin le plus proche, l'algorithme est très sensible aux exceptions (bruit) dans le jeu d'entraînement</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : un seul exemple aberrant<br/>
peut fausser la prédiction. Augmenter k<br/>
rend la décision plus robuste.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>La complexité du calcul devient logarithmique</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Le coût d'un calcul de<br/>
prédiction ne dépend pas<br/>
du choix de $k$ : il<br/>
reste linéaire en<br/>
$N$ (nombre d'exemples).</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>La prédiction est plus stable</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : c'est l'inverse. k = 1 est très<br/>
sensible au bruit.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>L'algorithme ne fonctionne pas avec $k = 1$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Le choix $k = 1$ est tout<br/>
à fait valide d'un point<br/>
de vue algorithmique. Il<br/>
est simplement peu<br/>
robuste face au bruit<br/>
des données.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>k plus proches voisins (k-NN) — Q10 : Trace simple</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Avec k = 3, on classe un nouveau point P. Ses<br/>
3 plus proches voisins ont les classes : A, B,<br/>
A. Quelle classe prédit k-NN pour P ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Le vote est très simple à implémenter en<br/>
Python : <code>Counter([cl for (_, cl) in<br/>
voisins]).most_common(1)[0][0]</code>.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Aucune des deux (égalité)</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : il n'y a pas d'égalité (2 vs 1).</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>B (le plus proche)</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : ce serait k = 1. Avec k = 3, on<br/>
fait un vote majoritaire.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>A (deux votes contre un pour B)</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : vote majoritaire. A<br/>
obtient 2 votes, B obtient 1. La classe<br/>
prédite est A.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Les deux à la fois</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : k-NN renvoie une seule classe.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>k plus proches voisins (k-NN) — Q11 : Code distance</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Quel code calcule correctement la <strong>distance<br/>
euclidienne</strong> entre deux points 2D représentés<br/>
comme tuples <code>a = (xa, ya)</code> et <code>b = (xb, yb)</code> ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Astuce : pour comparer des distances, on<br/>
peut omettre la racine carrée (la fonction<br/>
racine est croissante). Plus rapide.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p><code>((a[0] - b[0])  2 + (a[1] - b[1])  2)  0.5</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : Pythagore en Python.<br/>
<code>** 0.5</code> calcule la racine carrée. Variante :<br/>
<code>math.sqrt(...)</code>.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>a[0] <em> b[0] + a[1] </em> b[1]</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : c'est le produit scalaire.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>a + b</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : on ne peut pas additionner deux<br/>
tuples comme cela (concaténation, pas<br/>
addition).</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>abs(a[0] - b[0]) + abs(a[1] - b[1])</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : c'est la distance de Manhattan<br/>
(|Δx| + |Δy|), pas l'euclidienne.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>k plus proches voisins (k-NN) — Q12 : Sélection des voisins</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Pour trouver les k plus proches voisins d'un<br/>
point P parmi N exemples, quelle approche est<br/>
la plus simple ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Optimisations possibles : structures<br/>
spatiales (kd-trees), heuristiques (pas au<br/>
programme Première). Mais l'approche naïve<br/>
suffit pour comprendre.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Calculer la distance à chacun des N exemples, trier, garder les k premiers</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : simple à implémenter.<br/>
Coût : O(N) pour les distances + O(N log<br/>
N) pour le tri = O(N log N).</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Aucune solution n'existe pour ce problème</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Plusieurs solutions<br/>
existent au contraire ;<br/>
la plus simple est<br/>
précisément celle qu'on<br/>
vient de décrire.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Choisir k exemples au hasard</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : pas k-NN.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Calculer la moyenne des exemples</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : ce n'est pas le rôle.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>k plus proches voisins (k-NN) — Q13 : Pourquoi normaliser ?</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Pourquoi est-il souvent <strong>utile de normaliser</strong><br/>
les caractéristiques des données avant<br/>
d'appliquer k-NN ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Exemple concret : si on classe des personnes<br/>
par (âge en années [0-100], revenu en € [0-<br/>
100 000]), le revenu domine totalement la<br/>
distance. Normaliser remet les deux sur une<br/>
échelle comparable.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Parce qu'une caractéristique avec une plage de valeurs très grande (ex. revenu en €) écraserait l'influence d'une caractéristique à plus petite plage (ex. âge en années) dans le calcul de distance</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : la distance euclidienne<br/>
est sensible aux échelles. Normaliser<br/>
(rescaler entre 0 et 1, ou centrer-<br/>
réduire) garantit que toutes les<br/>
caractéristiques pèsent autant.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Pour rendre l'algorithme déterministe</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>L'algorithme des $k$ plus<br/>
proches voisins est déjà<br/>
déterministe par<br/>
construction. La<br/>
normalisation joue un<br/>
autre rôle, comme<br/>
expliqué dans la bonne<br/>
réponse.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Pour économiser de la mémoire</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>La normalisation n'a pas<br/>
d'effet notable sur la<br/>
consommation mémoire.<br/>
Son intérêt se situe sur<br/>
le plan numérique.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Parce que c'est obligatoire en Python</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Aucune obligation n'est<br/>
imposée par le langage.<br/>
La normalisation est une<br/>
bonne pratique, mais<br/>
reste facultative.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>k plus proches voisins (k-NN) — Q14 : Compromis sur k</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Quel <strong>risque</strong> y a-t-il à choisir un k <strong>trop<br/>
grand</strong> (par exemple k = nombre total<br/>
d'exemples) ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Compromis biais-variance : k petit = haute<br/>
variance, faible biais ; k grand = faible<br/>
variance, biais élevé. À doser selon la<br/>
taille du jeu.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Aucun risque ; un grand $k$ est toujours préférable</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Au contraire, un $k$ trop<br/>
grand pose un problème<br/>
spécifique, comme expliqué<br/>
dans la bonne réponse.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Le coût d'un calcul explose en $n^3$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Le coût d'un calcul de<br/>
prédiction reste linéaire<br/>
en $N$ : il ne dépend pas<br/>
du choix de $k$.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>L'algorithme cesse de fonctionner</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>L'algorithme continue de<br/>
fonctionner, mais le<br/>
résultat qu'il produit<br/>
n'est plus pertinent.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>La prédiction tend vers la classe majoritaire globale : on perd toute spécificité locale</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : si k = N, tous les<br/>
exemples votent. Le résultat est toujours<br/>
la classe la plus représentée dans tout<br/>
le jeu de données, indépendamment de la<br/>
position de P. Plus rien d'utile.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>k plus proches voisins (k-NN) — Q15 : Rôle des données d'entraînement</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Que sont les <strong>données d'entraînement</strong><br/>
(training set) pour k-NN ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>En pratique, on divise un jeu étiqueté en<br/>
<strong>train</strong> (entraînement) + <strong>test</strong><br/>
(évaluation) pour mesurer la performance<br/>
sans tricher.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Les nouvelles données à classer</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : ce sont les données de <strong>test</strong><br/>
(à classer).</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Une formule mathématique</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Les données d'entraînement<br/>
ne sont pas une formule,<br/>
mais un ensemble<br/>
d'exemples concrets,<br/>
chacun étiqueté avec sa<br/>
classe.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>L'ensemble des exemples étiquetés que k-NN utilise pour comparer un nouveau point. La taille et la qualité de ce jeu déterminent la performance.</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : plus le jeu<br/>
d'entraînement est riche et représentatif,<br/>
meilleures sont les prédictions.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Le code source de l'algorithme</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Le code source est une<br/>
notion distincte des<br/>
données d'entraînement,<br/>
qui sont les exemples<br/>
utilisés.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>k plus proches voisins (k-NN) — Q16 : Code k-NN simple</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Quel code en Python implémente correctement<br/>
k-NN pour classer un point <code>p</code> ?<br/>
<pre><code># exemples = [(point, classe), ...]
# k entier, dist(a, b) renvoie la distance</code></pre></p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Implementation simple, lisible. Pour de gros<br/>
volumes, des bibliothèques comme<br/>
scikit-learn proposent des implémentations<br/>
optimisées (kd-trees).</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<pre><code>return exemples[0][1]</code></pre>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : on renvoie toujours la classe du<br/>
premier exemple, sans tenir compte de la<br/>
distance.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<pre><code>return min(exemples)</code></pre>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : aucun rapport avec k-NN.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<pre><code>return k</code></pre>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : on renvoie le paramètre k au<br/>
lieu d'une classe.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<pre><code>from collections import Counter
paires = [(dist(p, x), c) for (x, c) in exemples]
paires.sort()
voisins = [c for (_, c) in paires[:k]]
return Counter(voisins).most_common(1)[0][0]</code></pre>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : on calcule les distances,<br/>
on trie, on prend les k plus proches, on<br/>
fait le vote majoritaire avec <code>Counter</code>.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>k plus proches voisins (k-NN) — Q17 : Jeu de données Iris</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Le jeu de données <strong>Iris</strong> est célèbre pour<br/>
illustrer la classification. Que contient-il ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Ce jeu est le « hello world » de<br/>
l'apprentissage automatique. Idéal pour<br/>
illustrer k-NN : 4 dimensions, 3 classes,<br/>
taille raisonnable.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Des mesures de couleurs au format rouge-vert-bleu</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Le jeu de données Iris ne<br/>
contient pas de mesures<br/>
colorimétriques, mais des<br/>
mesures morphologiques<br/>
des fleurs.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>150 fleurs d'iris décrites par 4 mesures (longueur/largeur des sépales et pétales) et leur espèce (setosa, versicolor, virginica)</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : jeu de données<br/>
historique introduit par Fisher en 1936.<br/>
Très utilisé pour tester les algorithmes<br/>
de classification.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Des graines à planter</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Cette interprétation<br/>
littérale du nom « Iris »<br/>
est sans rapport avec le<br/>
contenu du jeu de<br/>
données.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Des images de fleurs au format JPEG</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : ce sont des <strong>mesures</strong><br/>
numériques, pas des images.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>k plus proches voisins (k-NN) — Q18 : Coût de la prédiction</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Si l'on a N exemples d'entraînement, quel est<br/>
le <strong>coût</strong> d'une prédiction k-NN naïve ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Conséquence : prédiction lente sur de gros<br/>
jeux d'entraînement. Optimisations possibles<br/>
(kd-trees) hors programme.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Logarithmique en N</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : il faut bien examiner tous les<br/>
exemples.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Linéaire en N (proportionnel au nombre d'exemples)</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : on calcule N distances.<br/>
Le tri ajoute un facteur log N (donc<br/>
O(N log N) total), mais au plus simple<br/>
on peut prendre les k minimums en O(N k)<br/>
ou O(N) avec un tri partiel.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Constant, indépendant de N</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : il faut bien comparer le<br/>
nouveau point à chaque exemple.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Quadratique en N</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : on ne fait pas de double boucle.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>k plus proches voisins (k-NN) — Q19 : Forces et limites</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Quelle est une <strong>limite importante</strong> de k-NN ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Forces : simple, intuitif, sans hypothèse<br/>
sur la distribution des données.<br/>
Limites : lent, sensible à la malédiction de<br/>
la dimensionnalité (en très haute dimension,<br/>
les distances perdent leur sens).</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Il ne peut pas faire de classification</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : c'est précisément son rôle.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Il ne fonctionne qu'en dimension 2</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : k-NN se généralise à toute<br/>
dimension.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Il est lent à la prédiction sur de gros jeux d'entraînement (pas de modèle compact appris) et sensible aux échelles des caractéristiques</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : tous les calculs ont lieu<br/>
à la prédiction. Pour 1 million d'exemples<br/>
en haute dimension, k-NN peut être<br/>
impraticable.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Il invente de nouveaux exemples au cours de la prédiction</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>L'algorithme se contente<br/>
de comparer le nouveau<br/>
point aux exemples déjà<br/>
fournis. Il n'en invente<br/>
aucun.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>k plus proches voisins (k-NN) — Q20 : Vote pondéré</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Une variante de k-NN consiste à <strong>pondérer le<br/>
vote</strong> des voisins. Pourquoi ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Vote uniforme = chaque voisin compte 1.<br/>
Vote pondéré = poids dépendant de la<br/>
distance. Variante classique du k-NN.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Pour donner plus d'influence aux voisins plus proches (typiquement avec un poids proportionnel à $1/d$)</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : un voisin très proche<br/>
devrait peser plus qu'un voisin éloigné.<br/>
Améliore souvent la qualité des<br/>
prédictions et résout les égalités.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Pour économiser la mémoire</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>La pondération n'a aucun<br/>
effet sur la consommation<br/>
mémoire.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Pour rendre l'algorithme aléatoire</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Cette pondération reste<br/>
parfaitement déterministe.<br/>
Elle ne fait pas<br/>
intervenir le hasard.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Pour ralentir intentionnellement le programme</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Aucun procédé de<br/>
pondération n'a pour but<br/>
de ralentir le<br/>
programme.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>k plus proches voisins (k-NN) — Q21 : Trace détaillée</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Avec k = 3, on classe un point P. Les 5<br/>
exemples les plus proches sont (par distance<br/>
croissante) : (1.0, classe A), (1.5, B), (2.0,<br/>
A), (3.0, A), (4.0, B). Quelle classe prédit<br/>
k-NN ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Méthode : trier par distance, garder les k<br/>
premiers, voter à la majorité. Les exemples<br/>
au-delà de k (4ᵉ et 5ᵉ ici) ne comptent pas.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>A</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : on garde les k = 3 plus<br/>
proches : (1.0, A), (1.5, B), (2.0, A).<br/>
Vote : A = 2, B = 1 → A gagne.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>B</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : B n'a qu'un seul vote.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Indéterminé</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : k-NN est déterministe.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Égalité</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : pas d'égalité.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>k plus proches voisins (k-NN) — Q22 : Malédiction de la dimensionnalité</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Pourquoi k-NN devient-il <strong>moins efficace en<br/>
haute dimension</strong> (par exemple 1000 attributs) ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Solutions : réduction de dimension (ACP,<br/>
autres méthodes), sélection de<br/>
caractéristiques. En NSI, on reste sur des<br/>
cas simples (2D, 3D, jeu Iris à 4D).</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>En haute dimension, les distances entre points deviennent presque toutes égales : la notion de « proche » perd son sens. C'est la malédiction de la dimensionnalité.</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : phénomène<br/>
contre-intuitif. Les volumes en haute<br/>
dimension se concentrent dans les coins,<br/>
les distances se ressemblent. k-NN<br/>
fonctionne mal.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>La mémoire n'est plus suffisante</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Cet effet peut survenir<br/>
dans certains cas<br/>
extrêmes, mais ce n'est<br/>
pas la cause principale<br/>
de la dégradation des<br/>
performances en haute<br/>
dimension.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Aucun problème particulier en haute dimension</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Au contraire, un phénomène<br/>
réel et bien étudié<br/>
dégrade les performances<br/>
de l'algorithme en haute<br/>
dimension : c'est la<br/>
malédiction de la<br/>
dimensionnalité, comme<br/>
détaillé dans la bonne<br/>
réponse.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Le programme plante systématiquement</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Le programme s'exécute<br/>
sans erreur, mais sa<br/>
qualité de prédiction se<br/>
dégrade fortement.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>k plus proches voisins (k-NN) — Q23 : Évaluation de la performance</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Pour évaluer la qualité de k-NN sur un jeu<br/>
étiqueté, quelle est la <strong>bonne pratique</strong> ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Variantes : validation croisée<br/>
(cross-validation, on découpe en plusieurs<br/>
blocs et on alterne). Pratique standard pour<br/>
des évaluations robustes.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Mesurer la précision sur les exemples d'entraînement eux-mêmes</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : on testerait sur les données<br/>
déjà mémorisées (k = 1 donnerait 100 %),<br/>
ce qui est sans intérêt.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Aucune évaluation n'est possible</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Plusieurs méthodes<br/>
d'évaluation existent au<br/>
contraire ; la plus<br/>
simple consiste à<br/>
séparer les données en<br/>
un ensemble<br/>
d'entraînement et un<br/>
ensemble de test.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Demander l'avis d'un expert humain</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Faire intervenir un expert<br/>
peut être utile, mais<br/>
c'est une démarche<br/>
subjective et coûteuse.<br/>
Pour évaluer la<br/>
performance d'un<br/>
algorithme, on préfère<br/>
une mesure quantitative<br/>
sur des données de test.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Séparer le jeu en données d'entraînement et données de test disjointes, puis mesurer la précision sur les données de test</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : on évalue sur des<br/>
exemples que l'algorithme n'a jamais<br/>
« vus ». Pratique standard en<br/>
apprentissage automatique. Souvent 80 %<br/>
/ 20 %.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>k plus proches voisins (k-NN) — Q24 : k-NN pour la régression</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Peut-on adapter k-NN pour <strong>prédire un nombre</strong><br/>
(régression) au lieu d'une classe ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Algorithme <strong>k-NN régresseur</strong> : très utilisé<br/>
en pratique pour des prédictions de prix,<br/>
durées, scores. Même principe que la<br/>
classification.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Oui, mais à condition de doubler la valeur de $k$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Le passage à la régression<br/>
n'a aucun rapport avec un<br/>
doublement de $k$. C'est<br/>
la nature de l'agrégation<br/>
finale (vote majoritaire<br/>
ou moyenne) qui change.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Non, l'algorithme est strictement limité à la classification</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>L'algorithme s'adapte au<br/>
contraire très naturellement<br/>
au cas de la régression,<br/>
comme expliqué dans la<br/>
bonne réponse.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Non, il faut nécessairement un autre algorithme</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>L'algorithme des $k$ plus<br/>
proches voisins s'étend<br/>
naturellement à la<br/>
régression, sans qu'il<br/>
soit nécessaire de le<br/>
remplacer.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Oui, en remplaçant le vote majoritaire par la moyenne (ou médiane) des valeurs des k voisins</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : si la cible est<br/>
numérique (prix d'une maison, note<br/>
attendue), la classe « majoritaire » est<br/>
remplacée par la moyenne des cibles des<br/>
k voisins. Idée générale identique.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>k plus proches voisins (k-NN) — Q25 : Synthèse</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Parmi les affirmations suivantes sur k-NN,<br/>
laquelle est <strong>fausse</strong> ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Mnémonique : k petit = local, sensible au<br/>
bruit ; k grand = global, lissé. Choisir k<br/>
empiriquement par validation.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>La phase d'entraînement se résume essentiellement à mémoriser les exemples.</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Vrai : algorithme paresseux.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>La distance euclidienne est un choix courant pour la mesure de proximité.</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Vrai : c'est la mesure standard, mais<br/>
d'autres existent (Manhattan, cosinus).</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Plus k est grand, plus l'algorithme est sensible au bruit local.</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Faux (donc bonne réponse) : c'est<br/>
l'<strong>inverse</strong>. Avec k grand, le vote<br/>
intègre beaucoup de voisins, ce qui<br/>
<strong>lisse</strong> la décision et la rend<br/>
<strong>moins</strong> sensible aux exemples isolés<br/>
(bruit). Avec k petit (k = 1), un seul<br/>
exemple aberrant change la prédiction.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>k-NN est un algorithme d'apprentissage supervisé.</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Vrai : il apprend depuis des exemples<br/>
étiquetés.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>k plus proches voisins (k-NN) — Q26 : Choix de la distance</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Outre la distance euclidienne, on rencontre<br/>
souvent la <strong>distance de Manhattan</strong><br/>
(|Δx| + |Δy|). Quel critère permet de choisir<br/>
entre ces deux distances ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Repère pratique : essayer plusieurs distances,<br/>
mesurer la performance sur l'ensemble de test,<br/>
retenir la meilleure. C'est ce qu'on appelle<br/>
l'optimisation des hyperparamètres.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Aucun critère, on choisit au hasard</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : le choix de la distance influence<br/>
fortement les résultats de l'algorithme. Il<br/>
faut le justifier en fonction du problème,<br/>
pas le tirer au hasard.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>La distance euclidienne est toujours préférable car elle est plus précise</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : ces deux distances sont des choix<br/>
valides selon le contexte. Aucune n'est<br/>
universellement meilleure. Le choix dépend<br/>
de la nature des données et de la<br/>
structure de la proximité que l'on veut<br/>
modéliser.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Le choix dépend de la nature du problème :<br/>
la distance euclidienne convient aux<br/>
espaces continus avec des déplacements<br/>
directs ; la distance de Manhattan<br/>
convient aux situations où l'on se déplace<br/>
sur une grille (par exemple un quadrillage<br/>
urbain ou des composantes indépendantes)</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : la distance de Manhattan<br/>
est moins sensible aux valeurs aberrantes<br/>
dans les coordonnées car elle ne carre pas<br/>
les écarts. Elle est aussi plus naturelle<br/>
quand les composantes ont une signification<br/>
indépendante. La distance euclidienne, plus<br/>
régulière, convient bien aux espaces<br/>
géométriques classiques.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>La distance de Manhattan est plus rapide à calculer</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Différence négligeable en pratique : les<br/>
deux distances se calculent en O(d) où d<br/>
est la dimension. La performance n'est pas<br/>
le critère qui motive le choix.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>k plus proches voisins (k-NN) — Q27 : Classes déséquilibrées</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>On veut détecter une maladie rare avec k-NN.<br/>
Le jeu d'entraînement contient 95 % d'exemples<br/>
« sain » et 5 % d'exemples « malade ». Avec<br/>
k = 7, que va prédire l'algorithme pour<br/>
presque tous les nouveaux patients ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Le déséquilibre de classes est un problème<br/>
majeur en apprentissage. Mesurer uniquement la<br/>
précision globale peut être trompeur ; on<br/>
complète par le rappel et la précision sur la<br/>
classe minoritaire, ou par la matrice de<br/>
confusion.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>« malade » à 5 % des nouveaux patients, par symétrie</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : ce serait le comportement attendu<br/>
d'une distribution aléatoire. Or k-NN ne<br/>
tire rien au hasard ; il prédit en<br/>
fonction des voisins, et ceux-ci sont<br/>
principalement « sain ».</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Une classe au hasard, l'algorithme étant non déterministe</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : k-NN est strictement<br/>
déterministe. Pour une même entrée et un<br/>
même jeu d'entraînement, il prédit<br/>
toujours la même classe.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>« sain » dans la quasi-totalité des cas,<br/>
car les voisins les plus proches sont<br/>
presque toujours majoritairement « sain » à<br/>
cause du déséquilibre des classes ;<br/>
l'algorithme passe à côté des cas<br/>
« malade »</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : c'est le piège classique<br/>
des classes déséquilibrées. La précision<br/>
globale peut sembler élevée (95 %), mais le<br/>
rappel sur la classe minoritaire est<br/>
quasiment nul. Solutions : suréchantillonner<br/>
la classe minoritaire, sous-échantillonner<br/>
la majoritaire, ou utiliser un vote<br/>
pondéré par l'inverse de la fréquence des<br/>
classes.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>« malade » dans la majorité des cas, par sécurité</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : k-NN n'a aucune logique de<br/>
prudence sanitaire. Il vote simplement à<br/>
la majorité des voisins. Or les voisins<br/>
tirés aléatoirement sont presque toujours<br/>
« sain ».</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>k plus proches voisins (k-NN) — Q28 : Calcul concret</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>On classe le point <code>P = (3, 4)</code> avec k = 3 et<br/>
la distance euclidienne. Les exemples<br/>
étiquetés sont :<br/>
<code>(0, 0, A)</code>, <code>(6, 8, A)</code>, <code>(2, 1, B)</code>,<br/>
<code>(5, 4, B)</code>, <code>(3, 0, A)</code>. Quelle classe<br/>
prédit k-NN ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Méthode systématique : (1) calculer la<br/>
distance de P à chaque exemple ; (2) trier par<br/>
distance croissante ; (3) garder les k<br/>
premiers ; (4) voter à la majorité. Sur les<br/>
petits jeux, refaire le calcul à la main est<br/>
le meilleur exercice de compréhension.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>A</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : ce serait correct si A obtenait<br/>
la majorité parmi les 3 plus proches.<br/>
Refaire le calcul des distances : <code>(0, 0)</code><br/>
→ 5 ; <code>(6, 8)</code> → 5 ; <code>(2, 1)</code> → √10 ≈ 3,16 ;<br/>
<code>(5, 4)</code> → 2 ; <code>(3, 0)</code> → 4. Les 3 plus<br/>
proches sont <code>(5, 4, B)</code> (2), <code>(2, 1, B)</code><br/>
(3,16) et <code>(3, 0, A)</code> (4).</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Égalité entre A et B</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : avec k = 3 (impair) et deux<br/>
classes, il ne peut pas y avoir égalité.<br/>
Le calcul donne B = 2 voix, A = 1 voix.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Indéterminé sans plus d'informations</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : toutes les informations<br/>
nécessaires sont fournies (point, k,<br/>
distance, exemples étiquetés). Le résultat<br/>
est parfaitement calculable.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>B</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse. Distances calculées :<br/>
<code>(0, 0)</code> → 5 ; <code>(6, 8)</code> → 5 ; <code>(2, 1)</code> →<br/>
√10 ≈ 3,16 ; <code>(5, 4)</code> → 2 ; <code>(3, 0)</code> → 4.<br/>
Les 3 plus proches sont <code>(5, 4, B)</code>,<br/>
<code>(2, 1, B)</code>, <code>(3, 0, A)</code>. Vote : B = 2,<br/>
A = 1 → B gagne.</p>]]></text>
    </feedback>
  </answer>
</question>

</quiz>
