X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=epclust%2FR%2Fclustering.R;h=886bfbcca2fbd1b52239c2403e3c521d0c2c7f18;hb=e0154a59e55143dac0fbd2a4739a3509bc958e76;hp=a8f1d3e705a42bbe5fdee78ff2820e118f68d7ab;hpb=282342bafdc9ff65c5df98c6e2304d63b33b9fb2;p=epclust.git diff --git a/epclust/R/clustering.R b/epclust/R/clustering.R index a8f1d3e..886bfbc 100644 --- a/epclust/R/clustering.R +++ b/epclust/R/clustering.R @@ -1,14 +1,14 @@ #' Two-stage clustering, within one task (see \code{claws()}) #' #' \code{clusteringTask1()} runs one full stage-1 task, which consists in iterated -#' stage 1 clustering on nb_curves / ntasks energy contributions, computed through +#' clustering on nb_curves / ntasks energy contributions, computed through #' discrete wavelets coefficients. #' \code{clusteringTask2()} runs a full stage-2 task, which consists in WER distances #' computations between medoids (indices) output from stage 1, before applying #' the second clustering algorithm on the distances matrix. #' #' @param getContribs Function to retrieve contributions from initial series indices: -#' \code{getContribs(indices)} outputs a contributions matrix +#' \code{getContribs(indices)} outputs a contributions matrix, in columns #' @inheritParams claws #' @inheritParams computeSynchrones #' @inheritParams computeWerDists @@ -23,12 +23,22 @@ NULL #' @rdname clustering #' @export clusteringTask1 <- function(indices, getContribs, K1, algoClust1, nb_items_clust, - ncores_clust=1, verbose=FALSE, parll=TRUE) + ncores_clust=3, verbose=FALSE, parll=TRUE) { + if (verbose) + cat(paste("*** Clustering task 1 on ",length(indices)," series [start]\n", sep="")) + + if (length(indices) <= K1) + return (indices) + if (parll) { # outfile=="" to see stderr/stdout on terminal - cl <- parallel::makeCluster(ncores_clust, outfile = "") + cl <- + if (verbose) + parallel::makeCluster(ncores_clust, outfile = "") + else + parallel::makeCluster(ncores_clust) parallel::clusterExport(cl, c("getContribs","K1","verbose"), envir=environment()) } # Iterate clustering algorithm 1 until K1 medoids are found @@ -36,8 +46,6 @@ clusteringTask1 <- function(indices, getContribs, K1, algoClust1, nb_items_clust { # Balance tasks by splitting the indices set - as evenly as possible indices_workers <- .splitIndices(indices, nb_items_clust, min_size=K1+1) - if (verbose) - cat(paste("*** [iterated] Clustering task 1 on ",length(indices)," series\n", sep="")) indices <- if (parll) { @@ -52,6 +60,10 @@ clusteringTask1 <- function(indices, getContribs, K1, algoClust1, nb_items_clust inds[ algoClust1(getContribs(inds), K1) ] ) ) } + if (verbose) + { + cat(paste("*** Clustering task 1 on ",length(indices)," medoids [iter]\n", sep="")) + } } if (parll) parallel::stopCluster(cl) @@ -62,7 +74,7 @@ clusteringTask1 <- function(indices, getContribs, K1, algoClust1, nb_items_clust #' @rdname clustering #' @export clusteringTask2 <- function(indices, getSeries, K2, algoClust2, nb_series_per_chunk, - smooth_lvl, nvoice, nbytes, endian, ncores_clust=1, verbose=FALSE, parll=TRUE) + smooth_lvl, nvoice, nbytes, endian, ncores_clust=3, verbose=FALSE, parll=TRUE) { if (verbose) cat(paste("*** Clustering task 2 on ",length(indices)," medoids\n", sep=""))