# -*- coding: utf-8 -*- """ Created on Sat Nov 20 21:28:40 2021 @author: huguet """ from myplotlib import print_1d_data, print_2d_data, print_dendrogramme from mydatalib import extract_data_2d, scale_data from mydatalib import apply_agglomerative_clustering from mydatalib import evaluate_agglomerative_clustering ################################################################## # READ a data set (arff format) # Parser un fichier de données au format arff # datanp est un tableau (numpy) d'exemples avec pour chacun la liste # des valeurs des features # Note 1 : # dans les jeux de données considérés : 2 features (dimension 2 seulement) # t =np.array([[1,2], [3,4], [5,6], [7,8]]) # # Note 2 : # le jeu de données contient aussi un numéro de cluster pour chaque point # --> IGNORER CETTE INFORMATION .... # 2d-4c-no9.arff xclara.arff path = './artificial/' dataset_name = "xclara" save = True print("-----------------------------------------------------------") print(" Chargement du dataset : " + dataset_name) data = extract_data_2d(path + dataset_name) print_2d_data(data, dataset_name=dataset_name + "_brutes", stop=False, save=save) print("-----------------------------------------------------------") print(" Mise à l'échelle") data_scaled = scale_data(data) print_2d_data(data_scaled, dataset_name=dataset_name + "_scaled", stop=False, save=save) # Types de linkage : single, average, complete, ward linkage linkage = "complete" print("-----------------------------------------------------------") print(" Création du dendrogramme : linkage " + linkage) print_dendrogramme(data_scaled, dataset_name=dataset_name, linkage=linkage, stop=False) k_max = 10 print("-----------------------------------------------------------") print(" Création clusters : linkage " + linkage + ", k=(0 to " + str(k_max) + ")") # Application du clustering agglomeratif pour plusieurs valeurs de k # et evaluation de la solution k = [] durations = [] silouettes = [] for i in range(2, k_max): # Application du clustering agglomeratif (model, duration) = apply_agglomerative_clustering( data_scaled, k=i, linkage=linkage) # Affichage des clusters print_2d_data(data_scaled, dataset_name=dataset_name, method_name="agglomerative_" + linkage, k=i, stop=False, save=save, c=model.labels_) # Evaluation de la solution de clustering silouette = evaluate_agglomerative_clustering(data_scaled, model) # Enregistrement des valeurs k += [i] durations += [duration] silouettes += [silouette] # Affichage des résultats print_1d_data(k, k, x_name="k", y_name="k", dataset_name=dataset_name, method_name="agglomerative_" + linkage, stop=False, save=save) print_1d_data(k, durations, x_name="k", y_name="temps_de_calcul", y_unit="ms", dataset_name=dataset_name, method_name="agglomerative_" + linkage, stop=False, save=save) print_1d_data(k, silouettes, x_name="k", y_name="coeficient_de_silhouette", dataset_name=dataset_name, method_name="agglomerative_" + linkage, stop=False, save=save)