From 9838ad8f2181e1ba1cb4be44ec635d21d7968a8d Mon Sep 17 00:00:00 2001 From: Francois Vieille Date: Sun, 31 Mar 2019 18:05:09 +0200 Subject: [PATCH] etapes du clustering simple : PCA + Kmeans + CAH --- iss/clustering/.gitkeep | 0 iss/clustering/AbstractClustering.py | 12 ++++++ iss/clustering/ClassicalClustering.py | 58 +++++++++++++++++++++++++++ iss/clustering/__init__.py | 1 + 4 files changed, 71 insertions(+) create mode 100644 iss/clustering/.gitkeep create mode 100644 iss/clustering/AbstractClustering.py create mode 100644 iss/clustering/ClassicalClustering.py create mode 100644 iss/clustering/__init__.py diff --git a/iss/clustering/.gitkeep b/iss/clustering/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/iss/clustering/AbstractClustering.py b/iss/clustering/AbstractClustering.py new file mode 100644 index 0000000..6906082 --- /dev/null +++ b/iss/clustering/AbstractClustering.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- + +class AbstractClustering: + + def __init__(config, pictures_id, pictures_np): + + self.config = config + self.pictures_id = pictures_id + self.pictures_np = pictures_np + + + \ No newline at end of file diff --git a/iss/clustering/ClassicalClustering.py b/iss/clustering/ClassicalClustering.py new file mode 100644 index 0000000..1e62ce3 --- /dev/null +++ b/iss/clustering/ClassicalClustering.py @@ -0,0 +1,58 @@ +from iss.clustering import AbstractClustering +from sklearn.decomposition import PCA +from sklearn.cluster import KMeans +from sklearn.cluster import AgglomerativeClustering + +class ClassicalClustering(AbstractClustering): + + def __init__(config, pictures_id, pictures_np): + + self.pca_fit = None + self.pca_args = self.config['PCA'] + self.pca_reduction = None + + self.kmeans_fit = None + self.kmeans_args = self.config['kmeans'] + self.kmeans_labels = None + self.kmeans_centers = [] + + self.cah_fit = None + self.cah_args = self.config['CAH'] + self.cah_labels = None + + self.final_labels = None + + super().__init__(config, pictures_id, pictures_np) + + + def pca_fit(self): + + self.pca_fit = PCA(**self.pca_args**) + self.pca_fit.fit(self.pictures_np) + self.pca_reduction = self.pca_fit.transform(self.pictures_np) + + return self + + def kmeans_fit(self): + self.kmeans_fit = KMeans(self.kmeans_args**) + self.kmeans_fit.fit(self.pca_reduction) + self.kmeans_labels = self.kmeans_fit.labels_ + return self + + def compute_kmeans_centers(self): + for cl in range(self.kmeans_args['n_clusters']): + tmp = self.[np.where(self.kmeans_labels == cl)] + self.kmeans_centers.append(np.mean(tmp, axis = 0)) + return self + + def cah_fit(self): + + self.cah_fit = AgglomerativeClustering(self.cah_args**) + self.cah_fit.fit_predict(self.kmeans_centers) + self.cah_labels = self.cah_fit.labels_ + return self + + def compute_cah_labels(self): + self.final_labels = [self.cah_labels[old_cl] for old_cl in self.kmeans_labels] + + diff --git a/iss/clustering/__init__.py b/iss/clustering/__init__.py new file mode 100644 index 0000000..6f511a1 --- /dev/null +++ b/iss/clustering/__init__.py @@ -0,0 +1 @@ +from .AbstractClustering import AbstractClustering \ No newline at end of file