Skip to content

Instantly share code, notes, and snippets.

@robinvanemden
Forked from tushuhei/LinUCB.ipynb
Created November 16, 2017 23:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save robinvanemden/d0789f68e2c63cf7e7faba37e4a57e46 to your computer and use it in GitHub Desktop.
Save robinvanemden/d0789f68e2c63cf7e7faba37e4a57e46 to your computer and use it in GitHub Desktop.
LinUCB implementation based on Chu, Wei, et al. "Contextual Bandits with Linear Payoff Functions." AISTATS. Vol. 15. 2011.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"LinUCB implementation based on Chu, Wei, et al. \"Contextual Bandits with Linear Payoff Functions.\" AISTATS. Vol. 15. 2011."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"%matplotlib inline\n",
"import numpy as np\n",
"from matplotlib import pylab as plt\n",
"np.random.seed(0)"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"class Environment(object):\n",
" def __init__(self):\n",
" self.theta = (-0.1, 0.2, 0.2)\n",
" self.p = lambda arm: 0.2 + np.dot(self.theta, arm)\n",
"\n",
" def sample(self, arm):\n",
" return 1 if np.random.random() < self.p(arm) else 0\n",
" \n",
" def best_arm(self, arms):\n",
" return np.argmax([self.p(arm) for arm in arms])"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"class UCBAgent(object):\n",
" def __init__(self):\n",
" self.arms = [\n",
" (1, 0, 0),\n",
" (0, 1, 0),\n",
" (1, 0, 1),\n",
" (0, 1, 1)\n",
" ]\n",
" self.h = []\n",
" self.T = []\n",
"\n",
" def get_ucbs(self):\n",
" T = np.array(self.T)\n",
" h = np.array(self.h)\n",
" ucbs = [(\n",
" np.mean(T[h==arm_idx]) +\n",
" np.sqrt(2 * np.log(len(T)) / len(T[h==arm_idx])))\n",
" if len(T[h==arm_idx]) > 0 else np.inf\n",
" for arm_idx, arm in enumerate(self.arms)]\n",
" return ucbs\n",
" \n",
" def learn(self):\n",
" ucbs = self.get_ucbs()\n",
" arm_idx = ucbs.index(max(ucbs))\n",
" return self.arms[arm_idx]\n",
" \n",
" def sample(self, t, arm):\n",
" arm_idx = self.arms.index(arm)\n",
" self.T.append(t)\n",
" self.h.append(arm_idx)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"class LinUCBAgent(object):\n",
" def __init__(self):\n",
" self.arms = [\n",
" (1, 0, 0),\n",
" (0, 1, 0),\n",
" (1, 0, 1),\n",
" (0, 1, 1)\n",
" ]\n",
" self.h = []\n",
" self.T = []\n",
" self.alpha = 2\n",
" self.A = np.identity(3)\n",
" self.b = np.atleast_2d(np.zeros(3)).T\n",
"\n",
" def get_ucbs(self):\n",
" T = np.array(self.T)\n",
" h = np.array(self.h)\n",
" theta = np.dot(np.linalg.inv(self.A), self.b)\n",
" ucbs = []\n",
" for arm in self.arms:\n",
" arm = np.atleast_2d(arm).T\n",
" ucb = np.dot(theta.T, arm)\n",
" ucb += self.alpha * np.sqrt(np.dot(arm.T, np.dot(np.linalg.inv(self.A), arm)))\n",
" ucbs.append(ucb[0][0])\n",
" return ucbs\n",
" \n",
" def learn(self): \n",
" ucbs = self.get_ucbs()\n",
" return self.arms[ucbs.index(max(ucbs))]\n",
" \n",
" def sample(self, t, arm):\n",
" arm_idx = self.arms.index(arm)\n",
" self.T.append(t)\n",
" self.h.append(arm_idx)\n",
" self.update(arm, t)\n",
" \n",
" def update(self, arm, t):\n",
" arm = np.atleast_2d(arm).T\n",
" self.A += np.dot(arm, arm.T)\n",
" self.b += t * arm"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [],
"source": [
"ucb_agents = []\n",
"linucb_agents = []\n",
"env = Environment()\n",
"for sim in range(100):\n",
" agent = UCBAgent()\n",
" for i in range(1000):\n",
" arm = agent.learn()\n",
" reward = env.sample(arm)\n",
" agent.sample(reward, arm)\n",
" ucb_agents.append(agent)\n",
"\n",
" agent = LinUCBAgent()\n",
" for i in range(1000):\n",
" arm = agent.learn()\n",
" reward = env.sample(arm)\n",
" agent.sample(reward, arm)\n",
" linucb_agents.append(agent)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.legend.Legend at 0x10f947be0>"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x112fbc710>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.plot(np.cumsum(np.mean(np.array([agent.T for agent in ucb_agents]), axis=0)), label='ucb')\n",
"plt.plot(np.cumsum(np.mean(np.array([agent.T for agent in linucb_agents]), axis=0)), label='linucb')\n",
"plt.xlabel('step')\n",
"plt.ylabel('cumulative rewards')\n",
"plt.legend()"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false,
"scrolled": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.legend.Legend at 0x1132cec50>"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x111518dd8>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"best_arm = env.best_arm(ucb_agents[0].arms)\n",
"plt.plot(np.mean(np.array([agent.h for agent in ucb_agents])==best_arm, axis=0), label='ucb')\n",
"plt.plot(np.mean(np.array([agent.h for agent in linucb_agents])==best_arm, axis=0), label='linucb')\n",
"plt.xlabel('step')\n",
"plt.ylabel('accuracy')\n",
"plt.legend()"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.0"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment