Esempio n. 1
0
def dl_veh_type(train_df, test_df, opt, vehicle_or_not_train_opt,
                vehicle_type_train_opt, train_test_opt, features):
    # train vehicle type model seperately
    evaluation.init_write(
        opt,
        [vehicle_or_not_train_opt, vehicle_type_train_opt, train_test_opt],
        [features['VEHICLE_OR_NOT_FEATURES'], features['VEHICLE_TYPE']],
        train_df, test_df)
    print(evaluation.evaluation_report.write)
    if vehicle_type_train_opt['random_seed'] is not None:
        np.random.seed(vehicle_type_train_opt['random_seed'])
    vehicle_type_train_win_df = train_df.copy()
    vehicle_type_test_win_df = test_df.copy()

    vehicle_type_index = preprocessing.get_feature_idx(
        features['VEHICLE_TYPE'], features['ALL_FEATURES'])

    vehicle_type_test_win_df = vehicle_type_test_win_df[
        (vehicle_type_test_win_df[opt['test_label_type']] == 4)
        | (vehicle_type_test_win_df[opt['test_label_type']] == 3) |
        (vehicle_type_test_win_df[opt['test_label_type']] == 2)]

    vehicle_type_train_win_df = vehicle_type_train_win_df[
        (vehicle_type_train_win_df[opt['train_label_type']] == 2)
        | (vehicle_type_train_win_df[opt['train_label_type']] == 3)
        | (vehicle_type_train_win_df[opt['train_label_type']] == 4)]

    preprocessing.reassign_label(vehicle_type_train_win_df,
                                 vehicle_type_test_win_df,
                                 [[2, 0], [3, 1], [4, 2]])
    # features_test, labels_test = preprocessing.balance_dataset(
    #     vehicle_type_test_win_df.iloc[:, vehicle_type_index],
    #     vehicle_type_test_win_df[opt['test_label_type']])
    logging.info("Start to train vehicle_type model")
    train_models.train_dl_veh_type_model(
        vehicle_type_train_win_df.iloc[:, vehicle_type_index],
        vehicle_type_train_win_df[opt['train_label_type']],
        vehicle_type_train_opt,
        vehicle_type_test_win_df.iloc[:, vehicle_type_index],
        vehicle_type_test_win_df[opt['test_label_type']])
Esempio n. 2
0
def ml_one_train_test(ml_opt, train_df, test_df, opt, features):
    # Use ml to train All-In-One Model

    evaluation.init_write(
        opt, None,
        [features['VEHICLE_OR_NOT_FEATURES'], features['VEHICLE_TYPE']],
        train_df, test_df)

    # ~~~~~~~~~~~~~~ train vehicle/Non-vehicle model ~~~~~~~~~~~~~~~~
    one_model_train_win_df = train_df.copy()
    one_model_test_win_df = test_df.copy()

    one_model_index = preprocessing.get_feature_idx(features['ONE_MODEL'],
                                                    features['ALL_FEATURES'])
    preprocessing.reassign_label(one_model_train_win_df, one_model_test_win_df,
                                 [[1, 0], [2, 1], [3, 2], [4, 3], [5, 0]])
    logging.info("Start to train ml one model")
    start_time = time.time()
    one_model = train_models.train_ml_model(
        np.array(one_model_train_win_df.iloc[:, one_model_index]),
        np.array(one_model_train_win_df[opt['train_label_type']]), ml_opt)
    logging.info("Finished to train ml one_model model")
    print("it took", time.time() - start_time, "seconds.")
    logging.info("Start to evaluate ml one model")
    valid_all_based = preprocessing.remove_mix(one_model_test_win_df,
                                               'all_based_win_label')
    evaluation.evaluate_single_ml_model(
        one_model, np.array(valid_all_based.iloc[:, one_model_index]),
        np.array(valid_all_based['all_based_win_label']),
        ['not vehicle', 'mrt', 'bus', 'car'], opt['folder_name'])
    evaluation.evaluate_single_ml_model(
        one_model, np.array(one_model_test_win_df.iloc[:, one_model_index]),
        np.array(one_model_test_win_df['last_based_win_label']),
        ['not vehicle', 'mrt', 'bus', 'car'], opt['folder_name'])

    evaluation.save_write(opt['folder_name'])
    # print(evaluation.evaluation_report.write)
    del one_model_test_win_df, one_model_train_win_df, one_model_index, one_model
