예제 #1
0
def run_mini_monster(Bconstructor,
                     Bval,
                     learning_algs,
                     rewards,
                     risks,
                     val,
                     T,
                     slate_len,
                     i,
                     start,
                     params=None):
    for (k, v) in learning_algs.items():
        if params is None:
            B = Bconstructor()
            M = Semibandits.MiniMonster(B,
                                        learning_alg=v,
                                        classification=False)
            (r, reg, val_tmp) = M.play(T,
                                       verbose=True,
                                       params={'weight': np.ones(slate_len)},
                                       validate=Bval)
            rewards['mini_%s' % (k)].append(r)
            print("Num Uniform Actions: %d" % (M.num_unif), flush=True)
            np.savetxt(outdir + "mini_%s_rewards_%d.out" % (k, i), r)
            if Bval is not None:
                val['mini_%s' % (k)].append(val_tmp)
                print('Mini %s Final Validation %0.2f' %
                      (k, val['mini_%s' % (k)][i - start][-1]),
                      flush=True)
                np.savetxt(outdir + "mini_%s_validation_%d.out" % (k, i),
                           val_tmp)
        if params is not None:
            for a in params:
                B = Bconstructor()
                M = Semibandits.MiniMonster(B,
                                            learning_alg=v,
                                            classification=False)
                (r, reg, val_tmp) = M.play(T,
                                           verbose=True,
                                           params={
                                               'weight': np.ones(slate_len),
                                               'mu': a
                                           },
                                           validate=Bval)

                rewards['mini_%s_%0.3f' % (k, a)].append(r)
                print("Num Uniform Actions: %d" % (M.num_unif), flush=True)
                np.savetxt(outdir + "mini_%s_%0.3f_rewards_%d.out" % (k, a, i),
                           r)
                if Bval is not None:
                    val['mini_%s_%0.3f' % (k, a)].append(val_tmp)
                    print('Mini %s %0.3f Final Validation %0.2f' %
                          (k, a, val['mini_%s_%0.3f' % (k, a)][i - start][-1]),
                          flush=True)
                    np.savetxt(
                        outdir + "mini_%s_%0.3f_validation_%d.out" % (k, a, i),
                        val_tmp)
    return (rewards, risks, val)
예제 #2
0
 def init_minimonster(self):
     learning_alg = lambda: sklearn.linear_model.LinearRegression()
     self.base_learner = Semibandits.MiniMonster(self.passthrough,
                                                 learning_alg=learning_alg,
                                                 classification=False)
     self.base_learner.init(self.T, params={'mu': self.mu})
     self.base_learner.verbose = False
예제 #3
0
def run_lin_ucb(Bconstructor,
                Bval,
                rewards,
                risks,
                val,
                T,
                slate_len,
                i,
                start,
                params=None):
    if params is None:
        B = Bconstructor()
        L = Semibandits.LinUCB(B)
        (r, reg, val_tmp) = L.play(T, verbose=True, validate=Bval)
        rewards['lin'].append(r)
        np.savetxt(outdir + "lin_rewards_%d.out" % (i), r)

        if Bval is not None:
            np.savetxt(outdir + "lin_validation_%d.out" % (i), val_tmp)
            val['lin'].append(val_tmp)
            print('Lin Final Validation %0.2f' % (val['lin'][i - start][-1]),
                  flush=True)
    if params is not None:
        for a in params:
            B = Bconstructor()
            L = Semibandits.LinUCB(B)
            (r, reg, val_tmp) = L.play(T,
                                       verbose=True,
                                       validate=Bval,
                                       params={'delta': a})
            rewards['lin_%0.5f' % (a)].append(r)
            np.savetxt(outdir + "lin_%0.5f_rewards_%d.out" % (a, i), r)
            if Bval is not None:
                np.savetxt(outdir + "lin_%0.5f_validation_%d.out" % (a, i),
                           val_tmp)
                val['lin_%0.5f' % (a)].append(val_tmp)
                print('Lin %0.5f Final Validation %0.2f' %
                      (a, val['lin_%0.5f' % (a)][i - start][-1]),
                      flush=True)
    return (rewards, risks, val)
예제 #4
0
def LinearExperiment(ks, ds, iters=5, T=100):
    """
    Run LinUCB against MiniMonster on a synthetic LinearBandit problem.
    """
    outs = {}
    for k in ks:
        outs[k] = {}
        for d in ds:
            outs[k][d] = []
            for i in range(iters):
                print("Starting simulation with k=%d d=%d i=%d" % (k, d, i),
                      flush=True)
                B = Simulators.LinearBandit(d, 1, k, noise=True)
                M = Semibandits.MiniMonster(
                    B, sklearn.linear_model.LinearRegression)
                (r, reg) = M.play(T, verbose=False)
                L = Semibandits.LinUCB(B)
                (r2, reg2) = L.play(T, verbose=False)
                print("MiniMonster: %0.2f LinUCB: %0.2f" %
                      (r[len(r) - 1], r2[len(r2) - 1]),
                      flush=True)
                outs[k][d].append((r, r2))
    return outs
예제 #5
0
 def init_linucb(self):
     self.base_learner = Semibandits.LinUCB(self.passthrough)
     self.base_learner.init(self.T, params={'delta': self.delta})
예제 #6
0
    if Args.param is not None:
        Args.param = float(Args.param)

    rewards = []
    regrets = []
    for i in range(Args.iters):
        S = Simulators.LinearBandit(Args.d,
                                    1,
                                    Args.K,
                                    noise=Args.noise,
                                    seed=i,
                                    pos=False,
                                    low=Args.s)
        if Args.alg == 'linucb':
            Alg = Semibandits.LinUCB(S)
            if Args.param is not None:
                start = time.time()
                (r, reg, val_tmp) = Alg.play(Args.T,
                                             verbose=True,
                                             params={
                                                 'delta': Args.param,
                                                 'schedule': 10
                                             })
                stop = time.time()
        if Args.alg == 'limecb':
            Alg = LimeCB(S)
            if Args.param is not None:
                start = time.time()
                (r, reg, val_tmp) = Alg.play(Args.T,
                                             verbose=True,
예제 #7
0
파일: Bose.py 프로젝트: zeta1999/oracle_cb
            S = Simulators.SemiparametricBandit(Args.d,
                                                1,
                                                Args.K,
                                                noise=Args.noise,
                                                seed=i,
                                                pos=True)
        if Args.dataset == 'semiparametric' and Args.feat == 'sphere':
            S = Simulators.SemiparametricBandit(Args.d,
                                                1,
                                                Args.K,
                                                noise=Args.noise,
                                                seed=i,
                                                pos=False)

        if Args.alg == 'linucb':
            Alg = Semibandits.LinUCB(S)
            if Args.param is not None:
                start = time.time()
                (r, reg, val_tmp) = Alg.play(Args.T,
                                             verbose=True,
                                             params={
                                                 'delta': Args.param,
                                                 'schedule': 1
                                             })
                stop = time.time()
        if Args.alg == 'bose':
            Alg = BOSE(S)
            if Args.param is not None:
                start = time.time()
                (r, reg, val_tmp) = Alg.play(Args.T,
                                             verbose=True,