From d6eb78a905090a230db084f31cf4e6ce64066aac Mon Sep 17 00:00:00 2001 From: DIANE <abderrahim.diane@cefe.cnrs.fr> Date: Mon, 29 Apr 2024 13:57:26 +0200 Subject: [PATCH] AFFINITY PROPAGATION --- src/Class_Mod/Ap.py | 16 ++++++++++++++++ src/Class_Mod/__init__.py | 3 ++- src/Modules.py | 2 +- src/Packages.py | 3 +-- src/pages/1-samples_selection.py | 5 +++++ 5 files changed, 25 insertions(+), 4 deletions(-) create mode 100644 src/Class_Mod/Ap.py diff --git a/src/Class_Mod/Ap.py b/src/Class_Mod/Ap.py new file mode 100644 index 0000000..2084d25 --- /dev/null +++ b/src/Class_Mod/Ap.py @@ -0,0 +1,16 @@ +from Packages import * + +class AP: + def __init__(self, X): + ## input matrix + self.__x = np.array(X) + + # Fit PCA model + self.M = AffinityPropagation(damping=0.5, max_iter=200, convergence_iter=15, copy=True, preference=None, + affinity='euclidean', verbose=False, random_state=None) + self.M.fit(self.__x) + self.yp = self.M.predict(self.__x)+1 + @property + def fit_optimal_(self): + clu = [f'cluster#{i}' for i in self.yp] + return self.__x, clu, self.M.cluster_centers_ \ No newline at end of file diff --git a/src/Class_Mod/__init__.py b/src/Class_Mod/__init__.py index 7c978ea..540a093 100644 --- a/src/Class_Mod/__init__.py +++ b/src/Class_Mod/__init__.py @@ -13,4 +13,5 @@ from .DxReader import DxRead, read_dx from .HDBSCAN_Clustering import Hdbscan from .SK_PLSR_ import PlsR from .PLSR_Preprocess import PlsProcess -from .NMF_ import Nmf \ No newline at end of file +from .NMF_ import Nmf +from .Ap import AP \ No newline at end of file diff --git a/src/Modules.py b/src/Modules.py index 436e30d..6ac6f12 100644 --- a/src/Modules.py +++ b/src/Modules.py @@ -1,5 +1,5 @@ from Packages import * -from Class_Mod import PlsR, LinearPCA, Umap, find_col_index, PinardPlsr, Nmf +from Class_Mod import PlsR, LinearPCA, Umap, find_col_index, PinardPlsr, Nmf, AP from Class_Mod import LWPLSR, list_files, metrics, TpeIpls, reg_plot, resid_plot, Sk_Kmeans, DxRead, Hdbscan, read_dx, PlsProcess from Class_Mod.DATA_HANDLING import * from Class_Mod.Miscellaneous import prediction, download_results, plot_spectra, local_css diff --git a/src/Packages.py b/src/Packages.py index fd98471..1313851 100644 --- a/src/Packages.py +++ b/src/Packages.py @@ -19,7 +19,7 @@ from umap.umap_ import UMAP from sklearn.decomposition import PCA, NMF # Clustering -from sklearn.cluster import KMeans, HDBSCAN +from sklearn.cluster import KMeans, HDBSCAN,AffinityPropagation from scipy.spatial.distance import euclidean, cdist from scipy.sparse.csgraph import minimum_spanning_tree from scipy.sparse import csgraph @@ -36,7 +36,6 @@ from sklearn.pipeline import Pipeline, FeatureUnion from sklearn.compose import TransformedTargetRegressor from sklearn.metrics import mean_absolute_error, mean_squared_error, mean_absolute_percentage_error, r2_score from sklearn.cross_decomposition import PLSRegression - ## Images and plots from PIL import Image import plotly.express as px diff --git a/src/pages/1-samples_selection.py b/src/pages/1-samples_selection.py index 77a8863..de03b98 100644 --- a/src/pages/1-samples_selection.py +++ b/src/pages/1-samples_selection.py @@ -157,6 +157,11 @@ if not t.empty: non_clustered = np.where(labels == -1) labels[non_clustered] = 1000 labels = labels.tolist() + + elif clus_method == cluster_methods[3]: + cl_model = AP(X=tcr) + data, labels, clu_centers = cl_model.fit_optimal_ + ###### 3- Samples selection using the reduced data preentation ###### selec_strategy = ['center','random'] -- GitLab