\documentclass[a4paper,11pt]{article}

% Packages
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[francais]{babel}
\usepackage{geometry}
\usepackage{tikz}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{enumitem}
\usepackage{xcolor}
\usepackage{tcolorbox}
\usepackage{fancyhdr}
\usepackage{multicol}

% Configuration de la page
\geometry{margin=2cm}
\pagestyle{fancy}
\fancyhf{}
\fancyfoot[C]{Page \thepage/4 -- Activité k-NN}
\renewcommand{\headrulewidth}{0pt}

% Couleurs personnalisées
\definecolor{classA}{RGB}{231,76,60}
\definecolor{classB}{RGB}{52,152,219}
\definecolor{lightblue}{RGB}{227,242,253}
\definecolor{lightyellow}{RGB}{255,243,205}

% Configuration TikZ
\usetikzlibrary{shapes.geometric,calc}

\begin{document}

% ============= PAGE 1 =============
\begin{center}
    {\Huge \textbf{Activité débranchée : k-NN}}\\[0.3cm]
    {\Large \textbf{Les k Plus Proches Voisins}}
\end{center}

\vspace{0.5cm}

\textbf{Objectif :} Comprendre comment l'algorithme k-NN classifie un nouveau point en utilisant la proximité avec les points d'apprentissage.

\vspace{0.3cm}

\begin{tcolorbox}[colback=lightblue,colframe=blue!75!black,title=\textbf{Principe}]
\begin{itemize}[leftmargin=*]
    \item On dispose d'un ensemble de points déjà classifiés (points d'apprentissage)
    \item Pour classifier un nouveau point, on cherche ses \textit{k} plus proches voisins
    \item La classe majoritaire parmi ces \textit{k} voisins devient la classe du nouveau point
\end{itemize}
\end{tcolorbox}

\vspace{0.5cm}

\section*{Exercice 1 : Classification avec k = 3}

Voici un ensemble de points sur un plan. Les cercles rouges (\textcolor{classA}{$\bullet$}) sont de classe A, les carrés bleus (\textcolor{classB}{$\blacksquare$}) sont de classe B. Le point noir ($\star$) est à classifier.

\vspace{0.3cm}

\begin{center}
\begin{tikzpicture}[scale=1.2]
    % Grille
    \draw[gray!30, step=1] (0,0) grid (8,8);
    
    % Axes et cadre
    \draw[thick] (0,0) rectangle (8,8);
    
    % Points de classe A (cercles rouges)
    \foreach \point in {(1,7), (1.5,6), (2,7.5), (2.5,6.5), (1.5,5), (2.5,5.5), (3,7)} {
        \fill[classA] \point circle (0.15);
    }
    
    % Points de classe B (carrés bleus)
    \fill[classB] (5,2) circle (0.15);
    \fill[classB] ([shift={(-0.12,-0.12)}]5,2) rectangle ++(0.24,0.24);
    
    \fill[classB] (5.5,3) circle (0.15);
    \fill[classB] ([shift={(-0.12,-0.12)}]5.5,3) rectangle ++(0.24,0.24);
    
    \fill[classB] (6,1.5) circle (0.15);
    \fill[classB] ([shift={(-0.12,-0.12)}]6,1.5) rectangle ++(0.24,0.24);
    
    \fill[classB] (6.5,2.5) circle (0.15);
    \fill[classB] ([shift={(-0.12,-0.12)}]6.5,2.5) rectangle ++(0.24,0.24);
    
    \fill[classB] (5.5,1) circle (0.15);
    \fill[classB] ([shift={(-0.12,-0.12)}]5.5,1) rectangle ++(0.24,0.24);
    
    \fill[classB] (7,2) circle (0.15);
    \fill[classB] ([shift={(-0.12,-0.12)}]7,2) rectangle ++(0.24,0.24);
    
    \fill[classB] (6.5,3.5) circle (0.15);
    \fill[classB] ([shift={(-0.12,-0.12)}]6.5,3.5) rectangle ++(0.24,0.24);
    
    % Point à classifier (étoile noire)
    \node[star,star points=5,star point ratio=2.5,fill=black,draw=black,thick,minimum size=0.6cm] at (4,4.5) {};
    
\end{tikzpicture}

\vspace{0.3cm}

% Légende
\begin{tabular}{ccccc}
    \textcolor{classA}{$\bullet$} Classe A & \quad &
    \textcolor{classB}{$\blacksquare$} Classe B & \quad &
    $\star$ À classifier
\end{tabular}
\end{center}

\vspace{0.5cm}

\subsection*{Questions :}

\begin{enumerate}
    \item Identifiez les 3 points les plus proches du point noir $\star$. Tracez les distances sur le graphique ci-dessus.
    
    \vspace{0.3cm}
    Distances : \underline{\hspace{3cm}} \underline{\hspace{3cm}} \underline{\hspace{3cm}}
    
    \vspace{0.3cm}
    \item Parmi ces 3 points, combien sont de classe A ? \underline{\hspace{1.5cm}} De classe B ? \underline{\hspace{1.5cm}}
    
    \vspace{0.3cm}
    \item À quelle classe appartient donc le point noir avec $k = 3$ ? \underline{\hspace{3cm}}
\end{enumerate}

% ============= PAGE 2 =============
%\newpage

\section*{Exercice 2 : Influence du paramètre k}

Reprenez le même graphique que l'exercice 1.

\vspace{0.5cm}