Esempio n. 3
0
def dl_train_test(train_df, test_df, opt, vehicle_or_not_train_opt,
                  vehicle_type_train_opt, train_test_opt, features):
    # Use Deep Learning to train hierarchical model
    evaluation.init_write(
        opt,
        [vehicle_or_not_train_opt, vehicle_type_train_opt, train_test_opt],
        [features['VEHICLE_OR_NOT_FEATURES'], features['VEHICLE_TYPE']],
        train_df, test_df)
    print(evaluation.evaluation_report.write)
    # ~~~~~~~~~~~~~~ train vehicle/Non-vehicle model ~~~~~~~~~~~~~~~~
    if vehicle_or_not_train_opt['random_seed'] is not None:
        np.random.seed(vehicle_or_not_train_opt['random_seed'])
    vehicle_or_not_train_win_df = train_df.copy()
    vehicle_or_not_test_win_df = test_df.copy()

    vehicle_or_not_index = preprocessing.get_feature_idx(
        features['VEHICLE_OR_NOT_FEATURES'], features['ALL_FEATURES'])
    preprocessing.reassign_label(vehicle_or_not_train_win_df,
                                 vehicle_or_not_test_win_df,
                                 [[1, 0], [2, 1], [3, 1], [4, 1], [5, 0]])
    logging.info("Start to train vehicle_or_not model")
    # features_test, labels_test = preprocessing.balance_dataset(
    #     vehicle_or_not_test_win_df.iloc[:, vehicle_or_not_index],
    #     vehicle_or_not_test_win_df[opt['test_label_type']])
    vehicle_or_not_model = train_models.train_dl_veh_or_not_model(
        vehicle_or_not_train_win_df.iloc[:, vehicle_or_not_index],
        vehicle_or_not_train_win_df[opt['train_label_type']],
        vehicle_or_not_train_opt,
        vehicle_or_not_test_win_df.iloc[:, vehicle_or_not_index],
        vehicle_or_not_test_win_df[opt['test_label_type']])
    logging.info("Start to test vehicle_or_not model")
    evaluation.evaluate_single_model(
        vehicle_or_not_model,
        opt['folder_name'],
        'vehicle_or_not',
        np.array(vehicle_or_not_test_win_df.iloc[:, vehicle_or_not_index]),
        np.array(vehicle_or_not_test_win_df[opt['test_label_type']]),
        save_model=False)

    # ~~~~~~~~~~~~~~~~ train vehicle_type_model ~~~~~~~~~~~~~~~~
    if vehicle_type_train_opt['random_seed'] is not None:
        np.random.seed(vehicle_type_train_opt['random_seed'])
    vehicle_type_train_win_df = train_df.copy()
    vehicle_type_test_win_df = test_df.copy()

    vehicle_type_index = preprocessing.get_feature_idx(
        features['VEHICLE_TYPE'], features['ALL_FEATURES'])

    vehicle_type_test_win_df = vehicle_type_test_win_df[
        (vehicle_type_test_win_df[opt['test_label_type']] == 4)
        | (vehicle_type_test_win_df[opt['test_label_type']] == 3) |
        (vehicle_type_test_win_df[opt['test_label_type']] == 2)]

    vehicle_type_train_win_df = vehicle_type_train_win_df[
        (vehicle_type_train_win_df[opt['train_label_type']] == 2)
        | (vehicle_type_train_win_df[opt['train_label_type']] == 3)
        | (vehicle_type_train_win_df[opt['train_label_type']] == 4)]

    preprocessing.reassign_label(vehicle_type_train_win_df,
                                 vehicle_type_test_win_df,
                                 [[2, 0], [3, 1], [4, 2]])
    # features_test, labels_test = preprocessing.balance_dataset(
    #     vehicle_type_test_win_df.iloc[:, vehicle_type_index],
    #     vehicle_type_test_win_df[opt['test_label_type']])
    logging.info("Start to train vehicle_type model")
    vehicle_type_model = train_models.train_dl_veh_type_model(
        vehicle_type_train_win_df.iloc[:, vehicle_type_index],
        vehicle_type_train_win_df[opt['train_label_type']],
        vehicle_type_train_opt,
        vehicle_type_test_win_df.iloc[:, vehicle_type_index],
        vehicle_type_test_win_df[opt['test_label_type']])

    logging.info("Start to test vehicle_type model")
    if vehicle_type_train_opt['middle_output'] is True:
        evaluation.evaluate_single_ml_model(
            vehicle_type_model,
            np.array(vehicle_type_test_win_df.iloc[:, vehicle_type_index]),
            np.array(vehicle_type_test_win_df[opt['test_label_type']]),
            ['mrt', 'bus', 'car'], opt['folder_name'])
    else:
        evaluation.evaluate_single_model(
            vehicle_type_model,
            opt['folder_name'],
            'vehicle_type',
            np.array(vehicle_type_test_win_df.iloc[:, vehicle_type_index]),
            np.array(vehicle_type_test_win_df[opt['test_label_type']]),
            save_model=False)
    # print(evaluation.evaluation_report.write)

    # ~~~~~~~~~~~~~~~~~ get overall result ~~~~~~~~~~~~~~~~~~~
    overall_test_win_df = test_df.copy()
    valid_all_based = preprocessing.remove_mix(overall_test_win_df,
                                               'all_based_win_label')
    overall_result_label = evaluation.evaluate_overall_manual_2(
        vehicle_or_not_model, vehicle_type_model, valid_all_based,
        valid_all_based['all_based_win_label'], vehicle_or_not_index,
        vehicle_type_index, opt['smooth_overall_result'])
    overall_result_label = evaluation.evaluate_overall_manual_2(
        vehicle_or_not_model, vehicle_type_model, overall_test_win_df,
        overall_test_win_df['last_based_win_label'], vehicle_or_not_index,
        vehicle_type_index, opt['smooth_overall_result'])
    # ~~~~~~~~~~~~~~~~~ Save predicted result into csv for visualization ~~~~~~~~~~
    evaluation.save_predicted_result_in_csv(overall_result_label,
                                            overall_test_win_df,
                                            opt['folder_name'], 'overall',
                                            opt['test_label_type'])
    evaluation.save_write(opt['folder_name'])

    del overall_test_win_df, vehicle_or_not_test_win_df, vehicle_or_not_train_win_df, vehicle_or_not_index, \
        vehicle_type_model, vehicle_type_train_win_df, vehicle_type_test_win_df, \
        vehicle_type_index
Esempio n. 4
0
def lstm_train_test(train_df, test_df, opt, vehicle_or_not_train_opt,
                    vehicle_type_train_opt, train_test_opt, features):
    # Use lstm net to train hierarchical model
    evaluation.init_write(
        opt,
        [vehicle_or_not_train_opt, vehicle_type_train_opt, train_test_opt],
        [features['VEHICLE_OR_NOT_FEATURES'], features['VEHICLE_TYPE']],
        train_df, test_df)
    print(evaluation.evaluation_report.write)
    # # ~~~~~~~~~~~~~~ train vehicle/Non-vehicle model ~~~~~~~~~~~~~~~~
    if vehicle_or_not_train_opt['random_seed'] is not None:
        np.random.seed(vehicle_or_not_train_opt['random_seed'])
    vehicle_or_not_train_win_df = train_df.copy()
    vehicle_or_not_test_win_df = test_df.copy()

    vehicle_or_not_index = preprocessing.get_feature_idx(
        features['VEHICLE_OR_NOT_FEATURES'], features['ALL_FEATURES'])
    preprocessing.reassign_label(vehicle_or_not_train_win_df,
                                 vehicle_or_not_test_win_df,
                                 [[1, 0], [2, 1], [3, 1], [4, 1], [5, 0]])
    logging.info("Start to train vehicle_or_not model")
    vehicle_or_not_model = train_models.train_lstm_model(
        vehicle_or_not_train_win_df.iloc[:, vehicle_or_not_index],
        vehicle_or_not_train_win_df[opt['train_label_type']],
        vehicle_or_not_train_opt)
    logging.info("Start to test vehicle_or_not model")
    features_test = np.reshape(
        np.array(vehicle_or_not_test_win_df.iloc[:, vehicle_or_not_index]),
        (len(vehicle_or_not_test_win_df.iloc[:, vehicle_or_not_index]), 6,
         len(features['VEHICLE_OR_NOT_FEATURES'])))
    evaluation.evaluate_single_model(
        vehicle_or_not_model,
        opt['folder_name'],
        'vehicle_or_not',
        features_test,
        np.array(vehicle_or_not_test_win_df[opt['test_label_type']]),
        save_model=False)

    # ~~~~~~~~~~~~~~~~ train vehicle_type_model ~~~~~~~~~~~~~~~~
    if vehicle_type_train_opt['random_seed'] is not None:
        np.random.seed(vehicle_type_train_opt['random_seed'])
    vehicle_type_train_win_df = train_df.copy()
    vehicle_type_test_win_df = test_df.copy()

    vehicle_type_index = preprocessing.get_feature_idx(
        features['VEHICLE_TYPE'], features['ALL_FEATURES'])

    vehicle_type_test_win_df = vehicle_type_test_win_df[
        (vehicle_type_test_win_df[opt['test_label_type']] == 4)
        | (vehicle_type_test_win_df[opt['test_label_type']] == 3) |
        (vehicle_type_test_win_df[opt['test_label_type']] == 2)]

    vehicle_type_train_win_df = vehicle_type_train_win_df[
        (vehicle_type_train_win_df[opt['train_label_type']] == 2)
        | (vehicle_type_train_win_df[opt['train_label_type']] == 3)
        | (vehicle_type_train_win_df[opt['train_label_type']] == 4)]

    preprocessing.reassign_label(vehicle_type_train_win_df,
                                 vehicle_type_test_win_df,
                                 [[2, 0], [3, 1], [4, 2]])
    logging.info("Start to train vehicle_type model")
    vehicle_type_model = train_models.train_lstm_model(
        vehicle_type_train_win_df.iloc[:, vehicle_type_index],
        vehicle_type_train_win_df[opt['train_label_type']],
        vehicle_type_train_opt)

    logging.info("Start to test vehicle_type model")
    features_test = np.reshape(
        np.array(vehicle_type_test_win_df.iloc[:, vehicle_type_index]),
        (len(vehicle_type_test_win_df.iloc[:, vehicle_type_index]), 6,
         len(features['VEHICLE_TYPE'])))
    evaluation.evaluate_single_model(
        vehicle_type_model,
        opt['folder_name'],
        'vehicle_type',
        features_test,
        np.array(vehicle_type_test_win_df[opt['test_label_type']]),
        save_model=False)

    # ~~~~~~~~~~~~~~~~~ get overall result ~~~~~~~~~~~~~~~~~~~
    overall_test_win_df = test_df.copy()
    overall_result_label = evaluation.evaluate_overall_lstm(
        vehicle_or_not_model, vehicle_type_model, overall_test_win_df,
        overall_test_win_df[opt['test_label_type']], vehicle_or_not_index,
        vehicle_type_index, opt['smooth_overall_result'])
    # ~~~~~~~~~~~~~~~~~ Save predicted result into csv for visualization ~~~~~~~~~~
    evaluation.save_predicted_result_in_csv(overall_result_label,
                                            overall_test_win_df,
                                            opt['folder_name'], 'overall',
                                            opt['test_label_type'])
    evaluation.save_write(opt['folder_name'])

    del overall_test_win_df, vehicle_or_not_test_win_df, vehicle_or_not_train_win_df, vehicle_or_not_index, \
        vehicle_type_model, vehicle_or_not_model, vehicle_type_train_win_df, vehicle_type_test_win_df, \
        vehicle_type_index
