96 lines
3.5 KiB
Python
96 lines
3.5 KiB
Python
# -*- 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,
|
|
apply_agglomerative_clustering, evaluate)
|
|
|
|
|
|
##################################################################
|
|
# 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 = []
|
|
daviess = []
|
|
calinskis = []
|
|
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, davies, calinski) = evaluate(data_scaled, model)
|
|
# Enregistrement des valeurs
|
|
k += [i]
|
|
durations += [duration]
|
|
silouettes += [silouette]
|
|
daviess += [davies]
|
|
calinskis += [calinski]
|
|
|
|
# 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)
|
|
print_1d_data(k, daviess, x_name="k", y_name="coeficient_de_Davies",
|
|
dataset_name=dataset_name,
|
|
method_name="agglomerative_" + linkage, stop=False, save=save)
|
|
print_1d_data(k, calinskis, x_name="k", y_name="coeficient_de_Calinski",
|
|
dataset_name=dataset_name,
|
|
method_name="agglomerative_" + linkage, stop=False, save=save)
|