Ejemplo n.º 1
0
        return x * (1 - x) if derivative else 1 / (1 + np.exp(-x))

    best_w = sigmoid(best_w)
    print()
    with np.printoptions(precision=2, suppress=True):
        print(best_loss_v)
        for l in best_w:
            for e in l:
                print('%.2f' % e, end=' ')
            print()
        print()

        print(np.sum(best_w, axis=0))

    weighted_inp = np.mean(valid_merged, axis=1)
    best_th = threshold_search(weighted_inp, valid_ohs)
    __best_threshold = best_th
    f1_best = get_f1_threshold(weighted_inp, valid_ohs, __best_threshold)
    print(__best_threshold)
    print('f1_best(all, naive valid)=%.4f' % f1_best)

    weighted_inp = np.mean(valid_v, axis=1)
    best_th = threshold_search(weighted_inp, valid_ohs_v)
    __best_threshold = best_th
    f1_best = get_f1_threshold(weighted_inp, valid_ohs_v, __best_threshold)
    print(__best_threshold)
    print('f1_best(naive valid)=%.4f' % f1_best)

    weighted_valid = valid_v * best_w
    weighted_valid = np.sum(weighted_valid, axis=1)
    weighted_valid = np.clip(weighted_valid, 0.0, 1.0)
    # f1_best = get_f1_threshold(weighted_inp, valid_ohs, __best_threshold)
    # print(__best_threshold)
    # print('f1_best(naive valid)=%.4f' % f1_best)
    #
    # weighted_inp = np.mean(valid_v, axis=1)
    # best_th = threshold_search(weighted_inp, valid_ohs_v)
    # __best_threshold = best_th
    # __best_threshold_naive = best_th
    # f1_best = get_f1_threshold(weighted_inp, valid_ohs_v, __best_threshold)
    # print(__best_threshold)
    # print('f1_best(naive valid_v)=%.4f' % f1_best)

    out = eval_batch(train_v, train_logit_v)
    out = out.detach().cpu().numpy()

    best_th = threshold_search(out, train_ohs_v)
    __best_threshold = best_th
    f1_best = get_f1_threshold(out, train_ohs_v, __best_threshold)

    print(__best_threshold)
    print('f1_best(train_v)=', f1_best)

    out = eval_batch(valid_merged, valid_logit)
    out = out.detach().cpu().numpy()

    f1_best = get_f1_threshold(out, valid_ohs, __best_threshold)

    print(__best_threshold)
    print('f1_best(valid)=', f1_best)

    best_th = threshold_search(out, valid_ohs)
                 metrics="merror",
                 seed=100)
    print(cvr['train-merror-mean'].tail(1))
    print(cvr['test-merror-mean'].tail(1))
    print('-----')

    print('----- train on subset')
    xg_subset_t = xgb.DMatrix(valid_expand_t, label=valid_lbs_t)
    xg_subset_v = xgb.DMatrix(valid_expand_v, label=valid_lbs_v)
    bst = xgb.train(param,
                    xg_subset_t,
                    num_round, [(xg_subset_t, 'train'),
                                (xg_subset_v, 'valid')],
                    early_stopping_rounds=early_stop)
    xgpred_val = bst.predict(xgb.DMatrix(valid_merged[:split_idx]))
    best_th = threshold_search(xgpred_val, valid_ohs[:split_idx])
    __best_threshold = best_th
    f1_best = get_f1_threshold(xgpred_val, valid_ohs[:split_idx],
                               __best_threshold)
    print(__best_threshold)
    print('f1_best=', f1_best)

    sys.exit(0)

    # print('----------- train')
    # bst = xgb.train(param, xg_train, num_round, watchlist, early_stopping_rounds=early_stop)
    #
    # xgpred_val = bst.predict(xg_train2)
    # best_th = threshold_search(xgpred_val, valid_ohs)
    # __best_threshold = best_th
    # f1_best = get_f1_threshold(xgpred_val, valid_ohs, __best_threshold)
        print('test result @ epoch=%d' % best_valid_epoch)
    else:
        print('load...')
        checkpoint = torch.load('asset/%s.best.pt' % C.get()['name'])
        model.load_state_dict(checkpoint['model_state_dict'])
        print('epoch@%d' % checkpoint['epoch'])

        # only for evaluation
        tta = True
        d_train, d_cvalid, d_tests = get_dataloaders_eval(tta)
        model.eval()

        # ----- train (sampled) -----
        train_result = run_epoch(model, d_train, title='train', aug=tta)
        best_th = threshold_search(train_result['prediction'],
                                   train_result['labels'])
        __best_threshold = best_th
        print('best_th(train)=', __best_threshold)

        preds_concat = np.concatenate(train_result['prediction'], axis=0)
        ys_concat = np.concatenate(train_result['labels'], axis=0)
        f1_train = get_f1_threshold(preds_concat, ys_concat, __best_threshold)
        print('f1(train)=', f1_train)

        # ----- cvalid -----
        cvalid_result = run_epoch(model, d_cvalid, title='valid', aug=tta)
        best_th = threshold_search(cvalid_result['prediction'],
                                   cvalid_result['labels'])
        __best_threshold = best_th
        print('best_th(cvalid)=', __best_threshold)
        loss = loss_fn(out, lb)
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()

        ma_loss_t = ma_loss_t * 0.9 + loss.item() * 0.1

    print()
    # net.load_state_dict(best_model)

    net.eval()
    th_flat = True

    weighted_inp = np.mean(train_merged, axis=1)
    best_th = threshold_search(weighted_inp, train_ohs, flat=th_flat)
    __best_threshold = best_th
    f1_best = get_f1_threshold(weighted_inp, train_ohs, __best_threshold)
    print(__best_threshold)
    print('f1_best(naive train)=%.4f' % f1_best)

    weighted_inp = np.mean(train_v, axis=1)
    best_th = threshold_search(weighted_inp, train_ohs_v, flat=th_flat)
    __best_threshold = best_th
    f1_best = get_f1_threshold(weighted_inp, train_ohs_v, __best_threshold)
    print(__best_threshold)
    print('f1_best(naive train_v)=%.4f' % f1_best)

    weighted_inp = np.mean(valid_merged, axis=1)
    f1_best = get_f1_threshold(weighted_inp, valid_ohs, __best_threshold)
    print('f1_best(naive valid)=%.4f' % f1_best)