Skip to content
Snippets Groups Projects
regress_rr.py 40.6 KiB
Newer Older
Raymond Chia's avatar
Raymond Chia committed
                                                   )

Raymond Chia's avatar
Raymond Chia committed
            x_train = make_windows_from_id(x_train_df, data_cols)
            y_train = y_train_df['cpm'].values.reshape(-1, 1)
            x_test  = make_windows_from_id(x_test_df, data_cols)
Raymond Chia's avatar
Raymond Chia committed
            y_test  = y_test_df[lbl_str].values.reshape(-1, 1)
Raymond Chia's avatar
Raymond Chia committed
    
Raymond Chia's avatar
Raymond Chia committed
            # x_train = y_train_df['bvp_est'].values.reshape(-1, 1)
            # x_test  = y_test_df['bvp_est'].values.reshape(-1, 1)
Raymond Chia's avatar
Raymond Chia committed
            print("minirocket transforming...")
            x_train = np.swapaxes(x_train, 1, 2)
            x_test = np.swapaxes(x_test, 1, 2)
            minirocket = MiniRocketMultivariate()
            x_train    = minirocket.fit_transform(x_train)
            x_test     = minirocket.transform(x_test)
        elif use_tsfresh:
            x_train = train_df.iloc[:, 3:].values
Raymond Chia's avatar
Raymond Chia committed
            y_train = train_df['cpm'].values.reshape(-1, 1)
Raymond Chia's avatar
Raymond Chia committed
            x_test  = test_df.iloc[:, 3:].values
            y_test  = test_df[lbl_str].values.reshape(-1, 1)
        else:
Raymond Chia's avatar
Raymond Chia committed
            x_train_df, y_train_df = get_df_windows(train_df,
                                                    df_win_task,
                                                    window_size=window_size,
                                                    window_shift=window_shift,
                                                    fs=fs,
                                                    cols=data_cols,
                                                   )
            x_train = make_windows_from_id(x_train_df, data_cols)
            x_test  = make_windows_from_id(x_test_df, data_cols)
            y_train = y_train_df['cpm'].values.reshape(-1, 1)
Raymond Chia's avatar
Raymond Chia committed
            y_test  = y_test_df[lbl_str].values.reshape(-1, 1)

        transforms, model = model_training(mdl_str, x_train, y_train,
                                           marker, validation_data=None,
                                           overwrite=overwrite,
                                           is_regression=True,
                                           project_directory=project_dir,
                                           window_size=int(window_size*fs),
                                           extra_train=200,
Raymond Chia's avatar
Raymond Chia committed
                                           poly_deg=1
Raymond Chia's avatar
Raymond Chia committed
                                          )

        if transforms is not None:
            x_test = transforms.transform(x_test)

        preds = model.predict(x_test)

        eval_handle = EvalHandler(y_test.flatten(), preds.flatten(), subject,
                                  pfh, mdl_str, overwrite=overwrite)
        eval_handle.update_eval_history()
        eval_handle.save_eval_history()

        pp = PrettyPrinter()
        pp.pprint(eval_handle.load_eval_history())

Raymond Chia's avatar
Raymond Chia committed
        fig, ax = plt.subplots(2, 1, figsize=(7.3, 4.5))
        fig_title = '_'.join([mdl_str, data_input, subject]+[combi_str])
        fig.suptitle(fig_title)
        ax[0].plot(y_test)
        ax[0].plot(preds)
        ax[0].set_title('raw')

        if lbl_str == 'pss':
            br  = y_test_df['br'].values
            ax[1].plot(movingaverage(y_test, 12), color='tab:blue')
            ax[1].plot(br, 'k')
            ax[1].plot(movingaverage(preds, 12), color='tab:orange')
            ax[1].legend([lbl_str, 'br', 'pred'])
        else:
            ax[1].plot(y_test, 'k')
            ax[1].plot(movingaverage(preds, 12), color='tab:orange')
            ax[1].legend([lbl_str, 'pred'])
        ax[1].set_title('smoothened')
Raymond Chia's avatar
Raymond Chia committed
        fig_dir = join(project_dir, 'figures')
        if not exists(fig_dir): mkdir(fig_dir)
        fig.savefig(join(fig_dir, fig_title+".png"))
        plt.close()
Raymond Chia's avatar
Raymond Chia committed