Esempio n. 5
0
def dl_one_model_train_test(train_df, test_df, opt, one_model_train_opt,
                            train_test_opt, features):
    # Use dl to train All-In-One model
    evaluation.init_write(opt, [one_model_train_opt, train_test_opt],
                          features['ONE_MODEL'], train_df, test_df)

    # # ~~~~~~~~~~~~~~ train one_model model ~~~~~~~~~~~~~~~~
    if one_model_train_opt['random_seed'] is not None:
        np.random.seed(one_model_train_opt['random_seed'])

    one_model_train_win_df = train_df.copy()
    one_model_test_win_df = test_df.copy()

    one_model_index = preprocessing.get_feature_idx(features['ONE_MODEL'],
                                                    features['ALL_FEATURES'])
    preprocessing.reassign_label(one_model_train_win_df, one_model_test_win_df,
                                 [[1, 0], [2, 1], [3, 2], [4, 3], [5, 0]])
    logging.info("Start to train one_model model")
    start_time = time.time()
    # features_test, labels_test = preprocessing.balance_dataset(
    #     one_model_test_win_df.iloc[:, one_model_index],
    #     one_model_test_win_df[opt['test_label_type']])

    one_model_model = train_models.train_dl_veh_type_model(
        one_model_train_win_df.iloc[:, one_model_index],
        one_model_train_win_df[opt['train_label_type']], one_model_train_opt,
        one_model_test_win_df.iloc[:, one_model_index],
        one_model_test_win_df[opt['test_label_type']])
    logging.info("Finished to train one_model model")
    print("it took", time.time() - start_time, "seconds.")
    logging.info("Start to test one_model model")
    if one_model_train_opt['DLNetwork'] == 'LSTM':
        features_test = np.reshape(
            np.array(one_model_test_win_df.iloc[:, one_model_index]),
            (len(one_model_test_win_df.iloc[:, one_model_index]), 6,
             len(features['ONE_MODEL'])))
        evaluation.evaluate_single_model(
            one_model_model,
            opt['folder_name'],
            'one_model',
            features_test,
            np.array(one_model_test_win_df[opt['test_label_type']]),
            save_model=False)
    else:
        valid_all_based = preprocessing.remove_mix(one_model_test_win_df,
                                                   'all_based_win_label')
        evaluation.evaluate_single_model(
            one_model_model,
            opt['folder_name'],
            'one_model',
            np.array(valid_all_based.iloc[:, one_model_index]),
            np.array(valid_all_based['all_based_win_label']),
            save_model=False)
        evaluation.evaluate_single_model(
            one_model_model,
            opt['folder_name'],
            'one_model',
            np.array(one_model_test_win_df.iloc[:, one_model_index]),
            np.array(one_model_test_win_df['last_based_win_label']),
            save_model=False)

    evaluation.save_write(opt['folder_name'])
