Source code for mrftools.ApproxMaxLikelihood

"""Class to do generative learning directly on MRF parameters."""
from copy import deepcopy

from .Learner import Learner
from .LogLinearModel import LogLinearModel
from .MatrixBeliefPropagator import MatrixBeliefPropagator


[docs]class ApproxMaxLikelihood(Learner): """ Object that runs approximate maximum likelihood parameter training. This method creates an indicator model where every feature is an indicator function, also known as an overcomplete representation. """ def __init__(self, markov_net, inference_type=MatrixBeliefPropagator): """ Initialize the learner with the Markov network whose parameters are to be learned. :param markov_net: MarkovNet object whose parameters are to be learned :type markov_net: MarkovNet :param inference_type: Inference method to use for estimating the feature expectations during learning :type inference_type: Inference """ super(ApproxMaxLikelihood, self).__init__(inference_type) self.base_model = LogLinearModel() self.base_model.create_indicator_model(markov_net)
[docs] def add_data(self, labels): """ Add observed training data :param labels: dictionary containing an integer state value for each observed variable :type labels: dict :return: None """ model = deepcopy(self.base_model) super(ApproxMaxLikelihood, self).add_data(labels, model) # as a hack to save time, since these models don't condition on anything, make all belief propagators equal self.belief_propagators = [self.belief_propagators[0]]