diff --git a/cml/domain/reconstruction.py b/cml/domain/reconstruction.py index 830aab67904a519c68edeb2cb8400cc8cf03083d..fef8f6e03cf076a063176a2b01142a4f3eb56674 100644 --- a/cml/domain/reconstruction.py +++ b/cml/domain/reconstruction.py @@ -95,10 +95,16 @@ class Reconstructor: self.ml_models = ml_models self.knowledge_domain = knowlege_domain self._category = None + self._free_id = None self.__reconstruction = None - def reconstruct(self, learnblock): - reliabilities_to_model = self.__reconstruction(learnblock) + def reconstruct(self, learnblock, which_models=None, meta=None): + if not which_models: + which_models = [m.abbreviation for m in self.ml_models] + + reliabilities_to_model = self.__reconstruction(learnblock, + which_models, + meta) if reliabilities_to_model.keys(): return determine_winner(reliabilities_to_model) raise NoModelReconstructedError() @@ -118,9 +124,22 @@ class Reconstructor: else: raise ValueError() - def _reconstruct_conceptual(self, learnblock, krippen=None): + @property + def free_id(self): + return self._free_id + + @free_id.setter + def free_id(self, value): + self._free_id = iter(value) + + def _reconstruct_conceptual(self, + learnblock, + which_models, + krippen=None, + meta=None): reliability_to_model = defaultdict(list) for model in self.ml_models: + if model.abbreviation not in which_models: continue # train model train_block, eval_block = self.split(learnblock) @@ -134,12 +153,25 @@ class Reconstructor: learnblock, krippen) if reliability >= self.settings.min_reliability: + # TODO (dmt): Fix the knowledge tier after first iteration! + prag_meta_data = Metadata( + "C", + 1, + next(self.free_id), + learnblock.indexes, + learnblock.min_timestamp, + learnblock.max_timestamp, + [model.subject], + [".".join(["C", '1', learnblock.purpose])] + ) + reliability_to_model[reliability].append( - PragmaticMachineLearningModel(trained_model, + PragmaticMachineLearningModel(prag_meta_data, + trained_model, learnblock)) return reliability_to_model - def _reconstruct_procedural(self, learnblock, krippen=None): + def _reconstruct_procedural(self, learnblock, krippen=None, meta=None): reliability_to_model = defaultdict(list) for model in self.ml_models: