Skip to content

Instantly share code, notes, and snippets.

@davidrichards
Last active July 10, 2017 14:19
Show Gist options
  • Save davidrichards/dd369c9170ca6351676e752460442f4f to your computer and use it in GitHub Desktop.
Save davidrichards/dd369c9170ca6351676e752460442f4f to your computer and use it in GitHub Desktop.
Bayesian Updates, taken slowly.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import pandas as pd\n",
"import seaborn as sns\n",
"plt.style.use('ggplot')\n",
"import matplotlib.figure as figure\n",
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"from fractions import Fraction\n",
"normal_uniform = {2: Fraction(1, 36), 3: Fraction(2,36), 4: Fraction(3, 36),\n",
" 5: Fraction(4, 36), 6: Fraction(5, 36), 7: Fraction(6, 36),\n",
" 8: Fraction(5, 36), 9: Fraction(4, 36), 10: Fraction(3, 36),\n",
" 11: Fraction(2, 36), 12: Fraction(1, 36)}\n",
"# biased= {2: Fraction(0, 32), 3: Fraction(3,32), 4: Fraction(3, 32),\n",
"# 5: Fraction(4, 32), 6: Fraction(4, 32), 7: Fraction(6, 32),\n",
"# 8: Fraction(3, 32), 9: Fraction(2, 32), 10: Fraction(3, 32),\n",
"# 11: Fraction(4, 32), 12: Fraction(0, 32)}\n",
"biased= {2: Fraction(1, 26), 3: Fraction(2,26), 4: Fraction(3, 26),\n",
" 5: Fraction(4, 26), 6: Fraction(5, 26), 7: Fraction(6, 26),\n",
" 8: Fraction(1, 26), 9: Fraction(1, 26), 10: Fraction(1, 26),\n",
" 11: Fraction(1, 26), 12: Fraction(1, 26)}\n",
"def update(x, priors, distributions):\n",
" weighted = []\n",
" for d, p in zip(distributions, priors):\n",
" weighted.append(d[x] * p)\n",
" total = sum(weighted)\n",
" return list(map(lambda e: e / total, weighted))"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[0.9992614896212075, 0.0007385103787924079]"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"priors = [.5, .5]\n",
"priors = update(3, priors, [normal_uniform, biased])\n",
"priors = update(3, priors, [normal_uniform, biased])\n",
"priors = update(4, priors, [normal_uniform, biased])\n",
"priors = update(4, priors, [normal_uniform, biased])\n",
"priors = update(4, priors, [normal_uniform, biased])\n",
"priors = update(5, priors, [normal_uniform, biased])\n",
"priors = update(5, priors, [normal_uniform, biased])\n",
"priors = update(5, priors, [normal_uniform, biased])\n",
"priors = update(5, priors, [normal_uniform, biased])\n",
"priors = update(6, priors, [normal_uniform, biased])\n",
"priors = update(6, priors, [normal_uniform, biased])\n",
"priors = update(6, priors, [normal_uniform, biased])\n",
"priors = update(6, priors, [normal_uniform, biased])\n",
"priors = update(6, priors, [normal_uniform, biased])\n",
"priors = update(7, priors, [normal_uniform, biased])\n",
"priors = update(7, priors, [normal_uniform, biased])\n",
"priors = update(7, priors, [normal_uniform, biased])\n",
"priors = update(7, priors, [normal_uniform, biased])\n",
"priors = update(7, priors, [normal_uniform, biased])\n",
"priors = update(7, priors, [normal_uniform, biased])\n",
"priors = update(8, priors, [normal_uniform, biased])\n",
"priors = update(8, priors, [normal_uniform, biased])\n",
"priors = update(8, priors, [normal_uniform, biased])\n",
"priors = update(8, priors, [normal_uniform, biased])\n",
"priors = update(8, priors, [normal_uniform, biased])\n",
"priors = update(9, priors, [normal_uniform, biased])\n",
"priors = update(9, priors, [normal_uniform, biased])\n",
"priors = update(9, priors, [normal_uniform, biased])\n",
"priors = update(9, priors, [normal_uniform, biased])\n",
"priors = update(10, priors, [normal_uniform, biased])\n",
"priors = update(10, priors, [normal_uniform, biased])\n",
"priors = update(10, priors, [normal_uniform, biased])\n",
"priors = update(11, priors, [normal_uniform, biased])\n",
"priors = update(11, priors, [normal_uniform, biased])\n",
"priors"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The idea here is that I manually loaded a normally uniform set of dice into this model, did updates every time, found that I began to get a posterior belief that this was a normal_uniform distribution. I did this 4 times, and I ended up with a 70+% probability that this was normal uniform.\n",
"\n",
"Now, I could get a different model that measured the switch point, assuming biased for a while. Or, I could build a model that was some sort of mix from bias to normal. I would need a record of a lot of games. Over 6494 games, the dice are very normally distributed. I mean, perfectly. So, if there is an introduction of bias, it's got to be because over that many games, the bias would have been normally distributed as well."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import random\n",
"def weighted_pick(d):\n",
" r = random.uniform(0, sum(d.itervalues()))\n",
" s = 0.0\n",
" for k, w in d.iteritems():\n",
" s += w\n",
" if r < s: return k\n",
" return k"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[0.9999987063264542, 1.2936735458075107e-06]"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"priors = [.5, .5]\n",
"for e in xrange(100):\n",
" x = weighted_pick(normal_uniform)\n",
" while x < 3 or x > 11:\n",
" x = weighted_pick(normal_uniform)\n",
" priors = update(x, priors, [normal_uniform, biased])\n",
"priors"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Since I'm not seeing stable results, I'm going to have to think about this for a while. Updates on the data, every time I see a new die rolled seems to create a bias towards normal_uniform or biased, rather than learning what the real distribution is."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"I reset biased to be more different than random uniform, and got stable results both directions. I think what was happening was something that looks more like a random walk when the two distributions are hard to distinguish.\n",
"\n",
"What's next is a plot on these values."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Normal</th>\n",
" <th>Biased</th>\n",
" <th>Sample</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>0.419355</td>\n",
" <td>0.580645</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>0.342799</td>\n",
" <td>0.657201</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>0.601094</td>\n",
" <td>0.398906</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>0.521139</td>\n",
" <td>0.478861</td>\n",
" <td>3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>0.440085</td>\n",
" <td>0.559915</td>\n",
" <td>4</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Normal Biased Sample\n",
"0 0.419355 0.580645 0\n",
"1 0.342799 0.657201 1\n",
"2 0.601094 0.398906 2\n",
"3 0.521139 0.478861 3\n",
"4 0.440085 0.559915 4"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"prior = [.5, .5]\n",
"n = 100\n",
"posteriors = []\n",
"for e in xrange(n):\n",
" x = weighted_pick(biased)\n",
" posterior = update(x, prior, [normal_uniform, biased])\n",
" posteriors.append(posterior)\n",
" prior = posterior\n",
"df = pd.DataFrame(posteriors, columns=['Normal', 'Biased'])\n",
"df['Sample'] = list(xrange(n))\n",
"df.head()"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<seaborn.axisgrid.FacetGrid at 0x1020e9290>"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\ncAPwik4UqLHrXvI73wdHDsHwMBw5RH7n+wxqSVJHlTGkp5IB+fiTIYSVwH8Hfj7GeKgTb5zffRdU\nq5AV1ZVVoFpN5yVJ6pAyju5+EqgD5407v4mJrWuApwGXAB8LIWTFuQpACGEQeEaMccIz6hDC9cD1\nrecuv/zyNTt37mT16tXk+ejvA4eGBqFWG3eHKgwNsm5gYObf2TJQq9UYsE7mxLprj/XXHuuvnEoX\n0jHGoRDCPcDVwEcBivC9GrhlkpfsAr5r3Lm3AiuBXwYenOJ97gDuGHf6SuCeo0ePMjQ0NHKyXuuG\nkydGW9IAeQP6V3Lw4MGZf3PLwMDAgHUyR9Zde6y/9lh/7dmyZUtH7lu6kC68E7itCOsvkUZ79wMf\nAAgh3A48FGN8Y4xxEPhG64tDCIeBPMa4az4Kk11zbXomXSUFdaMBjTrZNdfOx+0lSZpUKZ9Jxxgj\n8DrgzcBXgWcBL4gxHiguuZApBpF1QuWyK8iuuxHWrEvd3mvXkV13I5XLrlioIkiSlqGs9dmrUnf3\ngQMHxnR3a+bsMps766491l97rL/2bNmyJZv+qtkrZUtakiQZ0pIklZYhLUlSSRnSkiSVlCEtSVJJ\nGdKSJJWUIS1JUkkZ0pIklZQhLUlSSRnSkiSVlCEtSVJJGdKSJJWUIS1JUkkZ0pIklZQhLUlSSRnS\nkiSVlCEtSVJJGdKSJJWUIS1JUkkZ0pIklZQhLUlSSRnSkiSVlCEtSVJJGdKSJJWUIS1JUkkZ0pIk\nlZQhLUlSSRnSkiSVlCEtSVJJGdKSJJWUIS1JUkkZ0pIklZQhLUlSSRnSkiSVlCEtSVJJGdKSJJWU\nIS1JUkkZ0pIklZQhLUlSSRnSkiSVlCEtSVJJGdKSJJWUIS1JUkkZ0pIklZQhLUlSSRnSkiSVlCEt\nSVJJGdKSJJWUIS1JUkkZ0pIklZQhLUlSSRnSkiSVlCEtSVJJGdKSJJWUIS1JUkkZ0pIklZQhLUlS\nSRnSkiSVlCEtSVJJGdKSJJWUIS1JUkkZ0pIklZQhLUlSSRnSkiSVlCEtSVJJGdKSJJWUIS1JUkkZ\n0pIklZQhLUlSSXUtdgGmEkJ4NfB6YDPwNeC1McYvT3HtK4B/B3xnceoe4I1TXS9J0lJQypZ0COE6\n4B3ATuDZpJD+ZAhhwxQv+ZfAh4DnA88BHgQ+FUI4v/OllSSpM8rakr4JuDXGeDtACOGVwIuBlwNv\nH39xjPHfth4XLeuXAlcDH+x4aSVJ6oDStaRDCDXgKuAzzXMxxhz4NPDcGd5mBVADDs57ASVJWiCl\nC2lgA1AFHh93/nHS8+mZeBvwMCnYJUlaksra3T2ZDMinuyiE8JtAAP5ljHGw46WSJKlDyhjSTwJ1\n4Lxx5zcxsXU9Rgjh9cAbgKtjjF+f5trrgetbz11++eVrdu7cyerVq8nzaX8f0CRqtRoDAwOLXYwl\nybprj/XXHuuvnLIyhlEI4QvAF2OMv1IcZ8B+4JYY4+9P8ZpfB94I/GgbU6+uBO45cOAAQ0NDc7zF\n8jYwMMDBgw4FmAvrrj3WX3usv/Zs2bIl68R9y9iSBngncFsI4R7gS6TR3v3ABwBCCLcDD8UY31gc\nvwF4M6llvD+E0GyFH48xnljgskuSNC/KOHCMGGMEXkcK3q8CzwJeEGM8UFxyIWMHkb2KNJr7I8Aj\nLf+9bqHKLEnSfCtld/cisru7TXaZzZ111x7rrz3WX3s61d1dypa0JEkypCVJKi1DWpKkkjKkJUkq\nKUNakqSSMqQlSSopQ1qSpJIypCVJKilDWpKkkjKkJUkqKUNakqSSMqQlSSopQ1qSpJIypCVJKilD\nWpKkkjKkJUkqKUNakqSSMqQlSSopQ1qSpJIypCVJKilDWpKkkjKkJUkqKUNakqSSMqQlSSopQ1qS\npJIypCVJKilDWpKkkjKkJUkqKUNakqSSMqQlSSopQ1qSpJIypCVJKilDWpKkkjKkJUkqKUNakqSS\nMqQlSSopQ1qSpJIypCVJKilDWpKkkjKkJUkqKUNakqSSMqQlSSopQ1qSpJIypCVJKilDWpKkkjKk\nJUkqKUNakqSSMqQlSSopQ1qSpJIypCVJKilDWpKkkjKkJUkqKUNakqSSMqQlSSopQ1qSpJIypCVJ\nKilDWpKkkjKkJUkqKUNakqSSMqQlSSopQ1qSpJIypCVJKilDWpKkkjKkJUkqKUNakqSSMqQlSSop\nQ1qSpJIypCVJKilDWpKkkupa7AJMJYTwauD1wGbga8BrY4xfPsv1LwPeDGwFdgO/GWP8mwUoqiRJ\nHVHKlnQI4TrgHcBO4NmkkP5kCGHDFNc/F/gQ8F7gCuAvgb8MIXzHwpRYkqT5V9aW9E3ArTHG2wFC\nCK8EXgy8HHj7JNf/CvA3McZ3Fsc7Qwg/CrwG+KUFKK8kSfOudC3pEEINuAr4TPNcjDEHPg08d4qX\n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\nTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x105ea0110>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"g = sns.lmplot(x='Sample', y='Biased', data=df)\n",
"g.set(ylim=(0,1.05))\n",
"g.set(xlim=(0,n))"
]
}
],
"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.12"
}
},
"nbformat": 4,
"nbformat_minor": 1
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment