elif i == 1: return 0 elif i == 2: return 5 elif 2 * T / 3 < t: if i == 0: return 1 elif i == 1: return 0 elif i == 2: return -1 # construct forecaster eta = np.sqrt(2 * np.log(N) / T) F = EWAForecaster(N, eta) # we use the L2 loss def loss(p, y): return np.sqrt((p - y)**2) # run experiment e_losses = np.zeros((T, N)) F_losses = np.zeros(T, ) for t in xrange(T): e_losses[t, :] = np.array([expert(i, t) for i in xrange(N)]) F_losses[t] = F.predict(e_losses[t, :]) F.observe(e_losses[t, :])
# parameters p = 0.8 d = [0.2, 0.3, 0.0] sigma = 0.01 T = 12000 # construct experts def expert(i): e = np.random.normal(0, sigma) return p - d[i] + e # construct forecaster N = len(d) eta = np.sqrt(2*np.log(N)/T) F = EWAForecaster(N, eta) # we use the L2 loss def loss(p, y): return np.sqrt((p-y)**2) # run experiment e_losses = np.zeros((T,N)) F_losses = np.zeros(T,) Y = np.zeros(T,) e_pred = np.zeros((T,N)) for t in xrange(T): e_t = np.array([expert(i) for i in xrange(N)]) e_pred[t,:] = e_t p_t = F.predict(e_t)
return 1 elif i == 1: return 0 elif i == 2: return 5 elif 2*T/3 < t : if i == 0: return 1 elif i == 1: return 0 elif i == 2: return -1 # construct forecaster eta = np.sqrt(2*np.log(N)/T) F = EWAForecaster(N, eta) # we use the L2 loss def loss(p, y): return np.sqrt((p-y)**2) # run experiment e_losses = np.zeros((T,N)) F_losses = np.zeros(T,) for t in xrange(T): e_losses[t,:] = np.array([expert(i,t) for i in xrange(N)]) F_losses[t] = F.predict(e_losses[t,:]) F.observe(e_losses[t,:]) # plot the losses for i in xrange(N):
p = 0.8 d = [0.2, 0.3, 0.0] sigma = 0.01 T = 12000 # construct experts def expert(i): e = np.random.normal(0, sigma) return p - d[i] + e # construct forecaster N = len(d) eta = np.sqrt(2 * np.log(N) / T) F = EWAForecaster(N, eta) # we use the L2 loss def loss(p, y): return np.sqrt((p - y)**2) # run experiment e_losses = np.zeros((T, N)) F_losses = np.zeros(T, ) Y = np.zeros(T, ) e_pred = np.zeros((T, N)) for t in xrange(T): e_t = np.array([expert(i) for i in xrange(N)]) e_pred[t, :] = e_t