on analyse
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

tp2-agglo.py 3.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. # -*- coding: utf-8 -*-
  2. """
  3. Created on Sat Nov 20 21:28:40 2021
  4. @author: huguet
  5. """
  6. from myplotlib import print_1d_data, print_2d_data, print_dendrogramme
  7. from mydatalib import (extract_data_2d, scale_data,
  8. apply_agglomerative_clustering, evaluate)
  9. ##################################################################
  10. # READ a data set (arff format)
  11. # Parser un fichier de données au format arff
  12. # datanp est un tableau (numpy) d'exemples avec pour chacun la liste
  13. # des valeurs des features
  14. # Note 1 :
  15. # dans les jeux de données considérés : 2 features (dimension 2 seulement)
  16. # t =np.array([[1,2], [3,4], [5,6], [7,8]])
  17. #
  18. # Note 2 :
  19. # le jeu de données contient aussi un numéro de cluster pour chaque point
  20. # --> IGNORER CETTE INFORMATION ....
  21. # 2d-4c-no9.arff xclara.arff
  22. path = './artificial/'
  23. dataset_name = "xclara"
  24. save = True
  25. # Types de linkage : single, average, complete, ward linkage
  26. linkage = "complete"
  27. print("-----------------------------------------------------------")
  28. print(" Chargement du dataset : " + dataset_name)
  29. data = extract_data_2d(path + dataset_name)
  30. print_2d_data(data, dataset_name=dataset_name +
  31. "_brutes", stop=False, save=save)
  32. print("-----------------------------------------------------------")
  33. print(" Mise à l'échelle")
  34. data_scaled = scale_data(data)
  35. print_2d_data(data_scaled, dataset_name=dataset_name +
  36. "_scaled", stop=False, save=save)
  37. print("-----------------------------------------------------------")
  38. print(" Création du dendrogramme : linkage " + linkage)
  39. print_dendrogramme(data_scaled, dataset_name=dataset_name,
  40. linkage=linkage, stop=False)
  41. k_max = 20
  42. print("-----------------------------------------------------------")
  43. print(" Création clusters : linkage " +
  44. linkage + ", k=(0 to " + str(k_max) + ")")
  45. # Application du clustering agglomeratif pour plusieurs valeurs de k
  46. # et evaluation de la solution
  47. k = []
  48. durations = []
  49. silouettes = []
  50. daviess = []
  51. calinskis = []
  52. for i in range(2, k_max):
  53. # Application du clustering agglomeratif
  54. (model, duration) = apply_agglomerative_clustering(
  55. data_scaled, k=i, linkage=linkage)
  56. # Affichage des clusters
  57. print_2d_data(data_scaled, dataset_name=dataset_name,
  58. method_name="agglomerative_" + linkage, k=i,
  59. stop=False, save=save, c=model.labels_)
  60. # Evaluation de la solution de clustering
  61. (silouette, davies, calinski) = evaluate(data_scaled, model)
  62. # Enregistrement des valeurs
  63. k += [i]
  64. durations += [duration]
  65. silouettes += [silouette]
  66. daviess += [davies]
  67. calinskis += [calinski]
  68. # Affichage des résultats
  69. print_1d_data(k, k, x_name="k", y_name="k", dataset_name=dataset_name,
  70. method_name="agglomerative_" + linkage, stop=False, save=save)
  71. print_1d_data(k, durations, x_name="k", y_name="temps_de_calcul", y_unit="ms",
  72. dataset_name=dataset_name,
  73. method_name="agglomerative_" + linkage, stop=False, save=save)
  74. print_1d_data(k, silouettes, x_name="k", y_name="coeficient_de_silhouette",
  75. dataset_name=dataset_name,
  76. method_name="agglomerative_" + linkage, stop=False, save=save)
  77. print_1d_data(k, daviess, x_name="k", y_name="coeficient_de_Davies",
  78. dataset_name=dataset_name,
  79. method_name="agglomerative_" + linkage, stop=False, save=save)
  80. print_1d_data(k, calinskis, x_name="k", y_name="coeficient_de_Calinski",
  81. dataset_name=dataset_name,
  82. method_name="agglomerative_" + linkage, stop=False, save=save)