Skip to content

Instantly share code, notes, and snippets.

@Shirataki2
Last active August 15, 2018 17:10
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 Shirataki2/6d2e2f962cb62c0933ab9ae882620e2d to your computer and use it in GitHub Desktop.
Save Shirataki2/6d2e2f962cb62c0933ab9ae882620e2d to your computer and use it in GitHub Desktop.
PRML/notes/RVM.ipynb
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"metadata": {
"ExecuteTime": {
"start_time": "2018-08-15T14:31:47.650837Z",
"end_time": "2018-08-15T14:31:52.886830Z"
},
"trusted": true,
"scrolled": false
},
"cell_type": "code",
"source": "import numpy as np\nimport tqdm\nimport os\nimport os.path as path\nimport matplotlib.pyplot as plt\nimport kernels\nfrom scipy.stats import multivariate_normal\nfrom IPython.display import clear_output",
"execution_count": 1,
"outputs": []
},
{
"metadata": {
"ExecuteTime": {
"start_time": "2018-08-15T14:31:52.905795Z",
"end_time": "2018-08-15T14:31:52.920741Z"
},
"trusted": true,
"scrolled": true
},
"cell_type": "code",
"source": "def sin(x):\n return np.sin(2 * np.pi * x)\n\n\ndef generate_data(func, noise_scale, N):\n x = np.random.uniform(size=N)\n t = func(x) + np.random.normal(scale=noise_scale, size=x.shape)\n return x, t\n\n\ndef display_predict(truefunc,\n X_train,\n t_train,\n X_test,\n t_test_m,\n t_test_s,\n text=None,\n name=None,\n show=True):\n fig = plt.figure(figsize=(8, 6))\n plt.fill_between(\n X_test,\n t_test_m - t_test_s,\n t_test_m + t_test_s,\n color='r',\n alpha=0.15)\n plt.plot(X_test, truefunc(X_test), label='Target Curve', c='blue')\n plt.scatter(\n X_train,\n t_train,\n facecolors='none',\n edgecolors='black',\n label='Observated Points',\n alpha=0.6)\n plt.plot(X_test, t_test_m, c='r', label='Predict Curve')\n if text is not None:\n plt.title(text)\n plt.xlabel('$x$')\n plt.ylabel('$t$')\n plt.ylim((-1.75, 1.75))\n if name is not None:\n plt.savefig('{}.png'.format(name))\n if show:\n plt.legend()\n plt.show()\n\n\ndef display_predict2(truefunc,\n X_train,\n t_train,\n model,\n v_rel=None,\n text=None,\n name=None,\n num=200):\n X_test = np.linspace(0, 1, 200)\n t_m, t_s = model.predict(X_test)\n display_predict(\n truefunc, X_train, t_train, X_test, t_m, t_s, text=text, show=False)\n\n def func(x, w): return sum([_w * x**i for i, _w in enumerate(w)])\n if v_rel is not None:\n plt.scatter(X_train[v_rel], t_train[v_rel], c='g',\n s=75, marker='^', label='Relevance Vector',alpha=0.7)\n plt.legend(loc='lower left')\n plt.xlim((0, 1))\n if name is not None:\n p = path.dirname(name)\n os.makedirs(p, exist_ok=True)\n plt.savefig('{}.png'.format(name))\n plt.show()\n plt.close()",
"execution_count": 2,
"outputs": []
},
{
"metadata": {
"ExecuteTime": {
"start_time": "2018-08-15T14:31:57.013360Z",
"end_time": "2018-08-15T14:31:57.020341Z"
},
"trusted": true,
"scrolled": true
},
"cell_type": "code",
"source": "class RelevanceVectorMachineRegression(object):\n def __init__(self, kernel):\n self.kernel = kernel\n self.alpha = None\n self.beta = None\n self.isnan = False\n \n def calc_design_matrix(self, x, y=None):\n if y is None:\n phi = self.kernel(*np.meshgrid(x, x))\n else:\n phi = self.kernel(*np.meshgrid(x, y, indexing='ij'))\n return phi\n\n def fit(self, x, t):\n self.x = x\n pass\n\n def predict(self, x):\n phi = self.calc_design_matrix(x, self.x)\n t_m = phi.dot(self.w_m)\n t_v = 1/self.beta + np.sum(phi.dot(self.w_s) * phi, axis=1)\n t_s = np.sqrt(t_v)\n return t_m, t_s",
"execution_count": 3,
"outputs": []
},
{
"metadata": {
"ExecuteTime": {
"start_time": "2018-08-15T14:31:57.803444Z",
"end_time": "2018-08-15T14:31:57.812436Z"
},
"trusted": true,
"scrolled": true
},
"cell_type": "code",
"source": "class RelevanceVectorMachineRegressionWithEvidence(\n RelevanceVectorMachineRegression):\n def __init__(self, kernel, alpha, beta):\n super(RelevanceVectorMachineRegressionWithEvidence, self).__init__(\n kernel=kernel)\n self.alpha = alpha\n self.beta = beta\n def fit_1(self, x, t, lr=1e-2):\n if isinstance(self.alpha,int) or isinstance(self.alpha,float):\n self.alpha = np.ones_like(x)*self.alpha\n self.phi = self.calc_design_matrix(x)\n pred_param=np.hstack([self.alpha, self.beta])\n phi = self.phi\n self.x = x\n self.t = t\n A = np.diag(self.alpha)\n self.pre = A + self.beta*phi.T.dot(phi)\n\n self.w_s = np.linalg.inv(self.pre)\n self.w_m = self.beta * self.w_s.dot(phi.T).dot(t)\n self.gamma = 1 - self.alpha*np.diag(self.w_s)\n self.alpha = self.gamma / np.square(self.w_m)\n self.alpha = np.clip(self.alpha, 0, 1e10)\n N = len(x)\n self.beta = (N - np.sum(self.gamma))/ \\\n np.sum((t - phi.dot(self.w_m))**2)\n new_param=np.hstack([self.alpha, self.beta])\n return np.allclose(pred_param, new_param, atol=1e-4, rtol=1e-4)\n\n def fit(self, x, t, iter_num=10000):\n for i in range(iter_num):\n if self.fit_1(x, t):\n break\n else:\n print('[w] hyperparameter(s) may not converge yet.')\n print('[*] {} iteration(s) has proceeded.'.format(i))",
"execution_count": 4,
"outputs": []
},
{
"metadata": {
"ExecuteTime": {
"start_time": "2018-08-13T14:27:23.638266Z",
"end_time": "2018-08-13T14:27:23.647250Z"
},
"trusted": true,
"scrolled": true
},
"cell_type": "code",
"source": "class SuccessiveRVM(\n RelevanceVectorMachineRegressionWithEvidence):\n def __init__(self, kernel, beta):\n super(RelevanceVectorMachineRegressionWithEvidence, self).__init__(\n kernel=kernel, alpha=None, beta=beta)\n self.alpha = None\n\n def calc_cov_matrix(self, alpha, x, y=None):\n if y is None:\n phi = self.kernel(*np.meshgrid(x, x))\n else:\n phi = self.kernel(*np.meshgrid(x, y, indexing='ij'))\n c = 1/self.beta*np.ones_like(phi)+1/alpha*phi\n return c\n\n def fit_1(self, x, t, lr=1e-2):\n if self.alpha is None:\n self.alpha = np.ones_like(x)*1e10\n self.phi = self.calc_cov_matrix(x)\n pred_param = np.hstack([self.alpha, self.beta])\n phi = self.phi\n self.x = x\n self.t = t\n A = np.diag(self.alpha)\n self.pre = A + self.beta*phi.T.dot(phi)\n\n self.w_s = np.linalg.inv(self.pre)\n self.w_m = self.beta * self.w_s.dot(phi.T).dot(t)\n self.gamma = 1 - self.alpha*np.diag(self.w_s)\n self.alpha = self.gamma / np.square(self.w_m)\n self.alpha = np.clip(self.alpha, 0, 1e10)\n N = len(x)\n self.beta = (N - np.sum(self.gamma)) / \\\n np.sum((t - phi.dot(self.w_m))**2)\n new_param = np.hstack([self.alpha, self.beta])\n return np.allclose(pred_param, new_param, atol=1e-4, rtol=1e-4)\n\n def fit(self, x, t, iter_num=10000):\n for i in range(iter_num):\n if self.fit_1(x, t):\n break\n else:\n print('[w] hyperparameter(s) may not converge yet.')\n print('[*] {} iteration(s) has proceeded.'.format(i))",
"execution_count": 222,
"outputs": []
},
{
"metadata": {
"ExecuteTime": {
"start_time": "2018-08-15T14:32:45.975199Z",
"end_time": "2018-08-15T14:32:47.002465Z"
},
"trusted": true
},
"cell_type": "code",
"source": "%%time\nN = 30\n\nX, t = generate_data(sin, 0.2, N)\n\nkernel = kernels.GaussianKernel([1., 50])\nmodel = RelevanceVectorMachineRegressionWithEvidence(kernel, 1., 1.)\nmodel.fit(X, t, 10000)\nv_rel = np.abs(model.w_m) > 1/kernel.p[1]\ntry:\n sparse = np.bincount(np.where(model.alpha < 1e9, 1, 0))[1] \nexcept:\n sparse = 0\ntry:\n infty = np.bincount(np.where(model.alpha > 1e9, 1, 0))[1]\nexcept:\n infty = 0\ndisplay_predict2(sin, X, t, model, v_rel,\n text=r'$N={:d},\\alpha:(N_0={:d},N_\\infty={:d}),\\beta={:.2f}$'.format(N, sparse, infty, model.beta))",
"execution_count": 14,
"outputs": [
{
"name": "stdout",
"text": "[*] 2897 iteration(s) has proceeded.\n",
"output_type": "stream"
},
{
"output_type": "display_data",
"metadata": {},
"data": {
"text/plain": "<Figure size 576x432 with 1 Axes>",
"image/png": "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\n"
}
},
{
"name": "stdout",
"text": "Wall time: 1.02 s\n",
"output_type": "stream"
}
]
},
{
"metadata": {
"ExecuteTime": {
"start_time": "2018-08-11T13:05:23.623902Z",
"end_time": "2018-08-11T13:12:21.074209Z"
},
"trusted": true
},
"cell_type": "code",
"source": "N = 25\n\nX, t = generate_data(sin, 0.3, N)\n\nkernel = kernels.GaussianKernel([1., 50.])\nmodel = RelevanceVectorMachineRegressionWithEvidence(kernel, 1., 1.)\nfor i in tqdm.tnrange(10000):\n if model.fit_1(X, t):\n break\n v_rel = np.abs(model.w_m) > 1/kernel.p[1]\n try:\n sparse = np.bincount(np.where(model.alpha < 1e9, 1, 0))[1]\n except:\n sparse = 0\n try:\n infty = np.bincount(np.where(model.alpha > 1e9, 1, 0))[1]\n except:\n infty = 0\n display_predict2(sin, X, t, model, v_rel,\n text=r'$N={:d},\\alpha:(N_0={:d},N_\\infty={:d}),\\beta={:.2f}$'.format(N,sparse,infty,model.beta),name='./1-1/{:04d}'.format(i))",
"execution_count": 261,
"outputs": [
{
"output_type": "display_data",
"metadata": {},
"data": {
"text/plain": "HBox(children=(IntProgress(value=0, max=10000), HTML(value='')))",
"application/vnd.jupyter.widget-view+json": {
"version_major": 2,
"version_minor": 0,
"model_id": "72fb6399ebf44bab8a5985bc490250cd"
}
}
},
{
"name": "stdout",
"text": "\n",
"output_type": "stream"
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "",
"execution_count": null,
"outputs": []
}
],
"metadata": {
"_draft": {
"nbviewer_url": "https://gist.github.com/6d2e2f962cb62c0933ab9ae882620e2d"
},
"kernelspec": {
"name": "conda-env-tensorflow-py",
"display_name": "Python [conda env:tensorflow]",
"language": "python"
},
"gist": {
"id": "6d2e2f962cb62c0933ab9ae882620e2d",
"data": {
"description": "PRML/notes/RVM.ipynb",
"public": true
}
},
"language_info": {
"version": "3.5.5",
"name": "python",
"pygments_lexer": "ipython3",
"file_extension": ".py",
"nbconvert_exporter": "python",
"codemirror_mode": {
"version": 3,
"name": "ipython"
},
"mimetype": "text/x-python"
},
"varInspector": {
"window_display": false,
"cols": {
"lenName": 16,
"lenType": 16,
"lenVar": 40
},
"kernels_config": {
"python": {
"library": "var_list.py",
"delete_cmd_prefix": "del ",
"delete_cmd_postfix": "",
"varRefreshCmd": "print(var_dic_list())"
},
"r": {
"library": "var_list.r",
"delete_cmd_prefix": "rm(",
"delete_cmd_postfix": ") ",
"varRefreshCmd": "cat(var_dic_list()) "
}
},
"types_to_exclude": [
"module",
"function",
"builtin_function_or_method",
"instance",
"_Feature"
]
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment