示例#1
0
    def registerModelData(self, train_ret, test_ret, lowest_error_epoch=False):
        """
        This method updates stats about the model, it's called on each epoch

        Stores:
            - loss
            - error
            - confusion matrices

        :param train_ret    The result of training a batch
        :param test_ret     The result of testing after an epoch
        :param lowest_error_epoch   Is this epoch the one with the lowest error so far
        """

        # Operations that happen regardless of it being or not a lowest error epoch or not

        self.ml_model_info.loss_y += [train_ret.loss]
        self.ml_model_info.loss_x += [train_ret.epoch]
        self.ml_model_info.error_y += [test_ret.error]
        self.ml_model_info.error_x += [train_ret.epoch]

        if lowest_error_epoch == True:

            # denorm the real and predicted
            predicted_targets = {}
            real_targets = {}
            for col in test_ret.predicted_targets:
                predicted_targets[col] = [
                    denorm(row,
                           self.persistent_model_metadata.column_stats[col])
                    for row in test_ret.predicted_targets[col]
                ]
                real_targets[col] = [
                    denorm(row,
                           self.persistent_model_metadata.column_stats[col])
                    for row in test_ret.real_targets[col]
                ]

            self.ml_model_info.confussion_matrices = self.calculateConfusionMatrices(
                real_targets, predicted_targets)
            self.ml_model_info.lowest_error = test_ret.error
            self.ml_model_info.predicted_targets = predicted_targets
            self.ml_model_info.real_targets = real_targets
            self.ml_model_info.accuracy = test_ret.accuracy
            self.ml_model_info.r_squared = test_ret.accuracy

        self.ml_model_info.update()

        return True
示例#2
0
    def predict(self, data=None):
        """
        This actually calls the model and returns the predictions in diff form

        :return: diffs, which is a list of dictionaries with pointers as to where to replace the prediction given the value that was predicted

        """

        if data != None:
            self._loadData(data)

        self.predict_sampler.variable_wrapper = self.ml_model_class.variable_wrapper
        self.predict_sampler.variable_unwrapper = self.ml_model_class.variable_unwrapper

        ret_diffs = []
        for batch in self.predict_sampler:

            logging.info('predicting batch...')
            if self.data_model_object.use_full_text_input:
                ret = self.data_model_object.forward(
                    batch.getInput(flatten=self.data_model_object.flatInput),
                    full_text_input=batch.getFullTextInput())
            else:
                ret = self.data_model_object.forward(
                    batch.getInput(flatten=self.data_model_object.flatInput))
            if type(ret) != type({}):
                ret_dict = batch.deflatTarget(ret)
            else:
                ret_dict = ret

            ret_dict_denorm = {}

            for col in ret_dict:
                ret_dict[col] = self.ml_model_class.variable_unwrapper(
                    ret_dict[col])
                for row in ret_dict[col]:
                    if col not in ret_dict_denorm:
                        ret_dict_denorm[col] = []

                    ret_dict_denorm[col] += [
                        denorm(
                            row,
                            self.persistent_model_metadata.column_stats[col])
                    ]

            ret_total_item = {
                'group_pointer': batch.group_pointer,
                'column_pointer': batch.column_pointer,
                'start_pointer': batch.start_pointer,
                'end_pointer': batch.end_pointer,
                'ret_dict': ret_dict_denorm
            }
            ret_diffs += [ret_total_item]

        return ret_diffs
示例#3
0
    def run(self):

        result = []

        #NOTE: we only use this model in PREDICT

        for group in self.transaction.model_data.predict_set:
            for column in self.transaction.model_data.predict_set[group]:
                column_results = []
                for value in self.transaction.model_data.predict_set[group][column]:
                    stats = self.transaction.model_stats[column]
                    denormed = denorm(value=value, cell_stats=stats)
                    column_results.append(denormed)
                result.append(column_results)

        # Why transponse?
        #result = numpy.transpose(result)
        #result = result.tolist()


        return result