Skip to content
Snippets Groups Projects
Commit e35f4487 authored by thibault.capt's avatar thibault.capt
Browse files

documentation

parent 23395b03
No related branches found
No related tags found
No related merge requests found
# Importation des bibliothèques
from typing import Tuple, List
import pandas as pd import pandas as pd
import numpy as np import numpy as np
import matplotlib.pyplot as plt import matplotlib.pyplot as plt
def import_csv(filename: str): def import_csv(filename: str, h: int or None) -> pd.DataFrame:
return pd.read_csv(filename, header=None) """
Importe un fichier CSV et retourne un DataFrame pandas.
Args:
filename (str): Le chemin du fichier CSV.
h (int or None, optional): L'entête du fichier CSV.
def manhattan_distance(x1, x2): Returns:
pandas.DataFrame: Les données importées sous forme de DataFrame.
"""
return pd.read_csv(filename, header=h)
def manhattan_distance(x1: np.ndarray, x2: np.ndarray) -> float:
"""
Calcule la distance de Manhattan (L1) entre deux vecteurs.
Args:
x1 (numpy.ndarray): Le premier vecteur.
x2 (numpy.ndarray): Le deuxième vecteur.
Returns:
float: La distance de Manhattan entre x1 et x2.
"""
return np.sum(np.abs(x1 - x2)) return np.sum(np.abs(x1 - x2))
def assign_clusters(X, centroids): def assign_clusters(X: np.ndarray, centroids: np.ndarray) -> np.ndarray:
"""
Attribue chaque point de données à son cluster le plus proche en utilisant la distance de Manhattan.
Args:
X (numpy.ndarray): Les données.
centroids (numpy.ndarray): Les centroïdes des clusters.
Returns:
numpy.ndarray: Les étiquettes de cluster attribuées à chaque point de données.
"""
distances = np.array([[manhattan_distance(x, centroid) for centroid in centroids] for x in X]) distances = np.array([[manhattan_distance(x, centroid) for centroid in centroids] for x in X])
return np.argmin(distances, axis=1) return np.argmin(distances, axis=1)
def k_means(X, k, max_iterations=100): def k_means(X: np.ndarray, k: int, max_iterations: int = 100) -> Tuple[np.ndarray, np.ndarray]:
"""
Implémente l'algorithme K-Means pour regrouper les données en k clusters.
Args:
X (numpy.ndarray): Les données à regrouper.
k (int): Le nombre de clusters à former.
max_iterations (int, optional): Le nombre maximal d'itérations. Défaut à 100.
Returns:
tuple: Une paire contenant les étiquettes de cluster et les centroïdes finaux.
"""
# Initialisation des k-centroïdes de manière aléatoire # Initialisation des k-centroïdes de manière aléatoire
np.random.seed(0) np.random.seed(0)
centroids = X[np.random.choice(X.shape[0], k, replace=False)] centroids = X[np.random.choice(X.shape[0], k, replace=False)]
...@@ -82,7 +125,7 @@ if __name__ == "__main__": ...@@ -82,7 +125,7 @@ if __name__ == "__main__":
# afficher les nouveaux cluster à chaque itérations # afficher les nouveaux cluster à chaque itérations
# Charger les données depuis le fichier CSV # Charger les données depuis le fichier CSV
df = import_csv("Data/iris.csv") df = import_csv("Data/iris.csv", None)
X = df.iloc[:, :-1].values X = df.iloc[:, :-1].values
k = 3 k = 3
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment