Skip to content

Instantly share code, notes, and snippets.

@koorukuroo
Last active September 19, 2018 04:52
Show Gist options
  • Save koorukuroo/904d650d19ab970bf6442adba89efd19 to your computer and use it in GitHub Desktop.
Save koorukuroo/904d650d19ab970bf6442adba89efd19 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Populating the interactive namespace from numpy and matplotlib\n"
]
}
],
"source": [
"%pylab inline"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Naive Bayes Classifier"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Basic Knowledge"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Probability"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"import random"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"2"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"random.choice([1, 2, 3, 4, 5, 6])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Ex1. Rolling Dice"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"result = []\n",
"\n",
"for i in range(10000):\n",
" choice = random.choice([1, 2, 3, 4, 5, 6])\n",
" result.append(choice)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.hist(result, bins=6, rwidth=0.5);"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Ex2. Fliping a coin"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Once"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"result = []\n",
"for _ in range(10):\n",
" choice = random.choice([0, 1])\n",
" result.append(choice)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[0, 1, 0, 1, 0, 0, 1, 0, 0, 0]"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"result"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"3"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sum(result)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Several times"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"def coin_flip():\n",
" result = []\n",
" for _ in range(10):\n",
" choice = random.choice([0, 1])\n",
" result.append(choice)\n",
" return sum(result)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"8"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"coin_flip()"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [],
"source": [
"result = []\n",
"for _ in range(100):\n",
" result.append(coin_flip())"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.hist(result);"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [],
"source": [
"result = []\n",
"for _ in range(10000):\n",
" result.append(coin_flip())"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.hist(result);"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [],
"source": [
"result = []\n",
"for _ in range(100000):\n",
" result.append(coin_flip())"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.hist(result);"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"5.00496"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"mean = np.mean(result)\n",
"mean"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1.576983005108172"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"std = np.std(result)\n",
"std"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Probability Density Function"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$${\\frac 1{\\sigma {\\sqrt {2\\pi }}}}\\;\\exp \\left(-{\\frac {\\left(x-\\mu \\right)^{2}}{2\\sigma ^{2}}}\\right)\\!$$"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [],
"source": [
"def normal_dist(x, mu, sigma):\n",
" value = 1/(sigma*np.sqrt(2*np.pi)) * np.exp(-((x-mu)**2)/(2*sigma**2))\n",
" return value"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[7, 7, 3, 5, 6]"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"result[:5]"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.2529769222819525"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"normal_dist(5, mean, std)"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.20731455506830634"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"normal_dist(6, mean, std)"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.01005864270443588"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"normal_dist(1, mean, std)"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.0016767927425059594"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"normal_dist(10, mean, std)"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [],
"source": [
"dist_data = []\n",
"for i in result:\n",
" dist_data.append( normal_dist(i, mean, std) )"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.plot(dist_data, '.');"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.scatter(result, dist_data);"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Example1. Gender classification (Wikipedia Example)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Problem: classify whether a given person is a male or a female based on the measured features. The features include height, weight, and foot size."
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Dataset"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [],
"source": [
"# https://en.wikipedia.org/wiki/Naive_Bayes_classifier\n",
"text = \"\"\"male\t6\t180\t12\n",
"male\t5.92\t190\t11\n",
"male\t5.58\t170\t12\n",
"male\t5.92\t165\t10\n",
"female\t5\t100\t6\n",
"female\t5.5\t150\t8\n",
"female\t5.42\t130\t7\n",
"female\t5.75\t150\t9\"\"\""
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [],
"source": [
"rows = text.split(\"\\n\")\n",
"samples = [row.split(\"\\t\") for row in rows]"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[['male', '6', '180', '12'],\n",
" ['male', '5.92', '190', '11'],\n",
" ['male', '5.58', '170', '12'],\n",
" ['male', '5.92', '165', '10'],\n",
" ['female', '5', '100', '6'],\n",
" ['female', '5.5', '150', '8'],\n",
" ['female', '5.42', '130', '7'],\n",
" ['female', '5.75', '150', '9']]"
]
},
"execution_count": 31,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"samples"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {},
"outputs": [],
"source": [
"data = dict()\n",
"data['Person'] = list()\n",
"data['height'] = list() # feet\n",
"data['weight'] = list() # lbs\n",
"data['foot_size'] = list() # inches"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {},
"outputs": [],
"source": [
"# for sample in samples:\n",
"# data['Person'].append(sample[0])\n",
"# data['height'].append(float(sample[1]))\n",
"# data['weight'].append(float(sample[2]))\n",
"# data['foot_size'].append(float(sample[3]))"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {},
"outputs": [],
"source": [
"for sample in samples:\n",
" data['Person'].append(sample[0])\n",
" data['height'].append(float(sample[1])*30.48) # cm\n",
" data['weight'].append(float(sample[2])*0.453592) # kg\n",
" data['foot_size'].append(float(sample[3])*2.54) # cm"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Generate a dataframe of sample dataset"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {},
"outputs": [],
"source": [
"df = pd.DataFrame(data)"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Person</th>\n",
" <th>height</th>\n",
" <th>weight</th>\n",
" <th>foot_size</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>male</td>\n",
" <td>182.8800</td>\n",
" <td>81.64656</td>\n",
" <td>30.48</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>male</td>\n",
" <td>180.4416</td>\n",
" <td>86.18248</td>\n",
" <td>27.94</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>male</td>\n",
" <td>170.0784</td>\n",
" <td>77.11064</td>\n",
" <td>30.48</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>male</td>\n",
" <td>180.4416</td>\n",
" <td>74.84268</td>\n",
" <td>25.40</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>female</td>\n",
" <td>152.4000</td>\n",
" <td>45.35920</td>\n",
" <td>15.24</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>female</td>\n",
" <td>167.6400</td>\n",
" <td>68.03880</td>\n",
" <td>20.32</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>female</td>\n",
" <td>165.2016</td>\n",
" <td>58.96696</td>\n",
" <td>17.78</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>female</td>\n",
" <td>175.2600</td>\n",
" <td>68.03880</td>\n",
" <td>22.86</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Person height weight foot_size\n",
"0 male 182.8800 81.64656 30.48\n",
"1 male 180.4416 86.18248 27.94\n",
"2 male 170.0784 77.11064 30.48\n",
"3 male 180.4416 74.84268 25.40\n",
"4 female 152.4000 45.35920 15.24\n",
"5 female 167.6400 68.03880 20.32\n",
"6 female 165.2016 58.96696 17.78\n",
"7 female 175.2600 68.03880 22.86"
]
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Statistics"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Generates descriptive statistics that summarize the central tendency, dispersion and shape of a dataset’s distribution, excluding NaN values.\n",
"https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.describe.html"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>height</th>\n",
" <th>weight</th>\n",
" <th>foot_size</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>count</th>\n",
" <td>8.000000</td>\n",
" <td>8.000000</td>\n",
" <td>8.00000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mean</th>\n",
" <td>171.792900</td>\n",
" <td>70.023265</td>\n",
" <td>23.81250</td>\n",
" </tr>\n",
" <tr>\n",
" <th>std</th>\n",
" <td>10.171813</td>\n",
" <td>13.137259</td>\n",
" <td>5.75017</td>\n",
" </tr>\n",
" <tr>\n",
" <th>min</th>\n",
" <td>152.400000</td>\n",
" <td>45.359200</td>\n",
" <td>15.24000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25%</th>\n",
" <td>167.030400</td>\n",
" <td>65.770840</td>\n",
" <td>19.68500</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50%</th>\n",
" <td>172.669200</td>\n",
" <td>71.440740</td>\n",
" <td>24.13000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75%</th>\n",
" <td>180.441600</td>\n",
" <td>78.244620</td>\n",
" <td>28.57500</td>\n",
" </tr>\n",
" <tr>\n",
" <th>max</th>\n",
" <td>182.880000</td>\n",
" <td>86.182480</td>\n",
" <td>30.48000</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" height weight foot_size\n",
"count 8.000000 8.000000 8.00000\n",
"mean 171.792900 70.023265 23.81250\n",
"std 10.171813 13.137259 5.75017\n",
"min 152.400000 45.359200 15.24000\n",
"25% 167.030400 65.770840 19.68500\n",
"50% 172.669200 71.440740 24.13000\n",
"75% 180.441600 78.244620 28.57500\n",
"max 182.880000 86.182480 30.48000"
]
},
"execution_count": 37,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.describe()"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>count</th>\n",
" <th>mean</th>\n",
" <th>std</th>\n",
" <th>min</th>\n",
" <th>25%</th>\n",
" <th>50%</th>\n",
" <th>75%</th>\n",
" <th>max</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Person</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>female</th>\n",
" <td>4.0</td>\n",
" <td>165.1254</td>\n",
" <td>9.503946</td>\n",
" <td>152.4000</td>\n",
" <td>162.0012</td>\n",
" <td>166.4208</td>\n",
" <td>169.5450</td>\n",
" <td>175.26</td>\n",
" </tr>\n",
" <tr>\n",
" <th>male</th>\n",
" <td>4.0</td>\n",
" <td>178.4604</td>\n",
" <td>5.705001</td>\n",
" <td>170.0784</td>\n",
" <td>177.8508</td>\n",
" <td>180.4416</td>\n",
" <td>181.0512</td>\n",
" <td>182.88</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" count mean std min 25% 50% 75% \\\n",
"Person \n",
"female 4.0 165.1254 9.503946 152.4000 162.0012 166.4208 169.5450 \n",
"male 4.0 178.4604 5.705001 170.0784 177.8508 180.4416 181.0512 \n",
"\n",
" max \n",
"Person \n",
"female 175.26 \n",
"male 182.88 "
]
},
"execution_count": 38,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.groupby(\"Person\")['height'].describe()"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>count</th>\n",
" <th>mean</th>\n",
" <th>std</th>\n",
" <th>min</th>\n",
" <th>25%</th>\n",
" <th>50%</th>\n",
" <th>75%</th>\n",
" <th>max</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Person</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>female</th>\n",
" <td>4.0</td>\n",
" <td>60.10094</td>\n",
" <td>10.717961</td>\n",
" <td>45.35920</td>\n",
" <td>55.56502</td>\n",
" <td>63.50288</td>\n",
" <td>68.03880</td>\n",
" <td>68.03880</td>\n",
" </tr>\n",
" <tr>\n",
" <th>male</th>\n",
" <td>4.0</td>\n",
" <td>79.94559</td>\n",
" <td>5.028874</td>\n",
" <td>74.84268</td>\n",
" <td>76.54365</td>\n",
" <td>79.37860</td>\n",
" <td>82.78054</td>\n",
" <td>86.18248</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" count mean std min 25% 50% 75% \\\n",
"Person \n",
"female 4.0 60.10094 10.717961 45.35920 55.56502 63.50288 68.03880 \n",
"male 4.0 79.94559 5.028874 74.84268 76.54365 79.37860 82.78054 \n",
"\n",
" max \n",
"Person \n",
"female 68.03880 \n",
"male 86.18248 "
]
},
"execution_count": 39,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.groupby(\"Person\")['weight'].describe()"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>count</th>\n",
" <th>mean</th>\n",
" <th>std</th>\n",
" <th>min</th>\n",
" <th>25%</th>\n",
" <th>50%</th>\n",
" <th>75%</th>\n",
" <th>max</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Person</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>female</th>\n",
" <td>4.0</td>\n",
" <td>19.050</td>\n",
" <td>3.279126</td>\n",
" <td>15.24</td>\n",
" <td>17.145</td>\n",
" <td>19.05</td>\n",
" <td>20.955</td>\n",
" <td>22.86</td>\n",
" </tr>\n",
" <tr>\n",
" <th>male</th>\n",
" <td>4.0</td>\n",
" <td>28.575</td>\n",
" <td>2.431865</td>\n",
" <td>25.40</td>\n",
" <td>27.305</td>\n",
" <td>29.21</td>\n",
" <td>30.480</td>\n",
" <td>30.48</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" count mean std min 25% 50% 75% max\n",
"Person \n",
"female 4.0 19.050 3.279126 15.24 17.145 19.05 20.955 22.86\n",
"male 4.0 28.575 2.431865 25.40 27.305 29.21 30.480 30.48"
]
},
"execution_count": 40,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.groupby(\"Person\")['foot_size'].describe()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's say we have equiprobable classes so $P(male)= P(female) = 0.5$. This prior probability distribution might be based on our knowledge of frequencies in the larger population, or on frequency in the training set."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Test"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"##### Evidence"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The evidence (also termed normalizing constant) may be calculated:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$${\\displaystyle {\\begin{aligned}{\\text{evidence}}=P({\\text{male}})\\,p({\\text{height}}\\mid {\\text{male}})\\,p({\\text{weight}}\\mid {\\text{male}})\\,p({\\text{foot size}}\\mid {\\text{male}})\\\\+P({\\text{female}})\\,p({\\text{height}}\\mid {\\text{female}})\\,p({\\text{weight}}\\mid {\\text{female}})\\,p({\\text{foot size}}\\mid {\\text{female}})\\end{aligned}}}$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"However, given the sample, the evidence is a constant and thus scales both posteriors equally. It therefore does not affect classification and can be ignored. We now determine the probability distribution for the sex of the sample."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"##### Posterior"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$${\\displaystyle {\\text{posterior (male)}}={\\frac {P({\\text{male}})\\,p({\\text{height}}\\mid {\\text{male}})\\,p({\\text{weight}}\\mid {\\text{male}})\\,p({\\text{foot size}}\\mid {\\text{male}})}{evidence}}}$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$p({\\text{height}}\\mid {\\text{male}})$"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.023286164045900566"
]
},
"execution_count": 41,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"test_value = 170\n",
"prob_height_male = normal_dist(test_value, 178.4604, 5.705001)\n",
"prob_height_male"
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"3.0445845280595133e-05"
]
},
"execution_count": 42,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"test_value = 60\n",
"prob_weight_male = normal_dist(test_value, 79.94559, 5.028874)\n",
"prob_weight_male"
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.11399294791774302"
]
},
"execution_count": 43,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"test_value = 26.5\n",
"prob_foot_size_male = normal_dist(test_value, 28.575, 2.431865)\n",
"prob_foot_size_male"
]
},
{
"cell_type": "code",
"execution_count": 44,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"4.040861617342621e-08"
]
},
"execution_count": 44,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"0.5*prob_height_male*prob_weight_male*prob_foot_size_male"
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {},
"outputs": [],
"source": [
"# prob_height_male = normal_dist(6, 5.8550, 0.187172)\n",
"# prob_weight_male = normal_dist(130, 176.25, 11.086779)\n",
"# prob_foot_size_male = normal_dist(8, 11.25, 0.957427)\n",
"\n",
"# print(prob_height_male, prob_weight_male, prob_foot_size_male)\n",
"# print(0.5*prob_height_male*prob_weight_male*prob_foot_size_male)"
]
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.051800627867100664 1.3198510367846946e-05 0.0005162290843604684\n",
"1.7647062145489237e-10\n"
]
}
],
"source": [
"prob_height_male = normal_dist(182.88, 178.4604, 5.705001)\n",
"prob_weight_male = normal_dist(58.96696, 79.94559, 5.028874)\n",
"prob_foot_size_male = normal_dist(20.32, 28.575, 2.431865)\n",
"\n",
"print(prob_height_male, prob_weight_male, prob_foot_size_male)\n",
"prob_male_data = 0.5*prob_height_male*prob_weight_male*prob_foot_size_male\n",
"print(prob_male_data)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$${\\displaystyle {\\text{posterior (female)}}={\\frac {P({\\text{female}})\\,p({\\text{height}}\\mid {\\text{female}})\\,p({\\text{weight}}\\mid {\\text{female}})\\,p({\\text{foot size}}\\mid {\\text{female}})}{evidence}}}$$"
]
},
{
"cell_type": "code",
"execution_count": 47,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.007331323961664202 0.037014095469218904 0.11287035135585421\n",
"1.531438048559744e-05\n"
]
}
],
"source": [
"prob_height_female = normal_dist(182.88, 165.1254, 9.503946)\n",
"prob_weight_female = normal_dist(58.96696, 60.10094, 10.717961)\n",
"prob_foot_size_female = normal_dist(20.32, 19.050, 3.279126)\n",
"\n",
"print(prob_height_female, prob_weight_female, prob_foot_size_female)\n",
"prob_female_data = 0.5*prob_height_female*prob_weight_female*prob_foot_size_female\n",
"print(prob_female_data)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Since posterior numerator is greater in the female case, we predict the sample is female."
]
},
{
"cell_type": "code",
"execution_count": 48,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1.1523196881575189e-05"
]
},
"execution_count": 48,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"prob_male_data/prob_female_data"
]
}
],
"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.4"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment