return json.dumps(result) # params key checking for key in ['tag', 'poi_label', 'seq', 'description']: if key not in incoming_data: logger.error("<%s>, [train gmm] [KeyError] params=%s, should have key: %s" % (x_request_id, incoming_data, key)) result['message'] = "Params content Error: can't find key=%s" % (key) return json.dumps(result) tag = incoming_data['tag'] label = incoming_data['poi_label'] seq = incoming_data['seq'] description = incoming_data['description'] algo_type = incoming_data.get('algo_type', 'gmm') model = dao.get_model_by_tag_lable(algo_type, tag, label) description += '\n last params: %s' % (model.get('params')) # store last params in description _model = { 'nMix': model.get('nMix'), 'covarianceType': model.get('covarianceType'), 'nIter': model.get('nIter'), 'count': model.get('count'), 'params': model.get('params'), } my_trainer = Trainer(_model) my_trainer.fit(seq) dao.save_gmm('random_train', label, description, my_trainer.modelParams(), seq, model.get('count')+len(seq), model.get('nIter')) result = {'code': 0, 'message': 'success'} logger.info('<%s>, [train gmm] success' % (x_request_id)) logger.info('<%s>, [train gmm data] last params: %s\t train data: %s\t current params: %s'
for key in ['tag', 'poi_label', 'seq', 'description']: if key not in incoming_data: logger.error( "<%s>, [train gmm] [KeyError] params=%s, should have key: %s" % (x_request_id, incoming_data, key)) result['message'] = "Params content Error: can't find key=%s" % ( key) return json.dumps(result) tag = incoming_data['tag'] label = incoming_data['poi_label'] seq = incoming_data['seq'] description = incoming_data['description'] algo_type = incoming_data.get('algo_type', 'gmm') model = dao.get_model_by_tag_lable(algo_type, tag, label) description += '\n last params: %s' % ( model.get('params')) # store last params in description _model = { 'nMix': model.get('nMix'), 'covarianceType': model.get('covarianceType'), 'nIter': model.get('nIter'), 'count': model.get('count'), 'params': model.get('params'), } my_trainer = Trainer(_model) my_trainer.fit(seq) dao.save_gmm('random_train', label, description, my_trainer.modelParams(), seq, model.get('count') + len(seq), model.get('nIter')) result = {'code': 0, 'message': 'success'}
def do_classify(incoming_data, x_request_id): '''wrapper of classify ''' result = {'code': 1, 'message': ''} logger.debug('<%s>, [do_classify] enter, incoming_data=%s' % (x_request_id, incoming_data)) tag = incoming_data['tag'] seq = incoming_data['seq'] pois = incoming_data['pois'] algo_type = incoming_data.get('algo_type', 'gmm') logger.info('<%s>, [classify gmm] params: tag=%s, seq=%s, algo_type=%s' %(x_request_id, tag, seq, algo_type)) # parse seq seq = [util.parse_timestamp(e) for e in seq] # classify models = [] for poi in pois: try: model = dao.get_model_by_tag_lable(algo_type, tag, poi) except IndexError: logger.error('tag=%s, label=%s can not find model' % (tag, poi)) result['message'] = '<%s>, [do_classify] Can not find model whose tag=%s, label=%s ' % (x_request_id ,tag, poi) raise ValueError(result['message']) models.append(model) _models = [] labels = [] for model in models: labels.append(model.get('eventLabel')) _model = { 'nMix': model.get('nMix'), 'covarianceType': model.get('covarianceType'), 'nIter': model.get('nIter'), 'count': model.get('count'), 'params': model.get('params'), } _models.append(_model) my_predictor = Predictor(_models) logger.debug('-------\n\n_models:\n %s\n' % (_models)) score_results = [] seq_scores = my_predictor.scores(seq) logger.debug('seq_scores: %s' % (seq_scores)) for scores in seq_scores: score_result = {} for index, score in enumerate(scores): if labels[index] in score_result: score_result[labels[index]] += score else: score_result[labels[index]] = score score_results.append(score_result) logger.debug('!!!!!! score_result:%s' %(score_result)) # store seq in db for index, timestamp in enumerate(seq): event_label = max(score_results[index].iterkeys(), key=lambda key: score_results[index][key]) # max prob key is labelt dao.save_train_data(timestamp, event_label) logger.info('<%s> [classify] store timestamp=%s, label=%s to db success' % (x_request_id, timestamp, event_label)) logger.info('<%s> [classify gmm] success' % (x_request_id)) logger.debug('<%s> [classify gmm] result: %s' % (x_request_id, score_results)) result['code'] = 0 result['message'] = 'success' result['result'] = score_results return result