\subsection*{a) Avec k = 1 (1 seul voisin)}

\begin{itemize}
    \item Quel est le point le plus proche ? \underline{\hspace{5cm}}
    \item Classification du point noir : \underline{\hspace{5cm}}
\end{itemize}

\vspace{0.5cm}

\subsection*{b) Avec k = 5 (5 voisins)}

\begin{itemize}
    \item Listez les 5 points les plus proches : \underline{\hspace{7cm}}
    
    \vspace{0.2cm}
    \underline{\hspace{10cm}}
    
    \item Nombre de classe A : \underline{\hspace{2cm}} \quad Nombre de classe B : \underline{\hspace{2cm}}
    \item Classification du point noir : \underline{\hspace{5cm}}
\end{itemize}

\vspace{0.5cm}

\subsection*{c) Avec k = 7 (tous les voisins de chaque classe)}

\begin{itemize}
    \item Nombre de classe A : \underline{\hspace{2cm}} \quad Nombre de classe B : \underline{\hspace{2cm}}
    \item Classification du point noir : \underline{\hspace{5cm}}
\end{itemize}

\vspace{0.8cm}

\begin{tcolorbox}[colback=lightyellow,colframe=orange!75!black,title=\textbf{Réflexion}]

\textbf{1. La classification change-t-elle selon la valeur de k ? Pourquoi ?}

\vspace{0.8cm}
\underline{\hspace{14cm}}

\vspace{0.4cm}
\underline{\hspace{14cm}}

\vspace{0.5cm}

\textbf{2. Que se passe-t-il si k est trop petit (k = 1) ?}

\vspace{0.8cm}
\underline{\hspace{14cm}}

\vspace{0.4cm}
\underline{\hspace{14cm}}

\vspace{0.5cm}

\textbf{3. Que se passe-t-il si k est trop grand (k = nombre total de points) ?}

\vspace{0.8cm}
\underline{\hspace{14cm}}

\vspace{0.4cm}
\underline{\hspace{14cm}}

\end{tcolorbox}

% ============= PAGE 3 =============
\newpage

\section*{Exercice 3 : À vous de jouer !}

Créez votre propre situation de classification avec $k = 3$.

\vspace{0.5cm}

\begin{center}
\begin{tikzpicture}[scale=1.3]
    % Grille fine
    \draw[gray!20, step=1] (0,0) grid (12,12);
    
    % Axes et cadre
    \draw[very thick] (0,0) rectangle (12,12);
    
    % Graduations
    \foreach \x in {0,2,4,6,8,10,12} {
        \node[below] at (\x,-0.2) {\small \x};
    }
    \foreach \y in {0,2,4,6,8,10,12} {
        \node[left] at (-0.2,\y) {\small \y};
    }
\end{tikzpicture}
\end{center}

\vspace{0.5cm}

\begin{tcolorbox}[colback=lightblue,colframe=blue!75!black,title=\textbf{Instructions}]
\begin{itemize}
    \item Placez au moins 10 points : 5 cercles rouges (classe A) et 5 carrés bleus (classe B)
    \item Placez une étoile noire (point à classifier)
    \item Tracez les 3 distances les plus courtes
    \item Déterminez la classe du point noir
\end{itemize}
\end{tcolorbox}

\vspace{0.5cm}

\textbf{Classification finale :} \underline{\hspace{5cm}}

% ============= PAGE 4 =============
\newpage

\section*{Pour aller plus loin}

\subsection*{Applications réelles de k-NN}

\begin{itemize}
    \item Reconnaissance d'écriture manuscrite
    \item Systèmes de recommandation (films, musique, produits)
    \item Diagnostic médical (classification de maladies)
    \item Détection de spam dans les emails
    \item Reconnaissance faciale
    \item Prévision météorologique
\end{itemize}

\vspace{0.5cm}

\subsection*{Questions de réflexion}

\textbf{1. Avantages de k-NN :}
\begin{itemize}
    \item Simple à comprendre et à implémenter
    \item Pas besoin d'entraînement complexe
    \item Fonctionne bien pour des frontières non linéaires
\end{itemize}

\vspace{0.3cm}

\textbf{2. Limitations de k-NN :}
\begin{itemize}
    \item Lent avec beaucoup de données (doit calculer toutes les distances)
    \item Sensible aux données aberrantes
    \item Nécessite de choisir la bonne valeur de $k$
    \item Ne fonctionne pas bien si les classes sont déséquilibrées
\end{itemize}

\vspace{0.3cm}

\textbf{3. Comment choisir k ?}
\begin{itemize}
    \item $k$ trop petit ($k=1$) : sensible au bruit, risque de sur-apprentissage
    \item $k$ trop grand : perd les détails, risque de sous-apprentissage
    \item Conseil : tester plusieurs valeurs et choisir celle qui donne les meilleurs résultats
    \item Souvent, $k$ impair pour éviter les égalités ($k = 3, 5, 7...$)
\end{itemize}

\vspace{0.5cm}

\begin{tcolorbox}[colback=lightyellow,colframe=orange!75!black,title=\textbf{Défi bonus}]
Imaginez une situation où k-NN pourrait donner un mauvais résultat. Dessinez cette situation sur une feuille séparée et expliquez pourquoi.

\vspace{0.5cm}
\textit{Indices : Pensez aux données bruitées, aux classes déséquilibrées, ou aux points isolés...}
\end{tcolorbox}

\end{document}