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

documentation

parent 23395b03
Branches
No related tags found
No related merge requests found
# Importation des bibliothèques
from typing import Tuple, List
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
def import_csv(filename: str):
return pd.read_csv(filename, header=None)
def import_csv(filename: str, h: int or None) -> pd.DataFrame:
"""
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))
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])
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
np.random.seed(0)
centroids = X[np.random.choice(X.shape[0], k, replace=False)]
......@@ -82,7 +125,7 @@ if __name__ == "__main__":
# afficher les nouveaux cluster à chaque itérations
# 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
k = 3
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment