Skip to content

Instantly share code, notes, and snippets.

@amn41
Created September 30, 2016 08:06
Show Gist options
  • Save amn41/9b9a592369dd71d86260a6ba9e4affd9 to your computer and use it in GitHub Desktop.
Save amn41/9b9a592369dd71d86260a6ba9e4affd9 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"To start with, we just show how to sample functions from a GP prior. We define a Kernel function, and sample a set of points from a GP by multiplying a random vector with the Cholesky decomposition of the Gram matrix."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAXgAAAEDCAYAAAA/eB+kAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XuUVdWdJ/DvlaouXvUSCmiBwgfsKg2g+EgyESYabXyM\nIzqZtBpJTCexDQrjansFbVkmmXYx6TLTji2JedBJxiwxZtmJoD1x1An2ROysiE0NkrRVGxShgA4v\nq4qCgoKCO3/cOufse+q8z7nndb8fl2tRVefee+6+9/7Ovr/923sDRERERERERERERERERERERERE\nRES5VAhzYyHETAA/ATAFQBHAD6SUT0ZxYkREFM5ZIW9/CsBfSCk/AuDjAO4TQlwY/rSIiChVhBDr\nhRDXJH0eREQUvgevE0KcC2ABgN9GdZ9ERBRcJAFeCDERwD8AuF9KeTSK+yQionBqwt6BEKIWwM8B\nPCOlXO907J8+t6w4d2obHrnq/rAPS0RUNQqFQqCCmLBVNAUATwM4LKX8C7fjP/PcV4oA0FTXiHvm\n34XW+hlhHj7TWlrqcfDgQNKnkQpsCwPbwsC2MEyZ0hAoVodN0VwJYCmAq4UQnSP/X+92o76hfnz/\nnadDPjQRETkJlaKRUm5ChAO1REQUnUSCs5aiISKiyok9wNcUatA/dASPbV6DNZ1r4354IqKqEbqK\nxteDnVWD4TPD+s9dvdtx/+sPY7g4jAIKaGuejRUL7o7zlIiIcivWHvzpM6dH/W64WAr4RRTR1bsd\nq95cjd0De+I8LSKiXErdAGnfUD86Nj/J9A0RUUixBvi5U9s8H8vePBFROLEG+Eeuuh9NdY36zzUF\n5yEA1ssTEQUXe4rmnvl3oamuEU11jfjLy+8tC/hERBSdWKtoAKC1fgZWX7lK//me+Xfh++88jaMn\nj+kDrhrWyxMRBRd7gDdTA/6qN1ejb6gfQCm4qxcCIiLyJ1VVNGr6hj13IqJwEu/Bq8zpGyIiCi5V\nAV61pnMtunt3AADammcDQNnPnPFKROQsVSkazZrOtejq3Y7iyH9dvdtH/cwaeSIiZ6kM8FpP3Qlr\n5ImInKUywBMRUXipDPBazt0JK22IiJylMsCvWHB32QxXrXRS/Xn1lauqek9XIiI3qQzwwOiaeNbI\nExH5E2in7qCKxWKRu6SXcMd4A9vCwLYwsC0MU6Y0BIrVqe3BExFROAzwREQ5ldqZrE7Ms1w5q5WI\naLTMBXhtlquGG3cTEVnLXIC3muVq3rj7vo0rAQDja8bh+PAJAOzpE1H1yXUOfnD4ONevIaKqlbkA\n72WWqx2uX0NE1SRzAd48y9Vt424iomqVuQAPBN+4m7NgiaiaZLL7a7dxNwAMnxnG0VPHAAAFFFBE\nEQD3eCWi6pPJAG+mBvzdA3v0YL/kghuw4b2XAZQuAmr9/LiasaywIaJcq5q1aMz182Za+iauFSq5\nzoaBbWFgWxjYFgauRePCbZcoVtgQUd5UTYAnIqo2VRPg3ernWWFDRHmTi0FWL1YsuBur3lyNvqF+\nAM4VNlzMjIjyIHQPXgjxIyHEfiHEtihOqJLU+vnPX3Sb5Q5R2mCsusTBfRtX4r6NK7Gmc22CZ09E\n5E/oKhohxCIARwH8REo5z+nYNO/opPXatV69naiqbVghYGBbGNgWBraFIbEqGinlGwB6w95PktRe\nuxtW2xBRVlTNIKsTtxJKIqIsin2QtaWlPu6HjNTZ45qwcuEytJxdj0f/6e/wu/3dAIC5U9vwyFX3\n+7qvrLdFlNgWBraFgW0RTuwBPo05tbbm2aNmuRZQwITa8QCgr23TVNeIR//dw8Bp4GuvPl52m237\nu/Dn6x/ynJ9nftHAtjCwLQxsi/CYosHoJYib6hrx7U91oGPR13HfJV+yrLaxSuswP09EaRK6By+E\n+CmATwKYJIToAfA1KeWPQ59ZzNQVKdVAbl65kogoK0IHeCnlHVGcSNL8BnKrtI7ay8/rZKkonpf5\nPv568QMVeyyialY1q0lWgjozVp0Na7Vypbl+Pov5RS/PK8h9nD2uCXfP/XzZfUTxWFmUxfdFpbAt\nDFxNMgHqzNjGugYs3/gglm980HJZ4jzk56MYd7C6jw+P9426D45xEIVXNWvRRMWcNlh95SrXteb9\n3F8W0xB9Q/1Y07k2lnOP87GIso4pGh/s0gZamsaJVYrGXGppPi7OHai8PFbQTVPM9z04fNzy9u3N\nc0I/VtYxLWFgWxiCpmgY4H1YvvFBT8sZmFntB9vSUo/bfnav7f2NrxlnGwi1+7S6EJiDv5dvCH6C\nqTruYKeAgv5YVvetruQZ5rHyuM8ug5qBbWFggI+BXYCvKdRguDhc9ruJtRMBFFFzVo1lT9MtwHvR\nVNeIaeOn2H4L2LDjZU8DlV4vXAUUMKt+BvpOHvH0rcXtvpwe0+tjqReTPGBQM7AtDAzwMXCq7Pj+\nO09bVtTY3Y+XlSvDaKprRP/QEcvH0C4MWs/e73log8q7jvRU5PyCPFZeUjaVDmpZ2nieAd7AAB8T\nu9LI3QN7yiZKmUv+vOSgo+QUQK2+cQS5fwCBevJO3zDCPJbVhTVrg9hOQS3sc8nauAYDvIEBPiZO\ngdxKmAobNY3hltKwYpXH9zIo7OWx1G8uADz36M1B2EtO3/xYTse7DdSmLYiZ2QU1p+eyYcfLngK/\nl1RcmsY1GOANDPAp5TW/be6lmoPakgtuwIb3Xi47xgurrQntzqmAAhrrGsoeyypw2wVJp2CtLd52\n3yVfKrvd7oE9WPu7n+DMmaLnx3K7aLp9Q0lTEDOzC2p+xn+035nHJxjgs4sBPqW8fqi0JQ68fDvw\nW5miBe7GugbsPrLHNi9v95h2aSkz9dvN8JnhslU4nYKG+kH2+lheev520hTEzPwGeD/cKrM07c1z\nACDx1BYDvIEBPqXcgnHQYGMVCO2CgF21jfp3p3Pwm5byexv1g+z1dtpxfoN8llI0bmM3XudgqIKm\n/ZJoNwZ4AwN8ipmD8T3z79LTEkE/NFaB0ClP+9jmNbZpmZVXrEg04IX5IPsZ46gp1OB08TSAZAdc\nnQZLtbbw2jEIMsZjTsV5vUi4DWJHXZXDAG9ggE8xq2BcqTevXYrDqXefdLoibFuoz9kqJ11AAWcV\nCjhdPFP2ey8zb6O+ELgN/Gpt4TZOoqXbAGBMYYz+nL1USJlfcz/jRGp5rVtFWNhePwO8gYuNpZi2\nFPHqK1dVvKesLoCmrmvf1jx71LHmY7JKfc5/efm9lpu3nCmODmBWi5epG7AXUURX73asenM1dg/s\n8XVOazrX6ovPrelcq/8+7CJqjXUNmDZ+CnYd6dHPURtQnVg7YdTzN7N6za3eG1b6hvrL2sYtn983\n1I+OzU+OagOKDwN8zthdTKx2rYrjghMH83O2u8h5EcUqlmEuEo/+0985ftu6Z/5dludYHJk1bX7+\nE2snlN3e6jW3em84XST8CnOhpHC4mmQVsdu1Km+sNm9x26AlKKt0jtNFwuk8nPLpflJp6vM3pwft\nWL03ggxiO9F69OpcBaos5uATwvyiIa628FKC6WdylN/VRbXH9DtOYh4Ij3MCl1t+vpJVOfyMGJiD\nJ3JhTt1Y5cmt0hXTxk/BY5vXeM6n1xRGfzGuKdSgb6gfyzc+iKY/avCVQmqsa0gs3eaUn2+qa8TK\nK1boz+XzF92m/3tWw0zH++XmLfFgDz4h7J0YkmgLp14wAN9LMJip1SxWlS1eZ+ja9XSDzE0ISv3G\nMbF2ImrOGuPpccMu98zPiIFlkhnDN68hibZwSj2oOeIwM0i15Rm0Gb1m5rLDtubZOHDiID483qf/\nPekSViD4xUS73dGTxzxd4Myq5TPipSyXAT5jquXN60XaAjzgPkHMK7+rejbUTcSZM/b7CGSVea6C\nOuEMsF4WoRo+I16/tTEHT+SDW+23WvXipuDST7Kbg2A1IenI0FHUnFWTmxJWjTb+oV3U1BLSKOYd\nZI02/mNVNRXl+AQDPFUl80Bl0OO0gUZtgS7z3+6Zf5ftoKjbhSFPtNJNrefuJO8DsOo8iUpjiiYh\n1fD106uk2sJrjtjrKplOZZhe1w46e1wT7p77+Vz13lV+xjTmTW3HVz7yxQqfUTzUPLvX56+u6llE\nsfj87d/z3SFngE8IA7whDW0RZElkc540yGCk+XF/cMvfJN4WleR3cbQg9f1p28UrzKY/qudv/57v\neM0An5A0BLW0SENbxFl26PS4l51/YeJtUWnmixrgvImNn2qiNO3i5WfvZS+TxBjgMyQNQS0t2BaG\namgLq+UT3JZFMO9OZddLj2PVVLvHDrr3stt+DhoG+Ayphg+yV2wLQzW3hZdURlNdo+PWjnZlrVEF\n+KjSLRNrJwIoL4d1u+8gAZ6LjRFRKqxYcLfr7Ne+oX7Lv3tZzA0In5+3Wp7CL7uLjfn5e0lfuWGZ\nJBGlhrpeUJD0grkktaZQg/6hI3hs8xp89ddfH1Vzf9/Glbhv48pY1qvX1ux3W9VTXadI+xnA3mCP\nGSOmaAzV/FXcjG1hYFsYvvf7H2Hb/i5Px1qVtVqVv3q9Dzt+UjRR7L2s4UxWIsqVR66639NkNPNq\nmn4mVam8TLDyOkHOvNJmUvsvMAdPRKmlbURi1RvXFnOLO3iqm6OoE9+sVtpMerE4BngiSi01SHqd\njKaxGnB1qje3G4wdVzMWx4dP6Pe5YsHdtjtmpW0GcugcvBDiegBPABgD4O+llB12xzIHb2Cu1cC2\nMLAtDOa2iGKmsF3vW1262W3CURITpxJZLlgIMQZAN4BrURrl3QzgDinlu1bHM8Ab+EE2sC0MbAuD\nn7awK3/0urSE341d4l6rP6lB1o8C2CGl/EBKeQrAcwCWhLxPIiLP1NUZzUsOaykeq+WX1b/tPpLe\n5Ym7dvXipgfWXxXktmED/HQA6mVvz8jviIhiYbc3bqWWHA5aFdO1qxddu3p9327Dpp0A8A3fN0T4\nQdbKL2hMRFRhVgOymqjq2UcCNdpnNXs6vmtXLzZs2onunj4A+GSQxwwb4PcCULdPn4lSL95WS0t9\nyIfMD7aFgW1hYFsYvLTF3KltoyZEnT2uCSsXLkPL2d7a8q8XP4CvvPhX+n64DXUTUXNWKTzeOf9W\nrHvnBQDwdZ+abTsO4dlXu7RAjcef34rPLm7HvNmTy44BUPa7lpZ6tM5owvJvve7r8VRhB1lrUBpk\nvQbAPgBvgYOsnnAwzcC2MLAtDH7awm8JpZVKljzuPXgUj/zwLQDAo1/+GKZPnlD29451WwAAD955\nadnv17/xPgDgxTc/+K//+Pgt3/D7uFGUSd4Ao0zyh1LKb9odywBv4AfZwLYwsC0Mftoi7fXoWqAG\ngEKhgCULz0PXrl7s3j+Azu2H9N5928wmLFl4np7G2dx1AFe0TwlcRRN6opOU8mUAL4e9HyKioNIw\na9TJ9JaJuKJ9CoBS0AaMnPzSxULv3S+9rg0Dx06ia1cv2mc167cJijNZiYgqRKuaUQN1/bhadKzb\novfan3h+Kz4xdxomN47F210H9Nt4HYx1wsXGiIh8sit5NP9+w6adek9d0z6rGUsXC/3nay+fiS/f\ndBHaW5ux+d396O7pQ3dPHzrWbQlUVqliD56IyCe15FHtcavBXClxRMe6LaNy6zdfeS4A4MTJ0/rt\nl90ytyxdYx6M9YsBnojIglWqxFSbjo51WzA4NAwUixg/tlb//YZNO3HlvGn6z+ZgbZWT1/6tBf63\nuw5g+sLzQj0HBngiIgt2vfT68bV6L3vo1Gn0HDgKADh3mlEfv/S6Nmx+d79tsFZz8uq/7QJ/UAzw\nRJRrfgct7Xrp4+tq0D6ruayXPTB4Ch/8oVTKed4fN2D+BZMAjAT0AMHaLvAHxQBPRLnmtESAVfB3\n6qV3rNuCttYm3LLofADAUy9s04P9vsOD+Nx1bQCM+nVNFME6CAZ4Isolq564OtAJjA7+WsDv2t1r\n2Us359KvuHCqZS89qYBuxgBPRBVjlx6JstbbjrknrgZnu+CvBfxPXTZDD9JqL91rLj0tGOCJqGLs\n0iN+V1a04nSRsOqJq8HZHPyvnPfHZQEfKE1Iap/VbNtLzwIGeCKKnF0PGXCuD/fDLr2i1qOrPXFz\ncFYHSw8fOTFqyQCtt5/2XroTBngiipxTesTu915YLdClplcGT5wqq0cHlJ64KTibq1yirkFPAwZ4\nIqoIc8AcmNkEwD5totF64tpa8FY9c7W3bU6vmOvRzRcQq/VhtH9nNRVjhwGeiCrC3EN2SptYBfFF\nl7cCgGXPXF2gy5xeGVWPbrqA2OX/s5yKscMAT0QVoQXJrl292PgvexzTJlZBfMXfvo7Tw2csZ4pe\ne/lMXPfR0gXAnF4x16NrvJRN5g0DPBFVlJ9yRTWIf/XOy/Dhh8cse+baAl2Ac3pF7Yk7nUdehd7R\nyQ/u6GTgzj0GtoUhi22hplfsShetdjTSqNvZXb1gOurH1wIAJk6ow9FjQ/px+w4P4t5b5gIYPVPU\nK6fzSLPEdnQiouqm5rTt8ttO67LYpVe69x3BkSO1kc4UjXoxr7RjDz4hWeypVQrbwpCFtjBvaKGl\nV8bVjcHxoVLqxLy3qBO1N67+OwttEZegPXju6EREvmi7FJl3JvrSTRfp/156XZvnwcs8Vq+kBVM0\nROSJVRXKpMaxenrltbd6cjdRKOsY4InIknnA1KoKZd+hY3qv+7lfbdeX0a2G/HYWMMATkSWrAVPz\n7FS1CuX2a+bo/2aqJR0Y4ImojNOEoGqrQsk6DrISURnz4OnSkbLFrl29HBDNGPbgiWgUcyomjg06\nKHrswRPRKNNbJuKWReejvbUZm9/dj+6ePnT39KFj3ZayOnhKNwZ4IgJQSsGYl9Jtn9WMZSPLAwD+\n6tspeUzREBEA+2V087gRRrVggCeqcm7L6LJyJruYoiGqclZVM2ovnpUz2cUePFEV03LubtvoUTYx\nwBNVMadt9Cj7GOCJqpA57w6M3kaPso85eKIq5JZ3p3xgD56oSrH8Mf8CB3ghxGcAfANAO4ArpJRb\nojopIqocbWCV5Y/5FyZFsw3ArQB+HdG5EFEMtB2ZWP6Yf4F78FLKLgAQQrgdSkQJsttD1TyhifKH\ng6xEOWe3hyoHVvPPsQcvhHgNwDSLPz0spXypMqdERFFw20OVA6v55xjgpZR/EvUDtrTUR32XmcW2\nMLAtDFG1RUtLPVpnNGH5t14HAPyX2xdg9/4BLLx4OgBg09a9qW/3tJ9f2kVVJlnweuDBgwMRPWS2\ntbTUsy1GsC0MUbfFq/+8U++xv/qbD7Bk4Xn6/bed05Dqduf7IrwwZZK3AngSwGQA/0sI0SmlvCGy\nMyOi0FgKWd3CVNG8AOCFCM+FiCLGUsjqxioaIqKcYoAnIsopBniiHFL3V6XqxcXGiHLIbn9Vqi7s\nwRPlSNeuXnSs24Lunj509/ShY90W9uSrGAM8UY5wOQJSMUVDlDNc5500DPBEOcPJTaRhioYoZzi5\niTQM8EQ5wLJIssIUDVEOsCySrLAHT5RhLIskJwzwRBnGskhywhQNUcaxLJLsMMATZRzLIskOUzRE\nGceySLLDAE+UUSyNJDdM0RBlFEsjyQ178EQZw9JI8ooBnihDtEDO0kjygikaogzR0jJtrU0sjSRX\nDPBEGdC1qxcbNu1Ed08fAGBg8CSWLi713FkaSXaYoiHKAPOM1WW3ztPTMiyNJDvswROlmJZz13rq\nTMuQHwzwRCmmlkJyxir5xQBPlDJdu3qxe/8AOrcf0nPuHeu2YInSY2dahrxgDp4oZTZs2onO7YdY\nCkmhsQdPlDB1ktLjz2/Ve+1PPL8Vn5g7DZMbxzLnToEwwBMlTMuzP3jnpWid0YTl33odAHDt5TNx\n3UdbATDnTsEwwBMlxFzb3rFuC6ZPrdcrZU6cPK0fy5w7BcEAT5SQ9lnNqB9fi0d++BaAUp796MnT\naDunAQB77RQeAzxRgsy17V++dT4OHhwAwF47hccAT5QAbWCVte1USYkEeHV2HlUHvubl1IFVDXvs\nFLVEAjw3KsgPr4Gbr3mJ1cDqkoXnVX27UGXEGuC37TiEp//x97az8/gmT4+ggdt8O7uApqm219xq\nYHX65AkJnxXlVeAAL4T4FoCbAJwE8B6AP5NS9jvdZt7syVi6WIx6c3es2wKg+j7saebW47YL3Obb\n2QW0an7NuWgYxaUQ9IZCiD8B8Csp5RkhxN8AgJTyIafbFIvF4tpfbNV/Ptx/Aof6T+hBom1mExbM\nmYzWqfWuH/ys53RbWur1aok0MQfutplNo1IIWturgfuLN16IN7f9m+Xt1r/xvn5bq9d80YIZOHtC\nbWZfSzt279HNXQfKBlbV3Hta3xdJYFsYpkxpCBSrA/fgpZSvKT/+FsCn3W6zbcehUVUD50waX9a7\ne+aVbnRuP8ScbkLsetxqsLLaVejwkROjvp0NHDuJrl29rq/5z17fgVMnT/t+LdN+kbdLX6kBnQOr\nVEmBe/AqIcRLAH4qpXzW6biHvvNG8YHPXFz2O613d6j/OLp39+PwkRMA7HuO5lX2rI7LgjT3TtQe\nd6FQwJKF56Fj3RYMnjiF8WNr9bY/Z9L4sl2F9h48WnY7LaCplSLq/Xt9zQHrIK6lecz3nzS7b0FW\nlTNmaX5fxI1tYQjag3e8kRDiNQDTLP70sJTypZFjVgG4VErp2oO/6YH1xbkXTMJnF7dj3uzJAIBN\nW/di4cXTAQAv/N8d+NGLvwcAfOerV6N1WkPZ7f/qqU0AgK/8p/n6eh1Wx1E46mvy7CvvYtt7h/G7\n9w4DAGbPbMSOntJQi7nttdtt23EI3/3FVvTsLwX8KF7zb967ENt2HNJ//+yrXfo5me8/DXb94Yj+\nHr3/tkvwq7d7Un2+lG6FQiH6AO9GCPEFAHcDuEZKecLt+JseWF989Msfs60asOo5AqN7RJMa6tDW\n2ozJjWPLjtOk/as7kFzvRG0br+209+BRPaVy9YLpqB9fCwCWbW91G7fXfMKEOhw7NuT4mrfNbMLg\n0DDG19XgwTsv9Xz/leCl3czv5cvbWjydL3utBraFIfYcvBDiegBfBfBJL8EdAO5Y3OZYNWA3q8+c\nF3ZbZY/5eXtq27iVOGrUqo99hwfxueva9N/b8VopMr1lIm5cdAEOHhxwfM2HTp1Gz4HSN4KOdVsw\nqXFsYpUoXt5f5vcyK2coCWGqaLYD+CMAH4786jdSynudblMsFou/fOO9QANLdr17lZcKkLSIu3di\nbptxdWNwfKi0WqFbjtip6sOOn9uY20K70HTtNtZJHxg8hdc79wIo9YD3HTrm+5zCCvP+8toe7LUa\n2BaGiuTgo1YsFot+XjDzhsNePiBJfnX3I843r1VZ4/JPz8O3f74NgHOJYxzMbaENnn7qshn66/zU\nC9twzshrmWRartLvLwY1A9vCEHuKJg7qV2GvpWX8KjyaVVnja2/1OJY4JnFhNPeQAaB+XKk+/ooL\npzouyhVXWo7vL8qSVAb4IOt1VPvqfFY9WHM7Dgye1Msan/vVdtyy6HwA6ckRO03jt7vA+32vhO3p\nu72/sjDAT9UjlQE+yHodXlfnC1JFkgVWPVhzOy67dZ7ejrdfM0c/TmunNFwY/V5ovEzMUnkdWLb7\nvds3SQ7wU5qkMsAD3j/ofntwTlUkWWT1/NXlHry2Y1pmVwb5Bmb1HK0CuZe1czR+3xtcJZLSKLWD\nrH6qMLwMfHmpIonzwxjlAJL5+T/zSjeA0reZIBUwcQvbFurzWv/G++je3Wc5YKy2k9XA8oI5pYlH\nVjOlNU7vkSgGYDmwaGBbGHJZReOVUwml+lVb/QCqVSRJVNtE+eb1M/U/jaL+IJsD7cCxkwDKyy6t\nJh9pF0Z1wFl7bzgti2BV1uk0CcwJg5qBbWGo6gDv1EtVP5jqhaB7dx/aWpsABP8whhHFm1cLLAPH\nT+nP+ZW3duNnG3cASHeZqCrqD7L5gq+1k1p2qa6dY74wqjOlrVa/NF80rco6g35bYlAzsC0MuSyT\n9Moqf2yVE21rbdIrR8xVJGnlNBBsNbB8fGg48WqYpGl5/K5dvXjm1W7sOzyo/00vuzQNLKsXRvNM\nafPql9pF07GsM4WpMKo+uejB2/GbE426qsbp/rz2TqxSA04zKrOQczerZE/Nz5o4GvM3Oqe/RT3x\nib1WA9vCUNU9eDt+S+7Uyokogn2YKh2nqowg9eLVys+aOHbVO05/S8P8ASI7uQ7wXkvurIKptnJh\n1MHZK7e5AAws3nh9DzhdGJ3+Vq0T6ygbcp2i8UP9qn3utHp88IfSeQatRHH76m739VP95mBODbTN\nbNL/lsVUjB1+FTewLQxsCwNTNCGpPeKBwVN6gFe3nvMT5M097AElOJtZbYfXPqt5VO8wyNo8RFS9\nGOBHqMH0qRe2lQVncz7ey/R2p+BstmHTzlHb4WlpHe1+N/7LHs6SJCJfGOBHlPWIR1YuNJfZWU1v\nt+t9q+WaVsG5paV+VK7+3Gn1+jmoOfcga/MQETEH78Jtevvg0DBQLJb1vs15e6t8/B/6h9DXN1gW\nuJ22w/Oy4UlWMddqYFsY2BYG5uArRM2lm9dNV7eRs+t9m+9Dq3h59tUunDp5umyNdqft8FitQUR+\nsQfvwlytok1vB8q3kXPqfTsthnXOpPH6Gu1Zr4YJij01A9vCwLYwsAdfIVbVKlaDsU69b/U+bll0\nflnKRl2jvRqDOxFVDgO8T1aDsUB5UHcL1Ju7DuCOxW04dmyIk5SIqGIY4EMIWos+vWUiblx0AQ4e\nHGA+nYgq5qykT6AacZISEcWBAZ6IKKcY4ImIcooBnogopxjgiYhyigGeiCinGOCJiHKKAZ6IKKcY\n4ImIcooBnogopxjgiYhyigGeiCinGOCJiHKKAZ6IKKcCLxcshHgUwM0AigAOA/iClLInqhMjIqJw\nwvTgH5NSXiylvATAegBfj+iciIgoAoEDvJRS3SxxIoBD4U+HiIiiEmpHJyHEagCfAzAI4OORnBER\nEUXCMcALIV4DMM3iTw9LKV+SUq4CsEoI8RCA/wHgzypwjkRElBQhRKsQ4ndJnwcRERkC5+CFEHOU\nH5cA6AwA77lVAAADtElEQVR/OkREFJUwOfhvCiHaAJwG8B6AZdGcEhERERERERERERERERFRehUq\ncadCiOsBPAFgDIC/l1J2WBzzJIAbUJok9QUpZS6rcNzaQghxJ4CVKL0WAwCWSSnfif1EY+DlfTFy\n3BUAfgPgT6WUv4jxFGPh8fNxFUpzS2oBHJJSXhXnOcbFw+djMoBnUJqPUwPgv0sp/2fc5xkHIcSP\nAPwHAAeklPNsjvEVNyNfTVIIMQbAtwFcD+AiAHcIIS40HXMjgNlSyjkA/hzAd6M+jzTw0hYA3gfw\n76WU8wE8CuAH8Z5lPDy2hXZcB4D/jQp1QJLk8fPRBOA7AP6jlHIugP8c+4nGwON7YjmAzpE1r64C\n8LdCiFAz8FPsxyi1haUgcbMSywV/FMAOKeUHUspTAJ5DqU5edTOApwFASvlbAE1CiKkVOJekubaF\nlPI3Usr+kR9/C2BGzOcYFy/vCwBYAeAfAByM8+Ri5KUdPgvg51LKPQAgpczrOk9e2uLfADSM/LsB\nwGEp5XCM5xgbKeUbAHodDvEdNysR4KcDUJcN3jPyO7dj8hjYvLSF6ksAflnRM0qOa1sIIaaj9AHX\neibFeE4tVl7eE3MAnC2EeF0I8bYQ4nOxnV28vLTFWgAfEULsA7AVwP0xnVsa+Y6blQjwXj+U5q/f\nefwwe35OQoirAXwRwIOVO51EeWmLJwA8JKUsovT+yF2KBt7aoRbApQBuBHAdgEdMM8fzwktbPAzg\n/0kpzwFwCYDvCCHqK3taqeYrblYiwO8FMFP5eSZKVxqnY2aM/C5vvLQFhBDzUeqp3CyldPqKlmVe\n2uIyAM8JIXYC+DSAp4QQN8d0fnHx0g49AF6VUh6XUh4G8GsAF8d0fnHy0hafAPA8AEgp3wOwE0Bb\nLGeXPr7jZiUGK94GMEcIcS6AfQBuA3CH6ZgXURo8eU4I8XEAfVLK/RU4l6S5toUQohXALwAslVLu\niP0M4+PaFlLK87V/CyF+DOAlKeWLcZ5kDLx8PjYA+PbIIGQdgI8BeDzOk4yJl7boAnAtgDdH8s1t\nKBUmVCPfcTPyHvzIAMhyAK8A+FcAP5NSviuEuEcIcc/IMb8E8L4QYgeA7wO4N+rzSAMvbQHgawCa\nAXxXCNEphHgrodOtKI9tkXsePx9dKFURvYPSwPtaKeW/JnXOleLxPfHfAFwuhNgK4P8AWCml/DCZ\nM64sIcRPAfwzgDYhRI8Q4ovVGDeJiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIKGf+P59uCPkJ4xtU\nAAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x108416a50>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"\n",
"cs = sns.color_palette(\"deep\",8)\n",
"\n",
"%matplotlib inline\n",
"\n",
"np.random.seed(665) \n",
"\n",
"def kernel(x1,x2,alpha):\n",
"\treturn np.exp(-np.square(x1-x2)/alpha**2)\n",
"\n",
"\n",
"num_samples = 100\n",
"X = np.linspace(0,1,num_samples)\n",
"\n",
"# K is going to be the Gram matrix\n",
"K=np.zeros((num_samples,num_samples))\n",
"\n",
"for idx in range(num_samples):\n",
"\tfor jdx in range(idx+1,num_samples):\n",
"\t\tK[idx,jdx] = kernel(X[idx],X[jdx],alpha=0.2)\n",
"\n",
"# add a little noise for stability\n",
"epsilon = 3e-3 \n",
"K = K + K.T + np.eye(num_samples)*(1. + epsilon) \n",
"\n",
"L = np.linalg.cholesky(K)\n",
"\n",
"# here we sample two functions from the GP prior\n",
"rand_vec1, rand_vec2 = np.random.randn(num_samples) , np.random.randn(num_samples)\n",
"y = L.dot(rand_vec1)\n",
"y2 = L.dot(rand_vec2)\n",
"\n",
"#np.outer(m,K)\n",
"\n",
"plt.plot(X,y,'*')\n",
"plt.plot(X,y2,'o')\n",
"\n",
"\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now we'll create 2 new functions which are a linear combination of these"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x107224310>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"mx = 0.45\n",
"m=np.array([[1-mx,mx],[mx,1-mx]])\n",
"\n",
"a=np.vstack((y,y2))\n",
"q=np.dot(m,a)\n",
"\n",
"\n",
"plt.plot(X,q[0,:],'*')\n",
"plt.plot(X,q[1,:],'o')\n",
"\n",
"\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"now instead we create a mega gram matrix first"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x107205b50>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"\n",
"full_K=np.kron(m,K) + epsilon * np.eye(2*num_samples)\n",
"\n",
"#print(K) \n",
"L = np.linalg.cholesky(full_K)\n",
"\n",
"_y = L.dot(np.hstack((rand_vec1,rand_vec2)))\n",
"\n",
"func_1=_y[0:100]\n",
"func_2=_y[100:]\n",
"\n",
"plt.plot(X,q[0,:])\n",
"plt.plot(X,q[1,:])\n",
"\n",
"plt.plot(X,func_1,'*')\n",
"plt.plot(X,func_2,'o')\n",
"\n",
"\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": false
},
"source": [
"Now we can try to fit one of the combined functions, with a gap in the data"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"-17.7542697438\n"
]
}
],
"source": [
"import george\n",
"from george import kernels\n",
"import scipy.optimize as scpo\n",
"\n",
"kernel = kernels.ExpSquaredKernel(0.01)+ kernels.WhiteKernel(1e-3)\n",
"gp=george.GP(kernel)\n",
"\n",
"ins_uncoup=X[:50]\n",
"outs_uncoup=func_2[:50]\n",
"\n",
"\n",
"def nll(p):\n",
" gp.kernel[:]=p\n",
" ll=gp.lnlikelihood(outs_uncoup)\n",
"\n",
" return -ll if np.isfinite(ll) else 1e10\n",
"\n",
"def grad_nll(p):\n",
" gp.kernel[:]=p\n",
" return -gp.grad_lnlikelihood(outs_uncoup)\n",
"\n",
"gp.compute(ins_uncoup)\n",
"\n",
"print gp.lnlikelihood(outs_uncoup)"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[-3.36073349 -5.25152202]\n",
"45.0561874795\n",
"[ 0.03470979 0.00523954]\n"
]
}
],
"source": [
"p0=gp.kernel.vector\n",
"print(p0)\n",
"results=scpo.minimize(nll,p0,jac=grad_nll)\n",
"\n",
"\n",
"gp.kernel[:]=results.x\n",
"\n",
"print gp.lnlikelihood(outs_uncoup)\n",
"\n",
"print np.exp(gp.kernel[:])"
]
},
{
"cell_type": "code",
"execution_count": 57,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\ngg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x10bc7b6d0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"x_test = np.linspace(0, 1, 500)\n",
"\n",
"mu_uncoup, cov = gp.predict(outs_uncoup, x_test)\n",
"std_uncoup = np.sqrt(np.diag(np.clip(cov,0.,10.)))\n",
"\n",
"plt.plot(x_test,mu_uncoup)\n",
"plt.fill_between(x_test,mu_uncoup-std_uncoup,mu_uncoup+std_uncoup,alpha=0.3)\n",
"plt.plot(ins_uncoup,outs_uncoup,'*')\n",
"plt.plot(X[50:],func_2[50:],'o')\n",
"\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"now let's see if we can do better on the portion with no training data, by using the training points from the correlated task. We expand the input dimension from 1 to 2 to include a 1-hot encoding of which task the data came from.\n"
]
},
{
"cell_type": "code",
"execution_count": 71,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[-2.30258509 -6.90775528 0. -6.90775528]\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x10b029d50>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"def ourkernel(x1,x2,p):\n",
" return p[0] * np.abs(x1[1]-x2[1]) * np.exp(-(x1[0]-x2[0])**2/p[1]) \\\n",
" + p[2] * (1. - np.abs(x1[1]-x2[1])) * np.exp(-(x1[0]-x2[0])**2/p[1]) \n",
" \n",
" \n",
"# p0 = [amplitude_cross, lengthscale, amplitude_self] \n",
"p1 = np.array([0.1,0.001,1.])\n",
"kernel2=kernels.PythonKernel(ourkernel,pars=p1,ndim=2)\n",
"\n",
"comb_kernel = kernel2 + kernels.WhiteKernel(1e-3,ndim=2)\n",
"gp2=george.GP(comb_kernel)\n",
"print(gp2.kernel.vector)\n",
"\n",
"data_1=np.vstack((X,np.ones_like(X)))\n",
"data_2=np.vstack((X[:50],np.zeros_like(X[:50])))\n",
"\n",
"# only provide half the data for func 2\n",
"ins_coup=np.hstack((data_1,data_2)).transpose()\n",
"outs_coup=np.hstack((func_1,func_2[:50]))\n",
"\n",
"# visualise the gram matrix\n",
"gram = kernel2.value(ins_coup)\n",
"#plt.matshow(gram[:10,:10])\n",
"#plt.matshow(gram)\n",
"\n",
"gp2.compute(ins_coup)\n",
"\n",
"plt.plot(ins_coup[:100,0],outs_coup[:100])\n",
"plt.plot(ins_coup[100:,0],outs_coup[100:])\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now let's try to fit a GP without optimising the hypers at all. I.E. just taking a guess at the coupling."
]
},
{
"cell_type": "code",
"execution_count": 81,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(1000,)\n",
"[-0.16390098 -0.10251806 -0.1287617 -0.12250335 -0.11770595 0.05333684\n",
" -0.0933465 -0.05316287 -0.12554781]\n",
"[-0.9425591 -1.03378595 -0.86454048 -0.96734902 -1.02975278 -1.12974338\n",
" -1.16455428 -1.11799278 -1.1919264 ]\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x10bc7b990>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"x_test_2 = np.hstack(\n",
" ( np.vstack((x_test,np.ones_like(x_test))),\n",
" np.vstack((x_test,np.zeros_like(x_test))) )).transpose()\n",
"\n",
"mu_coup, cov_coup = gp2.predict(outs_coup, x_test_2)\n",
"print(mu_coup.shape)\n",
"std_coup = np.sqrt(np.diag(np.clip(cov_coup,0.,10.)))\n",
"plt.clf()\n",
"plt.plot(x_test,mu_coup[:500])\n",
"plt.plot(x_test,mu_coup[500:])\n",
"#plt.fill_between(x_test,mu_coup-std_coup,mu_coup+std_coup,alpha=0.3)\n",
"\n",
"plt.plot(x_test,mu_uncoup)\n",
"plt.fill_between(x_test,mu_uncoup-std_uncoup,mu_uncoup+std_uncoup,alpha=0.3)\n",
"\n",
"#plt.plot(ins_coup[100:,0],outs_coup[100:],'*')\n",
"#plt.plot(X[50:],func_2[50:],'o')\n",
"plt.plot(ins_coup[:100,0],outs_coup[:100],'*')\n",
"plt.plot(ins_coup[100:,0],outs_coup[100:],'o')\n",
"print(outs_coup[90:99])\n",
"print(outs_coup[140:149])\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 82,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[-2.30258509 -6.90775528 0. -6.90775528]\n",
"150.445672147\n",
"[ -4.05699700e-01 -4.85597013e-02 1.58457589e+00 6.97931500e+01]\n"
]
},
{
"ename": "LinAlgError",
"evalue": "102-th leading minor not positive definite",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mLinAlgError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-82-1735239c4ead>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 15\u001b[0m \u001b[0;32mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mgrad_nll2\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mp0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 16\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 17\u001b[0;31m \u001b[0mresults\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mscpo\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mminimize\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnll2\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mp0\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mjac\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mgrad_nll2\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mmethod\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'Powell'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 18\u001b[0m \u001b[0;31m#results=scpo.optimize.basinhopping(nll2,p0)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 19\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/Users/alan/Developer/reinforcement/virtualenv/reinforce/lib/python2.7/site-packages/scipy/optimize/_minimize.pyc\u001b[0m in \u001b[0;36mminimize\u001b[0;34m(fun, x0, args, method, jac, hess, hessp, bounds, constraints, tol, callback, options)\u001b[0m\n\u001b[1;32m 435\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0m_minimize_neldermead\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfun\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcallback\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0moptions\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 436\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0mmeth\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;34m'powell'\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 437\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0m_minimize_powell\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfun\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcallback\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0moptions\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 438\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0mmeth\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;34m'cg'\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 439\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0m_minimize_cg\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfun\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mjac\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcallback\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0moptions\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/Users/alan/Developer/reinforcement/virtualenv/reinforce/lib/python2.7/site-packages/scipy/optimize/optimize.pyc\u001b[0m in \u001b[0;36m_minimize_powell\u001b[0;34m(func, x0, args, callback, xtol, ftol, maxiter, maxfev, disp, direc, return_all, **unknown_options)\u001b[0m\n\u001b[1;32m 2351\u001b[0m \u001b[0mfx2\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfval\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2352\u001b[0m fval, x, direc1 = _linesearch_powell(func, x, direc1,\n\u001b[0;32m-> 2353\u001b[0;31m tol=xtol * 100)\n\u001b[0m\u001b[1;32m 2354\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mfx2\u001b[0m \u001b[0;34m-\u001b[0m \u001b[0mfval\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0mdelta\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2355\u001b[0m \u001b[0mdelta\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfx2\u001b[0m \u001b[0;34m-\u001b[0m \u001b[0mfval\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/Users/alan/Developer/reinforcement/virtualenv/reinforce/lib/python2.7/site-packages/scipy/optimize/optimize.pyc\u001b[0m in \u001b[0;36m_linesearch_powell\u001b[0;34m(func, p, xi, tol)\u001b[0m\n\u001b[1;32m 2173\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mmyfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0malpha\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2174\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mp\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0malpha\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mxi\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2175\u001b[0;31m \u001b[0malpha_min\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfret\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0miter\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnum\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mbrent\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmyfunc\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfull_output\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtol\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mtol\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2176\u001b[0m \u001b[0mxi\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0malpha_min\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mxi\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2177\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0msqueeze\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfret\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mp\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mxi\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mxi\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/Users/alan/Developer/reinforcement/virtualenv/reinforce/lib/python2.7/site-packages/scipy/optimize/optimize.pyc\u001b[0m in \u001b[0;36mbrent\u001b[0;34m(func, args, brack, tol, full_output, maxiter)\u001b[0m\n\u001b[1;32m 1912\u001b[0m options = {'xtol': tol,\n\u001b[1;32m 1913\u001b[0m 'maxiter': maxiter}\n\u001b[0;32m-> 1914\u001b[0;31m \u001b[0mres\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_minimize_scalar_brent\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfunc\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mbrack\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0moptions\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1915\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mfull_output\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1916\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mres\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'x'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mres\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'fun'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mres\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'nit'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mres\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'nfev'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/Users/alan/Developer/reinforcement/virtualenv/reinforce/lib/python2.7/site-packages/scipy/optimize/optimize.pyc\u001b[0m in \u001b[0;36m_minimize_scalar_brent\u001b[0;34m(func, brack, args, xtol, maxiter, **unknown_options)\u001b[0m\n\u001b[1;32m 1944\u001b[0m full_output=True, maxiter=maxiter)\n\u001b[1;32m 1945\u001b[0m \u001b[0mbrent\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mset_bracket\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mbrack\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1946\u001b[0;31m \u001b[0mbrent\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0moptimize\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1947\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfval\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnit\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnfev\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mbrent\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_result\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfull_output\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1948\u001b[0m return OptimizeResult(fun=fval, x=x, nit=nit, nfev=nfev,\n",
"\u001b[0;32m/Users/alan/Developer/reinforcement/virtualenv/reinforce/lib/python2.7/site-packages/scipy/optimize/optimize.pyc\u001b[0m in \u001b[0;36moptimize\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 1750\u001b[0m \u001b[0;31m# set up for optimization\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1751\u001b[0m \u001b[0mfunc\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfunc\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1752\u001b[0;31m \u001b[0mxa\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mxb\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mxc\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfa\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfb\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfc\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfuncalls\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_bracket_info\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1753\u001b[0m \u001b[0m_mintol\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_mintol\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1754\u001b[0m \u001b[0m_cg\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_cg\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/Users/alan/Developer/reinforcement/virtualenv/reinforce/lib/python2.7/site-packages/scipy/optimize/optimize.pyc\u001b[0m in \u001b[0;36mget_bracket_info\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 1724\u001b[0m \u001b[0;31m### carefully DOCUMENT any CHANGES in core ##\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1725\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mbrack\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1726\u001b[0;31m \u001b[0mxa\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mxb\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mxc\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfa\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfb\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfc\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfuncalls\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mbracket\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfunc\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1727\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mbrack\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1728\u001b[0m xa, xb, xc, fa, fb, fc, funcalls = bracket(func, xa=brack[0],\n",
"\u001b[0;32m/Users/alan/Developer/reinforcement/virtualenv/reinforce/lib/python2.7/site-packages/scipy/optimize/optimize.pyc\u001b[0m in \u001b[0;36mbracket\u001b[0;34m(func, xa, xb, args, grow_limit, maxiter)\u001b[0m\n\u001b[1;32m 2100\u001b[0m \u001b[0m_verysmall_num\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m1e-21\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2101\u001b[0m \u001b[0mfa\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mxa\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2102\u001b[0;31m \u001b[0mfb\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mxb\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2103\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mfa\u001b[0m \u001b[0;34m<\u001b[0m \u001b[0mfb\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;31m# Switch so fa > fb\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2104\u001b[0m \u001b[0mxa\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mxb\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mxb\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mxa\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/Users/alan/Developer/reinforcement/virtualenv/reinforce/lib/python2.7/site-packages/scipy/optimize/optimize.pyc\u001b[0m in \u001b[0;36mmyfunc\u001b[0;34m(alpha)\u001b[0m\n\u001b[1;32m 2172\u001b[0m \"\"\"\n\u001b[1;32m 2173\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mmyfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0malpha\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2174\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mp\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0malpha\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mxi\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2175\u001b[0m \u001b[0malpha_min\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfret\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0miter\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnum\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mbrent\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmyfunc\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfull_output\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtol\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mtol\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2176\u001b[0m \u001b[0mxi\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0malpha_min\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mxi\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/Users/alan/Developer/reinforcement/virtualenv/reinforce/lib/python2.7/site-packages/scipy/optimize/optimize.pyc\u001b[0m in \u001b[0;36mfunction_wrapper\u001b[0;34m(*wrapper_args)\u001b[0m\n\u001b[1;32m 287\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mfunction_wrapper\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mwrapper_args\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 288\u001b[0m \u001b[0mncalls\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m+=\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 289\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mfunction\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mwrapper_args\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 290\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 291\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mncalls\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfunction_wrapper\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m<ipython-input-82-1735239c4ead>\u001b[0m in \u001b[0;36mnll2\u001b[0;34m(p)\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mnll2\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mp\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0mgp2\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mkernel\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mp\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0mll\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mgp2\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlnlikelihood\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mouts_coup\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 4\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;34m-\u001b[0m\u001b[0mll\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0misfinite\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mll\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32melse\u001b[0m \u001b[0;36m1e10\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/Users/alan/Developer/reinforcement/virtualenv/reinforce/lib/python2.7/site-packages/george/gp.pyc\u001b[0m in \u001b[0;36mlnlikelihood\u001b[0;34m(self, y, quiet)\u001b[0m\n\u001b[1;32m 229\u001b[0m r = np.ascontiguousarray(self._check_dimensions(y)[self.inds]\n\u001b[1;32m 230\u001b[0m - self.mean(self._x), dtype=np.float64)\n\u001b[0;32m--> 231\u001b[0;31m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrecompute\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mquiet\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mquiet\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 232\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;34m-\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0minf\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 233\u001b[0m \u001b[0mll\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_const\u001b[0m \u001b[0;34m-\u001b[0m \u001b[0;36m0.5\u001b[0m \u001b[0;34m*\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mr\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msolver\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mapply_inverse\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mr\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/Users/alan/Developer/reinforcement/virtualenv/reinforce/lib/python2.7/site-packages/george/gp.pyc\u001b[0m in \u001b[0;36mrecompute\u001b[0;34m(self, quiet, **kwargs)\u001b[0m\n\u001b[1;32m 204\u001b[0m \u001b[0;31m# ordering of the points.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 205\u001b[0m \u001b[0minitial_order\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0marray\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0minds\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 206\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcompute\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_x\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_yerr\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msort\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mFalse\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 207\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0minds\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0minitial_order\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 208\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mValueError\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mLinAlgError\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/Users/alan/Developer/reinforcement/virtualenv/reinforce/lib/python2.7/site-packages/george/gp.pyc\u001b[0m in \u001b[0;36mcompute\u001b[0;34m(self, x, yerr, sort, **kwargs)\u001b[0m\n\u001b[1;32m 183\u001b[0m \u001b[0;31m# Set up and pre-compute the solver.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 184\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msolver\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msolver_type\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mkernel\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msolver_kwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 185\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msolver\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcompute\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_x\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_yerr\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 186\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 187\u001b[0m self._const = -0.5 * (len(self._x) * np.log(2 * np.pi)\n",
"\u001b[0;32m/Users/alan/Developer/reinforcement/virtualenv/reinforce/lib/python2.7/site-packages/george/basic.pyc\u001b[0m in \u001b[0;36mcompute\u001b[0;34m(self, x, yerr)\u001b[0m\n\u001b[1;32m 67\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 68\u001b[0m \u001b[0;31m# Factor the matrix and compute the log-determinant.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 69\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_factor\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mcholesky\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mK\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0moverwrite_a\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mTrue\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlower\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mFalse\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mFalse\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 70\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlog_determinant\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m2\u001b[0m \u001b[0;34m*\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msum\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlog\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdiag\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_factor\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 71\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcomputed\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mTrue\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/Users/alan/Developer/reinforcement/virtualenv/reinforce/lib/python2.7/site-packages/scipy/linalg/decomp_cholesky.pyc\u001b[0m in \u001b[0;36mcholesky\u001b[0;34m(a, lower, overwrite_a, check_finite)\u001b[0m\n\u001b[1;32m 79\u001b[0m \"\"\"\n\u001b[1;32m 80\u001b[0m c, lower = _cholesky(a, lower=lower, overwrite_a=overwrite_a, clean=True,\n\u001b[0;32m---> 81\u001b[0;31m check_finite=check_finite)\n\u001b[0m\u001b[1;32m 82\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mc\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 83\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/Users/alan/Developer/reinforcement/virtualenv/reinforce/lib/python2.7/site-packages/scipy/linalg/decomp_cholesky.pyc\u001b[0m in \u001b[0;36m_cholesky\u001b[0;34m(a, lower, overwrite_a, clean, check_finite)\u001b[0m\n\u001b[1;32m 28\u001b[0m \u001b[0mc\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0minfo\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpotrf\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ma1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlower\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mlower\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0moverwrite_a\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0moverwrite_a\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mclean\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mclean\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 29\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0minfo\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 30\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mLinAlgError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"%d-th leading minor not positive definite\"\u001b[0m \u001b[0;34m%\u001b[0m \u001b[0minfo\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 31\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0minfo\u001b[0m \u001b[0;34m<\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 32\u001b[0m raise ValueError('illegal value in %d-th argument of internal potrf'\n",
"\u001b[0;31mLinAlgError\u001b[0m: 102-th leading minor not positive definite"
]
}
],
"source": [
"def nll2(p):\n",
" gp2.kernel[:]=p\n",
" ll=gp2.lnlikelihood(outs_coup)\n",
"\n",
" return -ll if np.isfinite(ll) else 1e10\n",
"\n",
"def grad_nll2(p):\n",
" gp2.kernel[:]=p\n",
" return -gp2.grad_lnlikelihood(outs_coup)\n",
"\n",
"print(gp2.kernel.vector)\n",
"p0 = np.hstack((p1,np.array([2e-3])))\n",
"gp2.kernel.vector[:]=p0\n",
"print(nll2(p0))\n",
"print(grad_nll2(p0))\n",
"\n",
"results=scpo.minimize(nll2,p0,jac=grad_nll2,method='Powell')\n",
"#results=scpo.optimize.basinhopping(nll2,p0)\n",
"\n",
"gp2.kernel[:]=results.x"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"x_test = np.vstack((np.linspace(0, 1, 500),np.ones(500)))\n",
"mu, cov = gp2.predict(outs, x_test)\n",
"\n",
"std = np.sqrt(np.diag(np.clip(cov,0.,10.)))\n",
"print(std.shape)\n",
"plt.plot(x_test,mu)\n",
"plt.fill_between(x_test,mu-std,mu+std,alpha=0.3)\n",
"plt.plot(ins,outs,'*')\n",
"plt.plot(X,func_2,'o')\n",
"\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.10"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment