From bef24bd47c44243c5e436638b0f571cd1383980d Mon Sep 17 00:00:00 2001 From: dmt <> Date: Sun, 20 Oct 2019 23:08:36 +0200 Subject: [PATCH] Construct only unlabeled learnblocks. --- cml/domain/construction.py | 57 ++++++++++++++++++++++---------------- 1 file changed, 33 insertions(+), 24 deletions(-) diff --git a/cml/domain/construction.py b/cml/domain/construction.py index cddc6d0..0317d64 100644 --- a/cml/domain/construction.py +++ b/cml/domain/construction.py @@ -42,6 +42,7 @@ class Constructor: self.ml_models = ml_models self._logging_dir = None self._construction = None + self._category = None @log_construction def construct(self, learnblock): @@ -86,10 +87,10 @@ class Constructor: @property def construction_type(self): - return self.settings.construct_type + return self._category @construction_type.setter - def construction_type(self, construct_type): + def construction_type(self, construction_type): if self.settings.construct_type == "conceptual": self._construction = partial( self._construct_conceptual_knowledge, @@ -108,34 +109,42 @@ class Constructor: # TODO (dmt): Provide proper exception handling. raise Exception("Provide valid construction type.") + self._category = construction_type + def _construct_conceptual_knowledge(self, learnblock, categorial_complexity=None, min_category_size=None): - for ml_model in self.ml_models: - for cluster_number in range(2, categorial_complexity+1): - ml_model.cluster = cluster_number - trained_model = ml_model.train(learnblock) - for cluster, size in trained_model.cluster_sizes.items(): - if size < min_category_size: - continue - labels = trained_model.get_labels() - labeled_learnblock = learnblock.set_labels(labels) - labeled_learnblock.n_cluster = cluster_number - yield labeled_learnblock + if learnblock.labeled: + yield learnblock + else: + for ml_model in self.ml_models: + for cluster_number in range(2, categorial_complexity+1): + ml_model.cluster = cluster_number + trained_model = ml_model.train(learnblock) + for cluster, size in trained_model.cluster_sizes.items(): + if size < min_category_size: + continue + labels = trained_model.get_labels() + labeled_learnblock = learnblock.set_labels(labels) + labeled_learnblock.n_cluster = cluster_number + yield labeled_learnblock def _construct_procedural_knowledge(self, learnblock, procedural_complexity=None, max_target_error=None): - for ml_model in self.ml_models: - for target_number in range(2, procedural_complexity+1): - model = ml_model() - model.io_shape = learnblock.learn_rows - model.target_number = target_number - trained_model = model.train(learnblock.as_numpy_array()) - if trained_model.target_error < max_target_error: - for labels in trained_model.targets: - labeled_learnblock = learnblock.set_labels(list(labels)) - labeled_learnblock.n_cluster = target_number - yield labeled_learnblock + if learnblock.labeled: + yield learnblock + else: + for ml_model in self.ml_models: + for target_number in range(2, procedural_complexity+1): + model = ml_model() + model.io_shape = learnblock.learn_rows + model.target_number = target_number + trained_model = model.train(learnblock.as_numpy_array()) + if trained_model.target_error < max_target_error: + for labels in trained_model.targets: + labeled_learnblock = learnblock.set_labels(list(labels)) + labeled_learnblock.n_cluster = target_number + yield labeled_learnblock -- GitLab