Skip to content

Instantly share code, notes, and snippets.

@koorukuroo
Created September 19, 2018 04:53
Show Gist options
  • Save koorukuroo/3fbe34263525a6fad9f05708307c8ecf to your computer and use it in GitHub Desktop.
Save koorukuroo/3fbe34263525a6fad9f05708307c8ecf 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": [
"### Probability"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"import random"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"6"
]
},
"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": [
"[1, 0, 0, 0, 0, 0, 0, 1, 0, 0]"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"result"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"2"
]
},
"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": [
"4"
]
},
"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.00239"
]
},
"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.5799254058024386"
]
},
"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": 27,
"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": 28,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[6, 4, 8, 8, 2]"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"result[:5]"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.25250674650623334"
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"normal_dist(5, mean, std)"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.20686948925367013"
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"normal_dist(6, mean, std)"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.010203092239839841"
]
},
"execution_count": 31,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"normal_dist(1, mean, std)"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.0016964572396925119"
]
},
"execution_count": 32,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"normal_dist(10, mean, std)"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {},
"outputs": [],
"source": [
"dist_data = []\n",
"for i in result:\n",
" dist_data.append( normal_dist(i, mean, std) )"
]
},
{
"cell_type": "code",
"execution_count": 34,
"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": [
"## Example. 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": 35,
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Dataset"
]
},
{
"cell_type": "code",
"execution_count": 36,
"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": 37,
"metadata": {},
"outputs": [],
"source": [
"rows = text.split(\"\\n\")\n",
"samples = [row.split(\"\\t\") for row in rows]"
]
},
{
"cell_type": "code",
"execution_count": 38,
"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": 38,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"samples"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {},
"outputs": [],
"source": [
"data = dict()\n",
"data['Person'] = list()\n",
"data['height'] = list() # feet\n",
"data['weight'] = list() # lbs\n",
"data['footsize'] = list() # inches"
]
},
{
"cell_type": "code",
"execution_count": 40,
"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['footsize'].append(float(sample[3]))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Generate a dataframe of sample dataset"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {},
"outputs": [],
"source": [
"df = pd.DataFrame(data)"
]
},
{
"cell_type": "code",
"execution_count": 42,
"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>footsize</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>male</td>\n",
" <td>6.00</td>\n",
" <td>180.0</td>\n",
" <td>12.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>male</td>\n",
" <td>5.92</td>\n",
" <td>190.0</td>\n",
" <td>11.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>male</td>\n",
" <td>5.58</td>\n",
" <td>170.0</td>\n",
" <td>12.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>male</td>\n",
" <td>5.92</td>\n",
" <td>165.0</td>\n",
" <td>10.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>female</td>\n",
" <td>5.00</td>\n",
" <td>100.0</td>\n",
" <td>6.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>female</td>\n",
" <td>5.50</td>\n",
" <td>150.0</td>\n",
" <td>8.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>female</td>\n",
" <td>5.42</td>\n",
" <td>130.0</td>\n",
" <td>7.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>female</td>\n",
" <td>5.75</td>\n",
" <td>150.0</td>\n",
" <td>9.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Person height weight footsize\n",
"0 male 6.00 180.0 12.0\n",
"1 male 5.92 190.0 11.0\n",
"2 male 5.58 170.0 12.0\n",
"3 male 5.92 165.0 10.0\n",
"4 female 5.00 100.0 6.0\n",
"5 female 5.50 150.0 8.0\n",
"6 female 5.42 130.0 7.0\n",
"7 female 5.75 150.0 9.0"
]
},
"execution_count": 42,
"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": 43,
"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>footsize</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.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mean</th>\n",
" <td>5.636250</td>\n",
" <td>154.375000</td>\n",
" <td>9.375000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>std</th>\n",
" <td>0.333721</td>\n",
" <td>28.962722</td>\n",
" <td>2.263846</td>\n",
" </tr>\n",
" <tr>\n",
" <th>min</th>\n",
" <td>5.000000</td>\n",
" <td>100.000000</td>\n",
" <td>6.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25%</th>\n",
" <td>5.480000</td>\n",
" <td>145.000000</td>\n",
" <td>7.750000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50%</th>\n",
" <td>5.665000</td>\n",
" <td>157.500000</td>\n",
" <td>9.500000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75%</th>\n",
" <td>5.920000</td>\n",
" <td>172.500000</td>\n",
" <td>11.250000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>max</th>\n",
" <td>6.000000</td>\n",
" <td>190.000000</td>\n",
" <td>12.000000</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" height weight footsize\n",
"count 8.000000 8.000000 8.000000\n",
"mean 5.636250 154.375000 9.375000\n",
"std 0.333721 28.962722 2.263846\n",
"min 5.000000 100.000000 6.000000\n",
"25% 5.480000 145.000000 7.750000\n",
"50% 5.665000 157.500000 9.500000\n",
"75% 5.920000 172.500000 11.250000\n",
"max 6.000000 190.000000 12.000000"
]
},
"execution_count": 43,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.describe()"
]
},
{
"cell_type": "code",
"execution_count": 47,
"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>5.4175</td>\n",
" <td>0.311809</td>\n",
" <td>5.00</td>\n",
" <td>5.315</td>\n",
" <td>5.46</td>\n",
" <td>5.5625</td>\n",
" <td>5.75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>male</th>\n",
" <td>4.0</td>\n",
" <td>5.8550</td>\n",
" <td>0.187172</td>\n",
" <td>5.58</td>\n",
" <td>5.835</td>\n",
" <td>5.92</td>\n",
" <td>5.9400</td>\n",
" <td>6.00</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 5.4175 0.311809 5.00 5.315 5.46 5.5625 5.75\n",
"male 4.0 5.8550 0.187172 5.58 5.835 5.92 5.9400 6.00"
]
},
"execution_count": 47,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_height = df.groupby(\"Person\")['height'].describe()\n",
"df_height"
]
},
{
"cell_type": "code",
"execution_count": 56,
"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>132.50</td>\n",
" <td>23.629078</td>\n",
" <td>100.0</td>\n",
" <td>122.50</td>\n",
" <td>140.0</td>\n",
" <td>150.0</td>\n",
" <td>150.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>male</th>\n",
" <td>4.0</td>\n",
" <td>176.25</td>\n",
" <td>11.086779</td>\n",
" <td>165.0</td>\n",
" <td>168.75</td>\n",
" <td>175.0</td>\n",
" <td>182.5</td>\n",
" <td>190.0</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 132.50 23.629078 100.0 122.50 140.0 150.0 150.0\n",
"male 4.0 176.25 11.086779 165.0 168.75 175.0 182.5 190.0"
]
},
"execution_count": 56,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_weight = df.groupby(\"Person\")['weight'].describe()\n",
"df_weight"
]
},
{
"cell_type": "code",
"execution_count": 49,
"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>7.50</td>\n",
" <td>1.290994</td>\n",
" <td>6.0</td>\n",
" <td>6.75</td>\n",
" <td>7.5</td>\n",
" <td>8.25</td>\n",
" <td>9.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>male</th>\n",
" <td>4.0</td>\n",
" <td>11.25</td>\n",
" <td>0.957427</td>\n",
" <td>10.0</td>\n",
" <td>10.75</td>\n",
" <td>11.5</td>\n",
" <td>12.00</td>\n",
" <td>12.0</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 7.50 1.290994 6.0 6.75 7.5 8.25 9.0\n",
"male 4.0 11.25 0.957427 10.0 10.75 11.5 12.00 12.0"
]
},
"execution_count": 49,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_footsize = df.groupby(\"Person\")['footsize'].describe()\n",
"df_footsize"
]
},
{
"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": 63,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1.578883183264104"
]
},
"execution_count": 63,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"test_value = 6\n",
"prob_height_male = normal_dist(test_value, df_height['mean']['male'], df_height['std']['male'])\n",
"prob_height_male"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$p({\\text{weight}}\\mid {\\text{male}})$"
]
},
{
"cell_type": "code",
"execution_count": 64,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"5.986743024812152e-06"
]
},
"execution_count": 64,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"test_value = 130\n",
"prob_weight_male = normal_dist(test_value, df_weight['mean']['male'], df_weight['std']['male'])\n",
"prob_weight_male"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$p({\\text{foot size}}\\mid {\\text{male}})$"
]
},
{
"cell_type": "code",
"execution_count": 65,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.0013112210442223463"
]
},
"execution_count": 65,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"test_value = 8\n",
"prob_foot_size_male = normal_dist(test_value, df_footsize['mean']['male'], df_footsize['std']['male'])\n",
"prob_foot_size_male"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"${\\displaystyle {\\text{posterior (male)}}}$"
]
},
{
"cell_type": "code",
"execution_count": 66,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"6.197071843878095e-09"
]
},
"execution_count": 66,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"prob_male_data = 0.5*prob_height_male*prob_weight_male*prob_foot_size_male\n",
"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": 67,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.223458726844816 0.016789297889908364 0.286690699891019\n",
"0.0005377909183630024\n"
]
}
],
"source": [
"prob_height_female = normal_dist(6, df_height['mean']['female'], df_height['std']['female'])\n",
"prob_weight_female = normal_dist(130, df_weight['mean']['female'], df_weight['std']['female'])\n",
"prob_foot_size_female = normal_dist(8, df_footsize['mean']['female'], df_footsize['std']['female'])\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": 71,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Female\n"
]
}
],
"source": [
"if prob_male_data/prob_female_data > 0:\n",
" print(\"Female\")\n",
"else:\n",
" print(\"Male\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"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