def arg_parser():
    parser = argparse.ArgumentParser()
    parser.add_argument("-m", '--model', type=str,
                        default='linreg',
                        choices=['linreg', 'ard', 'xgboost', 'knn',
                                 'svr', 'cnn1d', 'fnn', 'lstm', 'ridge',
                                 'elastic'],
                       )
    parser.add_argument("-s", '--subject', type=int,
Raymond Chia's avatar
Raymond Chia committed
                        default=2,
Raymond Chia's avatar
Raymond Chia committed
                        choices=list(range(1,4))+[-1],
Raymond Chia's avatar
Raymond Chia committed
                       )
    parser.add_argument("-f", '--feature_method', type=str,
                        default='minirocket',
                        choices=['tsfresh', 'minirocket', 'None']
                       )
    parser.add_argument("-o", '--overwrite', type=int,
                        default=0,
                       )
    parser.add_argument('--win_size', type=int,
                        default=12,
                       )
    parser.add_argument('--win_shift', type=float,
                        default=0.2,
                       )
    parser.add_argument('-l', '--lbl_str', type=str,
Raymond Chia's avatar
Raymond Chia committed
                        default='pss',
Raymond Chia's avatar
Raymond Chia committed
                       )
    parser.add_argument('-tl', '--train_len', type=int,
Raymond Chia's avatar
Raymond Chia committed
                        default=3,
Raymond Chia's avatar
Raymond Chia committed
                        help='minutes of data to use for calibration'
                       )
Raymond Chia's avatar
Raymond Chia committed
    parser.add_argument('-d', '--data_input', type=str,
                        default='imu',
                        help='imu, bvp, imu+bvp: select data cols for input'
                       )
    parser.add_argument('-ts', '--test_standing', type=int,
                        default=0,
                        help='1 or 0 input, choose if standing data will be '\
                        'recorded or not'
                       )
Raymond Chia's avatar
Raymond Chia committed
    args = parser.parse_args()
    return args

if __name__ == '__main__':
    # choose either intra or inter subject features to use for model training
    # '[!M]*'
    np.random.seed(100)
Raymond Chia's avatar
Raymond Chia committed
    n_subject_max = 2
Raymond Chia's avatar
Raymond Chia committed
    args = arg_parser()

    mdl_str        = args.model
    subject        = args.subject
    feature_method = args.feature_method
    window_size    = args.win_size
    window_shift   = args.win_shift
    lbl_str        = args.lbl_str
    train_len      = args.train_len
    overwrite      = args.overwrite
Raymond Chia's avatar
Raymond Chia committed
    data_input     = args.data_input
    test_standing  = args.test_standing
Raymond Chia's avatar
Raymond Chia committed

    print(args)
    assert train_len>0,"--train_len must be an integer greater than 0"

Raymond Chia's avatar
Raymond Chia committed
    subject_pre_string = 'Pilot'

Raymond Chia's avatar
Raymond Chia committed
    if subject > 0:
Raymond Chia's avatar
Raymond Chia committed
        subject = subject_pre_string+str(subject).zfill(2)
Raymond Chia's avatar
Raymond Chia committed

Raymond Chia's avatar
Raymond Chia committed
        sens_rr_model(subject,
                      window_size=window_size,
                      window_shift=window_shift,
                      lbl_str=lbl_str,
                      mdl_str=mdl_str,
                      overwrite=overwrite,
                      feature_method=feature_method,
                      train_len=train_len,
                      test_standing=test_standing,
                      data_input=data_input,
                     )
Raymond Chia's avatar
Raymond Chia committed
    else:
Raymond Chia's avatar
Raymond Chia committed
        subjects = [subject_pre_string+str(i).zfill(2) for i in \
                    range(1, n_subject_max+1) if i not in imu_issues]
Raymond Chia's avatar
Raymond Chia committed

        rr_func = partial(sens_rr_model,
                          window_size=window_size,
                          window_shift=window_shift,
                          lbl_str=lbl_str,
                          mdl_str=mdl_str,
                          overwrite=overwrite,
                          feature_method=feature_method,
                          train_len=train_len,
                          test_standing=test_standing,
                          data_input=data_input,
                         )
Raymond Chia's avatar
Raymond Chia committed

        if mdl_str in ['fnn', 'lstm', 'cnn1d', 'elastic', 'ard', 'xgboost']:
            for subject in subjects:
Raymond Chia's avatar
Raymond Chia committed
                rr_func(subject)
Raymond Chia's avatar
Raymond Chia committed
        else:
            ncpu = min(len(subjects), cpu_count())
            with Pool(ncpu) as p:
Raymond Chia's avatar
Raymond Chia committed
                p.map(rr_func, subjects)
Raymond Chia's avatar
Raymond Chia committed

    print(args)