Esempio n. 6
0
def dl_train_test_3binary(train_df, test_df, opt, vehicle_or_not_train_opt,
                          vehicle_type_train_opt, bus_or_not_train_opt,
                          mrt_or_car_train_opt, train_test_opt, features):
    # Use dl to train bi-bi-binary model
    evaluation.init_write(opt, [
        vehicle_or_not_train_opt, vehicle_type_train_opt, bus_or_not_train_opt,
        mrt_or_car_train_opt, train_test_opt
    ], [
        features['VEHICLE_OR_NOT_FEATURES'], features['BUS_OR_NOT'],
        features['MRT_OR_CAR']
    ], train_df, test_df)

    # # ~~~~~~~~~~~~~~ train vehicle/Non-vehicle model ~~~~~~~~~~~~~~~~
    if vehicle_or_not_train_opt['random_seed'] is not None:
        np.random.seed(vehicle_or_not_train_opt['random_seed'])
    vehicle_or_not_train_win_df = train_df.copy()
    vehicle_or_not_test_win_df = test_df.copy()

    vehicle_or_not_index = preprocessing.get_feature_idx(
        features['VEHICLE_OR_NOT_FEATURES'], features['ALL_FEATURES'])
    preprocessing.reassign_label(vehicle_or_not_train_win_df,
                                 vehicle_or_not_test_win_df,
                                 [[1, 0], [2, 1], [3, 1], [4, 1], [5, 0]])
    logging.info("Start to train vehicle_or_not model")
    # features_test, labels_test = preprocessing.balance_dataset(
    #     vehicle_or_not_test_win_df.iloc[:, vehicle_or_not_index],
    #     vehicle_or_not_test_win_df[opt['test_label_type']])
    vehicle_or_not_model = train_models.train_dl_veh_or_not_model(
        vehicle_or_not_train_win_df.iloc[:, vehicle_or_not_index],
        vehicle_or_not_train_win_df[opt['train_label_type']],
        vehicle_or_not_train_opt,
        vehicle_or_not_test_win_df.iloc[:, vehicle_or_not_index],
        vehicle_or_not_test_win_df[opt['test_label_type']])
    logging.info("Start to test vehicle_or_not model")
    evaluation.evaluate_single_model(
        vehicle_or_not_model,
        opt['folder_name'],
        'vehicle_or_not',
        np.array(vehicle_or_not_test_win_df.iloc[:, vehicle_or_not_index]),
        np.array(vehicle_or_not_test_win_df[opt['test_label_type']]),
        save_model=False)

    # ~~~~~~~~~~~~~~~~ train bus_or_not_model ~~~~~~~~~~~~~~~~~~
    if bus_or_not_train_opt['random_seed'] is not None:
        np.random.seed(bus_or_not_train_opt['random_seed'])

    bus_or_not_train_win_df = train_df.copy()
    bus_or_not_test_win_df = test_df.copy()

    bus_or_not_index = preprocessing.get_feature_idx(features['BUS_OR_NOT'],
                                                     features['ALL_FEATURES'])

    bus_or_not_test_win_df = bus_or_not_test_win_df[
        (bus_or_not_test_win_df[opt['test_label_type']] == 4) |
        (bus_or_not_test_win_df[opt['test_label_type']] == 3) |
        (bus_or_not_test_win_df[opt['test_label_type']] == 2)]

    bus_or_not_train_win_df = bus_or_not_train_win_df[
        (bus_or_not_train_win_df[opt['train_label_type']] == 2)
        | (bus_or_not_train_win_df[opt['train_label_type']] == 3)
        | (bus_or_not_train_win_df[opt['train_label_type']] == 4)]

    preprocessing.reassign_label(bus_or_not_train_win_df,
                                 bus_or_not_test_win_df,
                                 [[2, 0], [3, 1], [4, 0]])
    logging.info("Start to train bus_or_not model")
    # features_test, labels_test = preprocessing.balance_dataset(
    #     bus_or_not_test_win_df.iloc[:, bus_or_not_index],
    #     bus_or_not_test_win_df[opt['test_label_type']])
    bus_or_not_model = train_models.train_dl_veh_type_model(
        bus_or_not_train_win_df.iloc[:, bus_or_not_index],
        bus_or_not_train_win_df[opt['train_label_type']], bus_or_not_train_opt,
        bus_or_not_test_win_df.iloc[:, bus_or_not_index],
        bus_or_not_test_win_df[opt['test_label_type']])

    logging.info("Start to test bus_or_not model")

    evaluation.evaluate_single_model(
        bus_or_not_model,
        opt['folder_name'],
        'bus_or_not',
        np.array(bus_or_not_test_win_df.iloc[:, bus_or_not_index]),
        np.array(bus_or_not_test_win_df[opt['test_label_type']]),
        save_model=False)

    # ~~~~~~~~~~~~~~~~ train mrt_or_car_model ~~~~~~~~~~~~~~~~
    if mrt_or_car_train_opt['random_seed'] is not None:
        np.random.seed(mrt_or_car_train_opt['random_seed'])

    mrt_or_car_train_win_df = train_df.copy()
    mrt_or_car_test_win_df = test_df.copy()

    mrt_or_car_index = preprocessing.get_feature_idx(features['VEHICLE_TYPE'],
                                                     features['ALL_FEATURES'])

    mrt_or_car_test_win_df = mrt_or_car_test_win_df[
        (mrt_or_car_test_win_df[opt['test_label_type']] == 4) |
        (mrt_or_car_test_win_df[opt['test_label_type']] == 2)]

    mrt_or_car_train_win_df = mrt_or_car_train_win_df[
        (mrt_or_car_train_win_df[opt['train_label_type']] == 2) |
        (mrt_or_car_train_win_df[opt['train_label_type']] == 4)]

    preprocessing.reassign_label(mrt_or_car_train_win_df,
                                 mrt_or_car_test_win_df, [[2, 0], [4, 1]])
    logging.info("Start to train mrt_or_car model")
    # features_test, labels_test = preprocessing.balance_dataset(
    #     mrt_or_car_test_win_df.iloc[:, mrt_or_car_index],
    #     mrt_or_car_test_win_df[opt['test_label_type']])
    mrt_or_car_model = train_models.train_dl_veh_type_model(
        mrt_or_car_train_win_df.iloc[:, mrt_or_car_index],
        mrt_or_car_train_win_df[opt['train_label_type']], mrt_or_car_train_opt,
        mrt_or_car_test_win_df.iloc[:, mrt_or_car_index],
        mrt_or_car_test_win_df[opt['test_label_type']])

    logging.info("Start to test mrt_or_car model")
    evaluation.evaluate_single_model(
        mrt_or_car_model,
        opt['folder_name'],
        'mrt_or_car',
        np.array(mrt_or_car_test_win_df.iloc[:, mrt_or_car_index]),
        np.array(mrt_or_car_test_win_df[opt['test_label_type']]),
        save_model=False)

    # ~~~~~~~~~~~~~~~~~ get overall result ~~~~~~~~~~~~~~~~~~~
    overall_test_win_df = test_df.copy()
    overall_result_label = evaluation.evaluate_overall_bibibinary(
        vehicle_or_not_model, bus_or_not_model, mrt_or_car_model,
        overall_test_win_df, overall_test_win_df[opt['test_label_type']],
        vehicle_or_not_index, bus_or_not_index, mrt_or_car_index,
        opt['smooth_overall_result'])
    # # ~~~~~~~~~~~~~~~~~ Save predicted result into csv for visualization ~~~~~~~~~~
    evaluation.save_predicted_result_in_csv(overall_result_label,
                                            overall_test_win_df,
                                            opt['folder_name'], 'overall',
                                            opt['test_label_type'])
    evaluation.save_write(opt['folder_name'])
Esempio n. 7
0
def ml_hie_train_test(ml_opt, train_df, test_df, opt, features):
    # Use ML to train hierarchical model
    evaluation.init_write(
        opt, None,
        [features['VEHICLE_OR_NOT_FEATURES'], features['VEHICLE_TYPE']],
        train_df, test_df)

    # ~~~~~~~~~~~~~~ train vehicle/Non-vehicle model ~~~~~~~~~~~~~~~~
    vehicle_or_not_train_win_df = train_df.copy()
    vehicle_or_not_test_win_df = test_df.copy()

    vehicle_or_not_index = preprocessing.get_feature_idx(
        features['VEHICLE_OR_NOT_FEATURES'], features['ALL_FEATURES'])
    preprocessing.reassign_label(vehicle_or_not_train_win_df,
                                 vehicle_or_not_test_win_df,
                                 [[1, 0], [2, 1], [3, 1], [4, 1], [5, 0]])
    logging.info("Start to train vehicle_or_not model")
    vehicle_or_not_model = train_models.train_ml_model(
        np.array(vehicle_or_not_train_win_df.iloc[:, vehicle_or_not_index]),
        np.array(vehicle_or_not_train_win_df[opt['train_label_type']]), ml_opt)

    logging.info("Start to evaluate vehicle_or_not model")
    evaluation.evaluate_single_ml_model(
        vehicle_or_not_model,
        np.array(vehicle_or_not_test_win_df.iloc[:, vehicle_or_not_index]),
        np.array(vehicle_or_not_test_win_df[opt['test_label_type']]),
        ['not vehicle', 'vehicle'], opt['folder_name'])

    # ~~~~~~~~~~~~~~~~ train vehicle_type_model ~~~~~~~~~~~~~~~~
    vehicle_type_train_win_df = train_df.copy()
    vehicle_type_test_win_df = test_df.copy()

    vehicle_type_index = preprocessing.get_feature_idx(
        features['VEHICLE_TYPE'], features['ALL_FEATURES'])
    vehicle_type_test_win_df = vehicle_type_test_win_df[
        (vehicle_type_test_win_df[opt['test_label_type']] == 4)
        | (vehicle_type_test_win_df[opt['test_label_type']] == 3) |
        (vehicle_type_test_win_df[opt['test_label_type']] == 2)]

    vehicle_type_train_win_df = vehicle_type_train_win_df[
        (vehicle_type_train_win_df[opt['train_label_type']] == 2)
        | (vehicle_type_train_win_df[opt['train_label_type']] == 3)
        | (vehicle_type_train_win_df[opt['train_label_type']] == 4)]

    preprocessing.reassign_label(vehicle_type_train_win_df,
                                 vehicle_type_test_win_df,
                                 [[2, 0], [3, 1], [4, 2]])
    logging.info("Start to train vehicle_type model")
    vehicle_type_model = train_models.train_ml_model(
        np.array(vehicle_type_train_win_df.iloc[:, vehicle_type_index]),
        np.array(vehicle_type_train_win_df[opt['train_label_type']]), ml_opt)
    logging.info("Start to evaluate vehicle_type model")
    evaluation.evaluate_single_ml_model(
        vehicle_type_model,
        np.array(vehicle_type_test_win_df.iloc[:, vehicle_type_index]),
        np.array(vehicle_type_test_win_df[opt['test_label_type']]),
        ['mrt', 'bus', 'car'], opt['folder_name'])

    # ~~~~~~~~~~~~~~~~~ get overall result ~~~~~~~~~~~~~~~~~~~
    overall_test_win_df = test_df.copy()
    valid_all_based = preprocessing.remove_mix(overall_test_win_df,
                                               'all_based_win_label')
    evaluation.evaluate_overall_manual_2(
        vehicle_or_not_model, vehicle_type_model, valid_all_based,
        valid_all_based['all_based_win_label'], vehicle_or_not_index,
        vehicle_type_index, opt['smooth_overall_result'])
    evaluation.evaluate_overall_manual_2(
        vehicle_or_not_model, vehicle_type_model, overall_test_win_df,
        overall_test_win_df['last_based_win_label'], vehicle_or_not_index,
        vehicle_type_index, opt['smooth_overall_result'])

    # ~~~~~~~~~~~~~~~~~ Save predicted result into csv for visualization ~~~~~~~~~~
    # evaluation.save_predicted_result_in_csv(overall_result_label, overall_test_win_df, opt['folder_name'],
    #                                         'overall', opt['test_label_type'])
    evaluation.save_write(opt['folder_name'])
    # print(evaluation.evaluation_report.write)
    del vehicle_or_not_test_win_df, vehicle_or_not_train_win_df, vehicle_type_train_win_df, vehicle_type_test_win_df, \
        vehicle_type_model, overall_test_win_df, vehicle_or_not_model, vehicle_type_index, vehicle_or_not_index