예제 #1
0
        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'
예제 #2
0
    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'}
예제 #3
0
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
예제 #4
0
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