def trainEventRandomly(
        event_type,
        source_tag,
        target_tag,
        obs_len,
        obs_count,
        algo_type="GMMHMM"
):
    logger.info('[trainEventRandomly] event_type=%s, source_tag=%s, target_tag=%s'
                % (event_type, source_tag, target_tag))
    model = getModel(algo_type, source_tag, event_type)
    model_param = model["modelParam"]
    status_sets = model["statusSets"]

    sound_set = status_sets["sound"]
    motion_set = status_sets["motion"]
    location_set = status_sets["location"]

    train_obs_len = obs_len
    train_obs_count = obs_count
    d = Dataset(event_type=getEventList(), motion_type=motion_set, sound_type=sound_set,
                location_type=location_set, event_prob_map=getEventProbMap())
    logger.debug('[trainEventRandomly] Dataset: %s' % (d))
    d.randomObservations(event_type, train_obs_len, train_obs_count)   # 这里是产生假序列的部分
    observations = d.obs
    logger.debug('[trainEventRandomly] obs: %s' % (observations))

    description = '[source_tag=%s]Random train algo_type=%s for eventType=%s, random train obs_len=%s, obs_count=%s' % (
        source_tag, algo_type, event_type, train_obs_len, train_obs_count)
    TRAINER = ALGOMAP[algo_type]
    my_trainer = TRAINER(model_param)
    my_trainer.fit(d.getDataset())

    return setModel(algo_type, target_tag, event_type, my_trainer.params_, status_sets,
                    datetime.datetime.now(), description, json.dumps(observations))
def trainRandomRnnRBM():

    #event_type = "dining_in_restaurant"
    train_obs_len = 10  #todo need more than 10 or less than 10 length seqs
    train_obs_count = 10
    event_list = getEventList()
    sound_set = get_sound_set()
    motion_set = get_motion_set()

    location_one_set = get_location_one_set()
    location_two_set = get_location_two_set()
    #the original location type is location_one_type
    d = Dataset(event_type=getEventList(),
                motion_type=motion_set,
                sound_type=sound_set,
                location_type=location_two_set,
                location_one_type=location_one_set,
                event_prob_map=getEventProbMap())
    #logger.debug('[trainEventRandomly] Dataset: %s' % (d))

    print "dataset", d
    event_dict = {}
    for event_type in event_list:  #
        d.randomObservations(event_type, train_obs_len,
                             train_obs_count)  # 这里是产生假序列的部分
        observation_list = d.obs
        binary_sequences = d.convert_binary_sequence(observation_list)
        event_dict.update({event_type: binary_sequences})
    #             (self,
    #              event_params_dict=None, # key is the eventtype ,and the value is the params of RnnRbm,
    #                                      #如果eventtype下有参数,则fit时,是从之前训练的基础上开始训练,如果是空。则是用buildrbmrnn的
    #                                      #default参数来初始化并开始巡礼那
    #              weights_dict=None,
    #              seq_len = 0
    #              ):
    senz_len = len(sound_set) + len(motion_set) + len(location_one_set) + len(
        location_two_set)

    # def cold_start_params_dict(event_list):
    #     temp_dict = {}
    #     for event in event_list: temp_dict.update({event:None})
    #     return temp_dict

    cmptor = Comparator(senz_len=senz_len, event_list=event_list)
    params_dict = cmptor.fit(event_dict)
    ids = save_rnnrbm_params(params_dict=params_dict,
                             base_set_dict=dict(motion=motion_set,
                                                location_two=location_two_set,
                                                location_one=location_one_set,
                                                sound=sound_set),
                             tag="random_v0")
    print "The ids saved  in leancloud are", ids
    print "observations event dict start"
    for i in event_dict:
        print i
    print "observation event dict end"
    return ids
def trainRandomRnnRBM():

    #event_type = "dining_in_restaurant"
    train_obs_len = 10  #todo need more than 10 or less than 10 length seqs
    train_obs_count = 10
    event_list = getEventList()
    sound_set = get_sound_set()
    motion_set = get_motion_set()

    location_one_set = get_location_one_set()
    location_two_set = get_location_two_set()
    #the original location type is location_one_type
    d = Dataset(event_type=getEventList(), motion_type=motion_set, sound_type=sound_set,
                location_type=location_two_set, location_one_type=location_one_set, event_prob_map=getEventProbMap())
    #logger.debug('[trainEventRandomly] Dataset: %s' % (d))

    print "dataset",d
    event_dict = {}
    for event_type in event_list: #
        d.randomObservations(event_type, train_obs_len, train_obs_count)   # 这里是产生假序列的部分
        observation_list = d.obs
        binary_sequences = d.convert_binary_sequence(observation_list)
        event_dict.update({event_type: binary_sequences})
    #             (self,
    #              event_params_dict=None, # key is the eventtype ,and the value is the params of RnnRbm,
    #                                      #如果eventtype下有参数,则fit时,是从之前训练的基础上开始训练,如果是空。则是用buildrbmrnn的
    #                                      #default参数来初始化并开始巡礼那
    #              weights_dict=None,
    #              seq_len = 0
    #              ):
    senz_len = len(sound_set) + len(motion_set) + len(location_one_set) + len(location_two_set)

    # def cold_start_params_dict(event_list):
    #     temp_dict = {}
    #     for event in event_list: temp_dict.update({event:None})
    #     return temp_dict

    cmptor = Comparator(senz_len=senz_len,event_list=event_list)
    params_dict = cmptor.fit(event_dict)
    ids = save_rnnrbm_params(params_dict=params_dict,
                             base_set_dict=dict(
                                 motion=motion_set,
                                 location_two=location_two_set,
                                 location_one=location_one_set,
                                 sound=sound_set
                             ),
                             tag="random_v0")
    print "The ids saved  in leancloud are",ids
    print "observations event dict start"
    for i in event_dict:
        print i
    print "observation event dict end"
    return ids
def trainEventRandomly(event_type,
                       source_tag,
                       target_tag,
                       obs_len,
                       obs_count,
                       algo_type="GMMHMM"):
    logger.info(
        '[trainEventRandomly] event_type=%s, source_tag=%s, target_tag=%s' %
        (event_type, source_tag, target_tag))
    model = getModel(algo_type, source_tag, event_type)
    model_param = model["modelParam"]
    status_sets = model["statusSets"]

    sound_set = status_sets["sound"]
    motion_set = status_sets["motion"]
    location_set = status_sets["location"]

    train_obs_len = obs_len
    train_obs_count = obs_count
    d = Dataset(event_type=getEventList(),
                motion_type=motion_set,
                sound_type=sound_set,
                location_type=location_set,
                event_prob_map=getEventProbMap())
    logger.debug('[trainEventRandomly] Dataset: %s' % (d))
    d.randomObservations(event_type, train_obs_len,
                         train_obs_count)  # 这里是产生假序列的部分
    observations = d.obs
    logger.debug('[trainEventRandomly] obs: %s' % (observations))

    description = '[source_tag=%s]Random train algo_type=%s for eventType=%s, random train obs_len=%s, obs_count=%s' % (
        source_tag, algo_type, event_type, train_obs_len, train_obs_count)
    TRAINER = ALGOMAP[algo_type]
    my_trainer = TRAINER(model_param)
    my_trainer.fit(d.getDataset())

    return setModel(algo_type, target_tag, event_type, my_trainer.params_,
                    status_sets, datetime.datetime.now(), description,
                    json.dumps(observations))