Académique Documents
Professionnel Documents
Culture Documents
1)
In [2]: def k_means(X, n_clusters, max_iters=1000):
# Initialisation aléatoire des centres des clusters
centers = X[np.random.choice(range(len(X)), n_clusters, replace=False)]
for _ in range(max_iters):
# Attribution des points aux clusters les plus proches
labels = np.argmin(np.linalg.norm(X[:, np.newaxis] - centers, axis=2), axis=1)
# Vérification de la convergence
if np.all(centers == new_centers):
break
centers = new_centers
iris = load_iris()
X_iris = iris.data
plt.show()
2)Expérimenter l’instabilité due à l’initialisation : les centres des clusters étant choisis au
hasardlors de l’initialisation, le résultat obtenu peut varier d’une exécution à l’autre.
Vérifiez que c’est le cas
In [7]: def k_means(data, n_clusters, max_iters=100, random_seed=None):
if random_seed is not None:
np.random.seed(random_seed)
for _ in range(max_iters):
# Attribution des points aux clusters les plus proches
labels = np.argmin(np.linalg.norm(data[:, np.newaxis] - centers, axis=2), axis=1)
# Vérification de la convergence
if np.all(centers == new_centers):
break
centers = new_centers
# Visualisation en 2D
plt.figure(figsize=(8, 5))
plt.scatter(X_iris[:, 0], X_iris[:, 1], c=labels, cmap='viridis', edgecolor='k')
plt.scatter(centers[:, 0], centers[:, 1], c='red', marker='X', s=200, label='Centers')
plt.title(f"Clustering avec initialisation aléatoire {i}")
plt.xlabel("Feature 1")
plt.ylabel("Feature 2")
plt.legend()
plt.show()
j'ai exécuté l'algorithme K-Means trois fois avec différentes initialisations, en contrôlant cela à l'aide de la graine aléatoire (random_seed). Vous devriez observer des variations dans la
position des centres des clusters et, par conséquent, dans les résultats du clustering à chaque exécution. Cela illustre l'instabilité due à l'initialisation.
for k in k_range:
# Effectuer K-Means plusieurs fois pour chaque k
for _ in range(num_iterations):
kmeans = KMeans(n_clusters=k)
labels = kmeans.fit_predict(data)
score = silhouette_score(data, labels)
# Appliquer l'ACP
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X_iris)
plt.subplot(1, 2, 1)
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=best_labels, cmap='viridis', edgecolor='k')
plt.scatter(pca.transform(best_centers)[:, 0], pca.transform(best_centers)[:, 1],
c='red', marker='X', s=200, label='Centers')
plt.title(f"Résultats de l'ACP avec K-Moyennes (k={best_k})")
plt.xlabel("Principal Component 1")
plt.ylabel("Principal Component 2")
plt.legend()
# Appliquer l'ADL
lda = LinearDiscriminantAnalysis(n_components=min(X_iris.shape[1], len(np.unique(best_labels)) - 1))
X_lda = lda.fit_transform(X_iris, best_labels)
1)
In [76]: from google.colab import drive
drive.mount('/content/drive')
Drive already mounted at /content/drive; to attempt to forcibly remount, call drive.mount("/content/drive", force_remount=True).
# Spécifiez le chemin
chemin_fichier_csv = '/content/drive/MyDrive/WISD/S3/SDN/choixprojetstab.csv'
# Initialisez des listes vides pour les codes d'étudiants et la matrice de données
codes_etudiants = []
matrice_donnees = []
if i != 0:
# Extrait les données (à l'exclusion de la première colonne) et convertit en valeurs numériques
# ligne_donnees = np.array([mapping_mention[mention] for mention in ligne[1:]], dtype=int)
ligne_donnees = ligne[1:] # Les données commencent à la deuxième colonne
matrice_donnees.append(ligne_donnees)
X = np.array(matrice_donnees,dtype=int)
Codes d'étudiants : ['bl/.vSDYCGrSs', 'bl/1NiMubceBs', 'bl/dvgMTLVSvk', 'bl1NWhKcNADF2', 'bl1ao5B7htJfQ', 'bl1u./AF8TEp6', 'bl2LwDaKpKT/c', 'bl2jhb
3v2qUhc', 'bl2rqWgKava4o', 'bl4wbw9k3zw/c', 'bl5.Z2M26c/5o', 'bl5/1tjKhKrAE', 'bl55W0uSMrpz6', 'bl65TErI.VjAA', 'bl9BdxOPgV0XU', 'bl9HR9LuSmrMo',
'blA5K4GlKIEN2', 'blB6OJg1ilNV2', 'blC888Fel.osw', 'blDPCjzWCczr6', 'blFD1aQDfmpH.', 'blFq6YzuUpuG6', 'blGDihFnA6.LE', 'blHIVuF4ftibA', 'blHxzJKy1k
WeU', 'blIf9FrZBwJyk', 'blK.9jBCD/SSw', 'blKXgoRO0CXOE', 'blKsQZNr3tnvw', 'blMKFlGVYbnSA', 'blNDVy9IQ.pyc', 'blQdUJch/nfDg', 'blSI8b6JyYqHY', 'blUi
qJyD6t5eo', 'blXfmkaW817T6', 'blXtkgxAdNzb.', 'blYb2ABO7EU.M', 'blZxs/nnNLCos', 'blZzwRPNDZpRY', 'blaADEMnN043A', 'blaIQ61DLW6uc', 'blbKjW2k4.8xo',
'blbfVllTjpkQY', 'blbkl9iy6NSzQ', 'blddve1gjnw96', 'blfIGd5mN48z2', 'blg1OtiwNMDAs', 'blg8PMUnKJxes', 'blginkLBh0Sf.', 'blh9lEioXhmgc', 'blhai4aeyq
8rU', 'blhnNMwGPnuNc', 'bliYbAmgGkzSI', 'bljdvFfVzFYBk', 'bllOE3T7MU9nE', 'blleUFdn4IybY', 'blmLNmnzoOUT6', 'bln85uWpKDNjM', 'blnahdfBfYOd.', 'blpJ
fyKbetUsc', 'blpPNI0oxLIG.', 'bltZdophgVNQ2', 'bltppVKeGreVc', 'bltsUkerTn/gA', 'bluruT/sOvVm6', 'bluwV0aELRqFQ', 'blvqKhCDhQab.', 'blwyn40XjgvEs',
'bly3Oqsvf6WlU', 'bly69tf4z1FiM', 'blzon470EHguA']
Matrice de données :
[[1 1 1 ... 1 1 1]
[0 0 0 ... 1 0 0]
[1 1 1 ... 1 1 1]
...
[1 1 1 ... 1 0 2]
[1 1 0 ... 1 1 1]
[1 1 1 ... 0 1 1]]
2)
In [78]: from sklearn.cluster import KMeans, AgglomerativeClustering, DBSCAN, Birch, SpectralClustering
meilleur_algorithme = None
meilleur_silhouette = -1
/usr/local/lib/python3.10/dist-packages/sklearn/cluster/_kmeans.py:870: FutureWarning: The default value of `n_init` will change from 10 to 'auto'
in 1.4. Set the value of `n_init` explicitly to suppress the warning
warnings.warn(
/usr/local/lib/python3.10/dist-packages/sklearn/manifold/_spectral_embedding.py:393: UserWarning: Exited at iteration 2000 with accuracies
[8.04956583e-11 1.45016845e-07 4.45135236e-08 4.54366600e-07
1.26516492e-05]
not reaching the requested tolerance 1.043081283569336e-06.
Use iteration 1628 instead with accuracy
1.6937239268132293e-06.
_, diffusion_map = lobpcg(
/usr/local/lib/python3.10/dist-packages/sklearn/manifold/_spectral_embedding.py:393: UserWarning: Exited postprocessing with accuracies
[1.99731453e-12 1.51544435e-07 4.46095104e-08 4.58512629e-07
7.81185669e-06]
not reaching the requested tolerance 1.043081283569336e-06.
_, diffusion_map = lobpcg(