def train(self): ''' Estimate model parameters from data. ''' self.model.init_training() # Initialize frequency accumulators transmission_acc = numpy.zeros((self.num_states, self.num_states)) emission_acc = numpy.zeros(self.num_states * self.num_features * self.num_plif_nodes) # Go through training data, counting state transitions and feature emissions assert (self.model.get_labels().get_num_labels() == self.model.get_features().get_num_vectors()) for i in xrange(self.model.get_labels().get_num_labels()): # Update transmission and emission counts internally in the model self.model.get_joint_feature_vector(i, i) # Update accumulators transmission_acc += self.model.get_transmission_weights() emission_acc += self.model.get_emission_weights() # Compute model parameters from the accumulators state_model = TwoStateModel() w = state_model.weights_to_vector(transmission_acc, emission_acc, self.num_features, self.num_plif_nodes) ## print w ## print '# transmission & emission weights = ', ## numpy.prod(transmission_acc.shape)+emission_acc.shape[0] ## print '# params = ', num_free_states*(num_free_states + num_features*num_plif_nodes) # Smooth counts equal to zero to avoid zero-division warnings w[w == 0.0] = 1e-100 # Compute transition scores as transition frequencies, i.e. estimate # probabilities using the ML rule self.transition_scores[0] = numpy.log(w[0] / w[0:2].sum()) self.transition_scores[1] = numpy.log(w[1] / w[0:2].sum()) self.transition_scores[2] = numpy.log(w[2] / w[2:4].sum()) self.transition_scores[3] = numpy.log(w[3] / w[2:4].sum()) # Compute emission or feature scores as frequencies of occurrence # Offset given by the number of transition_scores, used to index w offset = self.transition_scores.shape[0] self.feature_scores = numpy.zeros( (self.num_features, self.num_free_states, self.num_plif_nodes)) for s in xrange(self.num_free_states): state_idx = s * self.num_features * self.num_plif_nodes for f in xrange(self.num_features): feat_idx = f * self.num_plif_nodes idx = offset + state_idx + feat_idx self.feature_scores[f, s, :] = numpy.log( w[idx:idx + self.num_plif_nodes] / w[idx:idx + self.num_plif_nodes].sum())
def structure_plif_hmsvm_bmrm (num_examples, example_length, num_features, num_noise_features): from modshogun import RealMatrixFeatures, TwoStateModel, DualLibQPBMSOSVM, StructuredAccuracy model = TwoStateModel.simulate_data(num_examples, example_length, num_features, num_noise_features) sosvm = DualLibQPBMSOSVM(model, model.get_labels(), 5000.0) sosvm.train() #print sosvm.get_w() predicted = sosvm.apply(model.get_features()) evaluator = StructuredAccuracy() acc = evaluator.evaluate(predicted, model.get_labels())
def structure_plif_hmsvm_mosek (num_examples, example_length, num_features, num_noise_features): from modshogun import RealMatrixFeatures, TwoStateModel, StructuredAccuracy try: from modshogun import PrimalMosekSOSVM except ImportError: print("Mosek not available") return model = TwoStateModel.simulate_data(num_examples, example_length, num_features, num_noise_features) sosvm = PrimalMosekSOSVM(model, model.get_labels()) sosvm.train() #print(sosvm.get_w()) predicted = sosvm.apply(model.get_features()) evaluator = StructuredAccuracy() acc = evaluator.evaluate(predicted, model.get_labels())
def structure_plif_hmsvm_bmrm (num_examples, example_length, num_features, num_noise_features): from modshogun import RealMatrixFeatures, TwoStateModel, StructuredAccuracy try: from modshogun import DualLibQPBMSOSVM except ImportError: print("DualLibQPBMSOSVM not available") exit(0) model = TwoStateModel.simulate_data(num_examples, example_length, num_features, num_noise_features) sosvm = DualLibQPBMSOSVM(model, model.get_labels(), 5000.0) sosvm.set_store_train_info(False) sosvm.train() #print sosvm.get_w() predicted = sosvm.apply(model.get_features()) evaluator = StructuredAccuracy() acc = evaluator.evaluate(predicted, model.get_labels())
def structure_plif_hmsvm_mosek(num_examples, example_length, num_features, num_noise_features): from modshogun import RealMatrixFeatures, TwoStateModel, StructuredAccuracy try: from modshogun import PrimalMosekSOSVM except ImportError: print("Mosek not available") return model = TwoStateModel.simulate_data(num_examples, example_length, num_features, num_noise_features) sosvm = PrimalMosekSOSVM(model, model.get_labels()) sosvm.train() #print(sosvm.get_w()) predicted = sosvm.apply(model.get_features()) evaluator = StructuredAccuracy() acc = evaluator.evaluate(predicted, model.get_labels())