N.S.I. WorkSpace Compétence,Notions,P-Th-G,Première G3 – Algorithme des k plus proches voisins

G3 – Algorithme des k plus proches voisins

Implémentation de l’algorithme ‘kNN’ en langage Python, appliquée au cas des Iris.

Etape 1 – Construction du dataset à partir des données contenues dans le fichier au format ‘csv’

Créer un module ‘knn_module.py’ qui contiendra une fonction constructDataset().
Celle-ci prend en argument :

  • le nom d’un fichier ‘csv’
  • le caractère utilisé pour la séparation des données (virgule par défaut)
  • un booléen qui vaut ‘faux’ par défaut et qui permet de conserver (si ‘vrai’) ou non (si ‘faux’) la première ligne du fichier csv.


Elle renvoie le ‘dataset’ sous la forme d’une liste de listes. Chaque élément de la liste principale est une liste de trois valeurs, respectivement la longueur d’un pétale (type : float), la largeur d’une pétale (type ; float et le chiffre correspondant à l’espèce d’appartenance( type : int ; 0, 1 ou 2).

Compléter le code qui suit en remplaçant les ??? par ce qui convient [ Téléchargement]

On rappelle que la méthode ‘split()’ permet de découper une chaîne de caractères en éléments de liste, à partir du caractère passé en paramètre.

Sauvegarder ce module dans un dossier contenant également le fichier « iris.csv ».

"""Module knn_module."""

def constructDataset(csvname, separ=",", firstline=False):

    ress = open(csvname, mode='r', encoding="UTF-8")
    # lecture de la première ligne du fichier csv
    if firstline is False:
        # si cette ligne contient les intitulés de colonnes
        # on ne conserve pas ces données.
        ress.readline()

    dataset=[]

    data = ress.readline()
    while data :
        data = data.replace("\n", "") # suppression du retour à la ligne
        data = data.split(???)
        data[0], data[1], data[2] = float(data[0]), ???(data[1]), ???(data[2])
        dataset.???(data)
        data = ress.readline()

    ress.close()

    return ???


if __name__ == '__main__':
    assert len(constructDataset('iris.csv')) == 150

éponse à télécharger

Créer un module « knn_main_program.py ».
Écrire les instructions qui :

  • importe le contenu du module ‘knn_module’ ;
  • affecte à une variable le nom du fichier au format csv contenant les données (ici : ‘iris.csv’)
  • appelle la fonction permettant de créer le ‘dataset’
"""kNN : programme principal."""

from ???

# Etape 1 : construction d'un dataset à partir des données enregistrées dans
#           un fichier csv
csvname ???
dataset ???