zuma/w3/zumz3a.ipynb

1205 lines
450 KiB
Plaintext
Raw Normal View History

2021-03-17 20:09:43 +01:00
{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Uczenie maszynowe UMZ 2017/2018\n",
"# 3. Naiwny klasyfikator bayesowski, drzewa decyzyjne\n",
"### Część 1"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## 3.1. Naiwny klasyfikator bayesowski"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"* Naiwny klasyfikator bayesowski jest algorytmem dla problemu klasyfikacji wieloklasowej.\n",
"* Naszym celem jest znalezienie funkcji uczącej $f \\colon x \\mapsto y$, gdzie $y$ oznacza jedną ze zdefiniowanych wcześniej klas.\n",
"* Klasyfikacja probabilistyczna polega na wskazaniu klasy o najwyższym prawdopodobieństwie:\n",
"$$ \\hat{y} = \\mathop{\\arg \\max}_y P( y \\,|\\, x ) $$\n",
"* Klasyfikatory probabilistyczne → klasyfikatory bayesowskie → naiwny klasyfikator bayesowski"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"### Twierdzenie Bayesa\n",
"\n",
"$$ P( y_k \\,|\\, x ) = \\frac{ P( x \\,|\\, y_k ) \\cdot P( y_k ) }{ \\sum_{i} P( x \\,|\\, y_i ) \\, P( y_i ) } $$"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"### Twierdzenie Bayesa\n",
"\n",
"$$ \\underbrace{P( y_k \\,|\\, x )}_\\textrm{ prawd. a posteriori } = \\frac{ \\overbrace{ P( x \\,|\\, y_k )}^\\textrm{ model klasy } \\cdot \\overbrace{P( y_k )}^\\textrm{ prawd. a priori } }{ \\underbrace{\\sum_{i} P( x \\,|\\, y_i ) \\, P( y_i )}_\\textrm{wyrażenie normalizacyjne} } $$"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"### Rola wyrażenia normalizacyjnego w twierdzeniu Bayesa\n",
"\n",
"_Przykład_: obserwacja nietypowa ma małe prawdopodobieństwo względem dowolnej klasy, wyrażenie normalizacyjne sprawia, że to prawdopodobieństwo staje się porównywalne z prawdopodobieństwami typowych obserwacji, ale nie wpływa na klasyfikację!"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"### Klasyfikatory dyskryminatywne a generatywne\n",
"\n",
"* Klasyfikatory generatywne tworzą model rozkładu prawdopodobieństwa dla każdej z klas.\n",
"* Klasyfikatory dyskryminatywne wyznaczają granicę klas (_decision boundary_) bezpośrednio.\n",
"* Naiwny klasyfikator baywsowski jest klasyfikatorem generatywnym (ponieważ wyznacza $P( x \\,|\\, y )$).\n",
"* Wszystkie klasyfikatory generatywne są probabilistyczne, ale nie na odwrót.\n",
"* Regresja logistyczna jest przykładem klasyfikatora dyskryminatywnego."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"### Założenie niezależności dla naiwnego klasyfikatora bayesowskiego\n",
"\n",
"* Naiwny klasyfikator bayesowski jest _naiwny_, ponieważ zakłada, że poszczególne cechy są niezależne od siebie:\n",
"$$ P( x_1, \\ldots, x_n \\,|\\, y ) \\,=\\, \\prod_{i=1}^n P( x_i \\,|\\, x_1, \\ldots, x_{i-1}, y ) \\,=\\, \\prod_{i=1}^n P( x_i \\,|\\, y ) $$\n",
"* To założenie jest bardzo przydatne ze względów obliczeniowych, ponieważ bardzo często mamy do czynienia z ogromną liczbą cech (bitmapy, słowniki itp.)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"### Naiwny klasyfikator bayesowski przykład"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"slideshow": {
"slide_type": "notes"
}
},
"outputs": [],
"source": [
"# Przydtne importy\n",
"\n",
"import ipywidgets as widgets\n",
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"import pandas\n",
"\n",
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"outputs": [],
"source": [
"# Wczytanie danych (gatunki kosaćców)\n",
"\n",
"data_iris_setosa = (\n",
" pandas.read_csv('iris.csv', usecols=['pł.dł.', 'pł.sz.', 'Gatunek'])\n",
" .apply(lambda x: [x[0], x[1], 1 if x[2] == 'Iris-setosa' else 0], axis=1))\n",
"data_iris_setosa.columns = ['dł. płatka', 'szer. płatka', 'Iris setosa?']\n",
"\n",
"m, n_plus_1 = data_iris_setosa.values.shape\n",
"n = n_plus_1 - 1\n",
"Xn = data_iris_setosa.values[:, 0:n].reshape(m, n)\n",
"\n",
"X = np.matrix(np.concatenate((np.ones((m, 1)), Xn), axis=1)).reshape(m, n_plus_1)\n",
"Y = np.matrix(data_iris_setosa.values[:, 2]).reshape(m, 1)"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"count: {0: 100, 1: 50}\n",
"prior prob.: {0: 0.6666666666666666, 1: 0.3333333333333333}\n"
]
}
],
"source": [
"classes = [0, 1]\n",
"count = [sum(1 if y == c else 0 for y in Y.T.tolist()[0]) for c in classes]\n",
"prior_prob = [float(count[c]) / float(Y.shape[0]) for c in classes]\n",
"\n",
"print 'count: ', {c: count[c] for c in classes}\n",
"print 'prior prob.:', {c: prior_prob[c] for c in classes}"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"slideshow": {
"slide_type": "notes"
}
},
"outputs": [],
"source": [
"# Wykres danych (wersja macierzowa)\n",
"def plot_data_for_classification(X, Y, xlabel, ylabel): \n",
" fig = plt.figure(figsize=(16*.6, 9*.6))\n",
" ax = fig.add_subplot(111)\n",
" fig.subplots_adjust(left=0.1, right=0.9, bottom=0.1, top=0.9)\n",
" X = X.tolist()\n",
" Y = Y.tolist()\n",
" X1n = [x[1] for x, y in zip(X, Y) if y[0] == 0]\n",
" X1p = [x[1] for x, y in zip(X, Y) if y[0] == 1]\n",
" X2n = [x[2] for x, y in zip(X, Y) if y[0] == 0]\n",
" X2p = [x[2] for x, y in zip(X, Y) if y[0] == 1]\n",
" ax.scatter(X1n, X2n, c='r', marker='x', s=50, label='Dane')\n",
" ax.scatter(X1p, X2p, c='g', marker='o', s=50, label='Dane')\n",
" \n",
" ax.set_xlabel(xlabel)\n",
" ax.set_ylabel(ylabel)\n",
" ax.margins(.05, .05)\n",
" return fig"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"outputs": [
{
"data": {
"image/png": "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\nS+2dsNokpbokTbyqav9
"text/plain": [
"<matplotlib.figure.Figure at 0x7f805c1a8510>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig = plot_data_for_classification(X, Y, xlabel=u'dł. płatka', ylabel=u'szer. płatka')"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[matrix([[ 1. , 4.906, 1.676]]), matrix([[ 1. , 1.464, 0.244]])]\n",
"[matrix([[ 0. , 0.8214402 , 0.42263933]]), matrix([[ 0. , 0.17176728, 0.10613199]])]\n"
]
}
],
"source": [
"XY = np.column_stack((X, Y))\n",
"XY_split = [XY[np.where(XY[:,3] == c)[0]] for c in classes]\n",
"X_split = [XY_split[c][:,0:3] for c in classes]\n",
"Y_split = [XY_split[c][:,3] for c in classes]\n",
"\n",
"X_mean = [np.mean(X_split[c], axis=0) for c in classes]\n",
"X_std = [np.std(X_split[c], axis=0) for c in classes]\n",
"print X_mean \n",
"print X_std"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"slideshow": {
"slide_type": "notes"
}
},
"outputs": [],
"source": [
"# Rysowanie średnich\n",
"def draw_means(fig, means, xmin=0.0, xmax=7.0, ymin=0.0, ymax=7.0):\n",
" class_color = {0: 'r', 1: 'g'}\n",
" classes = range(len(means))\n",
" ax = fig.axes[0]\n",
" mean_x1 = [means[c].item(0, 1) for c in classes]\n",
" mean_x2 = [means[c].item(0, 2) for c in classes]\n",
" for c in classes:\n",
" ax.plot([mean_x1[c], mean_x1[c]], [xmin, xmax],\n",
" color=class_color.get(c, 'c'), linestyle='dashed')\n",
" ax.plot([ymin, ymax], [mean_x2[c], mean_x2[c]],\n",
" color=class_color.get(c, 'c'), linestyle='dashed') "
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"outputs": [],
"source": [
"from scipy.stats import norm\n",
"\n",
"# Prawdopodobieństwo klasy dla pojedynczej cechy\n",
"def prob(x, c, feature, mean, std):\n",
" return norm(mean[c].item(0, feature), std[c].item(0, feature)).pdf(x)\n",
"\n",
"# Prawdopodobieństwo klasy\n",
"def class_prob(x, c, mean, std):\n",
" return prob(x[1], c, 1, mean, std) * prob(x[2], c, 2, mean, std)"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"slideshow": {
"slide_type": "notes"
}
},
"outputs": [],
"source": [
"# Wykres prawdopodobieństw klas\n",
"def plot_prob(fig, X_mean, X_std, classes, xmin=0.0, xmax=7.0, ymin=0.0, ymax=7.0):\n",
" class_color = {0: 'r', 1: 'g'}\n",
" ax = fig.axes[0]\n",
" x1, x2 = np.meshgrid(np.arange(xmin, xmax, 0.02),\n",
" np.arange(xmin, xmax, 0.02))\n",
" for c in classes:\n",
" fun1 = lambda x: prob(x, c, 1, X_mean, X_std)\n",
" fun2 = lambda x: prob(x, c, 2, X_mean, X_std)\n",
" p = fun1(x1) * fun2(x2)\n",
" plt.contour(x1, x2, p, levels=np.arange(0.0, 1.0, 0.1),\n",
" colors=class_color.get(c, 'c'), lw=3)"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/pawel/.local/lib/python2.7/site-packages/matplotlib/contour.py:967: UserWarning: The following kwargs were not used by contour: 'lw'\n",
" s)\n"
]
},
{
"data": {
"image/png": "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\nAbabBGASAGRkZATXaiI
"text/plain": [
"<matplotlib.figure.Figure at 0x7f805c1dad10>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig = plot_data_for_classification(X, Y, xlabel=u'dł. płatka', ylabel=u'szer. płatka')\n",
"draw_means(fig, X_mean)\n",
"plot_prob(fig, X_mean, X_std, classes)"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"slideshow": {
"slide_type": "notes"
}
},
"outputs": [],
"source": [
"# Prawdopodobieństwo a posteriori\n",
"def posterior_prob(x, c):\n",
" normalizer = sum(class_prob(x, c, X_mean, X_std)\n",
" * prior_prob[c]\n",
" for c in classes)\n",
" return (class_prob(x, c, X_mean, X_std) \n",
" * prior_prob[c]\n",
" / normalizer)\n",
"\n",
"# Wykres granicy klas dla naiwnego Bayesa\n",
"def plot_decision_boundary_bayes(fig, X_mean, X_std, xmin=0.0, xmax=7.0, ymin=0.0, ymax=7.0):\n",
" ax = fig.axes[0]\n",
" x1, x2 = np.meshgrid(np.arange(xmin, xmax, 0.02),\n",
" np.arange(ymin, ymax, 0.02))\n",
" p = [posterior_prob([1, x1, x2], c) for c in classes]\n",
" p_diff = p[1] - p[0]\n",
" plt.contour(x1, x2, p_diff, levels=[0.0], colors='c', lw=3);"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAlYAAAFnCAYAAABkaweKAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzt3XucXHV9//H3Z2/ZZHeTzZKYTQK5\nQCApUhLDVqkCLeAFsU1SQLBVf2JpafujJBAFjdWf1tbSYksMSi801lupUknCRVDESkVaIyYYESFA\nhEQg9/tukr3MzOf3x8yws5udmZOZc+a2r+fjMY/dc86cc75zkgd58z2f+RxzdwEAAKB4deUeAAAA\nQK0gWAEAAISEYAUAABASghUAAEBICFYAAAAhIVgBAACEhGAFAAAQEoIVAABASAhWAAAAIWko9wAy\nTZo0yWfNmlXuYQAAAAyxcePGve4+Od/7KipYzZo1Sxs2bCj3MAAAAIYws21B3setQAAAgJAQrAAA\nAEJCsAIAAAgJwQoAACAkBCsAAICQEKwAAABCQrACAAAICcEKAAAgJAQrAACAkBCsAAAAQkKwAgAA\nCAnBCgAAICQEKwAAgJAQrAAAAEJCsAIAAAgJwQoAACAkBCsAAICQEKwAAABCQrACAAAICcEKAAAg\nJAQrAACAkBCsAAAAQkKwAgAACAnBCgAAICQEKwAAgJAQrAAAAEJCsAIAAAgJwQoAACAkBCsAAICQ\nEKwAAABCQrACAAAICcEKAAAgJAQrAACAkBCsAAAAQkKwAgAACAnBCgAAICQEKwAAgJAQrAAAAEIS\nabAys3Yzu8fMNpvZs2b2m1GeDwAAoJwaIj7+KknfcfcrzKxJ0riIzwcAAFA2kQUrM5sg6QJJV0uS\nu/dL6o/qfAAAAOUW5a3A2ZL2SPqSmf3UzFabWcvwN5nZtWa2wcw27NmzJ8LhAAAARCvKYNUgaaGk\nf3L3N0g6Iumjw9/k7ne6e5e7d02ePDnC4QAAAEQrymD1iqRX3P3HqeV7lAxaAAAANSmyYOXuOyW9\nbGZzU6sulvRMVOcDAAAot6i/FXi9pLtS3wh8UdIHIz4fAABA2UQarNx9k6SuKM8BAABQKei8DgAA\nEBKCFQAAQEgIVgAAACEhWAEAAISEYAUAABASghUAAEBICFYAAAAhIVgBAACEhGAFAAAQEoIVAABA\nSAhWAAAAISFYAQAAhIRgBQAAEBKCFQAAQEgIVgAAACEhWAEAAISEYAUAABASghUAAEBICFYAAAAh\nIVgBAACEhGAFAAAQEoIVAABASAhWAAAAISFYAQAAhIRgBQAAEBKCFQAAQEgIVgAAACEhWAEAAISE\nYAUAABASghUAAEBICFYAAAAhIVgBAACEhGAFAAAQEoIVAABASAhWAAAAISFYAQAAhKQhyoOb2VZJ\n3ZLikmLu3hXl+QAAAMop0mCVcqG77y3BeQAAAMqKW4EAAAAhiTpYuaTvmtlGM7t2pDeY2bVmtsHM\nNuzZsyfi4QAAAEQn6mB1nrsvlPROSdeZ2QXD3+Dud7p7l7t3TZ48OeLhAAAARCfSYOXur6Z+7pa0\nTtIbozwfAABAOUUWrMysxcza0r9Lerukp6M6HwAAQLlF+a3AKZLWmVn6PP/h7t+J8HwAAABlFVmw\ncvcXJc2P6vgAAACVhnYLAAAAISFYAQAAhIRgBQAAEBKCFQAAQEgIVgAAACEhWAEAAISEYAUAABAS\nghUAAEBICFYAAAAhIVgBAACEhGAFAAAQEoIVAABASAhWAAAAISFYAQAAhIRgBQAAEBKCFQAAQEgI\nVgAAACEhWAEAAISEYAUAABASghUAAEBICFYAAAAhIVgBAACEhGAFAAAQEoIVAABASAhWAAAAISFY\nAQAAhIRgBQAAEBKCFQAAQEgIVgAAACEhWAEAAISEYAUAABASghUAAEBICFYAAAAhIVgBAACEpCHo\nG83sdZKa08vu/qtIRgQAAFCl8s5YmdkiM3tB0kuSfiBpq6RvBz2BmdWb2U/N7FsFjxIAAKAKBLkV\n+FeSzpX0vLvPlnSxpPUncI5lkp4tYGwAAABVJUiwGnD3fZLqzKzO3R+V1BXk4GZ2sqR3SVpdxBgB\nAACqQpAaq4Nm1irpMUl3mdluSUcCHv9zkm6W1Fbg+AAAAKpGkBmrxZKOSrpR0nck/VLS7+Tbycx+\nR9Jud9+Y533XmtkGM9uwZ8+eAMMBAACoTEGC1QXunnD3mLt/xd1vl3RlgP3eImmRmW2V9A1JF5nZ\nvw9/k7vf6e5d7t41efLkExo8AABAJQkSrD5hZhelF8zsJiVnsXJy9xXufrK7z5L0Hknfd/f3FTxS\nAACAChekxmqRpG+lAtUlkuYpQLACAAAYbfIGK3ffa2aLJH1P0kZJV7i7n8hJ3P2/Jf13IQMEAACo\nFlmDlZl1S3JJlvrZJOlUSVeYmbv7+NIMEQAAoDpkDVbuTosEAACAExDkkTb/FWQdAADAaJfrVmCz\npBZJk8xsopK3BCVpvKTpJRgbAABAVclVvP4nkm6QNE3JovV0sDos6QsRjwsAAKDq5KqxWiVplZld\n7+6fL+GYAAAAqlKQdgufN7OzJJ0pqTlj/VejHBgAAEC1yRuszOyTkn5byWD1kKR3SnpcEsEKAAAg\nQ5BH2lwh6WJJO939g5LmS5oQ6agAAACqUJBgdczdE5JiZjZe0m5Jp0Q7LAAAgOoT5FmBG8ysXdK/\nKvntwB5JP4p0VAAAAFUoSPH6/zWzRnf/ZzP7jqTx7v5UCcYGAABQVXI1CF2Y+vVUSe8xs88o1cvK\nzBa6+5MlGB8AAEDVyDVj9Q8Zv4+V9B1Jz6SWXdJFUQ0KAACgGuVqEHph5rKZLXX326MfEgAAQHUK\n8hDmZjNbLulCM1tjZjekniMIAACADEG+FfhVSd2S0rNVfyDpa5LeHdWgAAAAqlGQYHWWu5+Zsfyo\nmT2T9d0AAACjVJAGoU+a2bnpBTN7k6QN0Q0JAACgOgWZsTpH0v+a2a9SyzMkPWdmP5fk7n52ZKMD\nAACoIkGC1SWRjwIAAKAGBOm8vq0UAwEAAKh2QWqsAAAAEADBCgAAICQEKwAAgJAUFKzM7M6wBwIA\nAFDtCp2x+pdQRwEAAFADcgYrM6s3s78fvt7dN0Y3JAAAgOqUM1i5e1zSeSUaCwAAQFUL0iD0p2Z2\nv6RvSjqSXunuayMbFQAAQBUKEqyaJe2TdFHGOpdEsAIAAMgQpPP6B0sxEAAAgGqX91uBZnaGmf2X\nmT2dWj7bzD4e/dAAAACqS5B2C/8qaYWkAUly96ckvSfKQQEAAFSjIMFqnLs/MWxdLIrBAAAAVLMg\nwWqvmZ2mZMG6zOwKSTsiHRUAAEAVCvKtwOsk3Slpnpm9KuklSe/Lt5OZNUt6TNKY1HnucfdPFjFW\nAACAihbkW4EvSnqrmbVIqnP37oDH7pN0kbv3mFmjpMfN7Nvuvr6I8QIAAFSsIN8KjJvZ30o6mg5V\nZvZkvv08qSe12Jh6eTGDBQAAqGRBaqx+kXrfd82sI7XOghw89azBTZJ2S3rE3X88wnuuNbMNZrZh\nz549QccNAABQcYIEq5i73yxptaQfmtk5Cjjz5O5xd18g6WRJbzSzs0Z4z53u3uXuXZMnTz6RsQMA\nAFSUIMXrJknufreZ/ULSf0iacSIncfeDZvaopEskPX3CowQAAKgCQWas/ij9i7s/Lel8SUvz7WRm\nk82sPfX7WElvk7S5wHECAABUvCDB6lQza5Ok1KNsvqRgs05TJT1qZk9J+omSNVbfKnikAAAAFS7I\nrcBPuPs3zew8SW+V9FlJ/yTpTbl2Sj365g3FDxEAAKA6BJmxiqd+vkvSne7+oKSm6IYEAABQnYIE\nq1fN7F8kXSXpITMbE3A/AACAUSVIQLpS0sOS3uHuByV1SLop0lEBAABUoSCPtDkqaW3G8g7xEGYA\nAIDjcEsPAAAgJAQrAAC
"text/plain": [
"<matplotlib.figure.Figure at 0x7f8052af4090>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig = plot_data_for_classification(X, Y, xlabel=u'dł. płatka', ylabel=u'szer. płatka')\n",
"plot_decision_boundary_bayes(fig, X_mean, X_std)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"### Dla porównania: regresja logistyczna na tych samych danych"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {
"slideshow": {
"slide_type": "notes"
}
},
"outputs": [],
"source": [
"def powerme(x1,x2,n):\n",
" X = []\n",
" for m in range(n+1):\n",
" for i in range(m+1):\n",
" X.append(np.multiply(np.power(x1,i),np.power(x2,(m-i))))\n",
" return np.hstack(X)\n",
"\n",
"# Funkcja logistyczna\n",
"def safeSigmoid(x, eps=0):\n",
" y = 1.0/(1.0 + np.exp(-x))\n",
" if eps > 0:\n",
" y[y < eps] = eps\n",
" y[y > 1 - eps] = 1 - eps\n",
" return y\n",
"\n",
"# Funkcja hipotezy dla regresji logistycznej\n",
"def h(theta, X, eps=0.0):\n",
" return safeSigmoid(X*theta, eps)\n",
"\n",
"# Funkcja kosztu dla regresji logistycznej\n",
"def J(h,theta,X,y, lamb=0):\n",
" m = len(y)\n",
" f = h(theta, X, eps=10**-7)\n",
" j = -np.sum(np.multiply(y, np.log(f)) + \n",
" np.multiply(1 - y, np.log(1 - f)), axis=0)/m\n",
" if lamb > 0:\n",
" j += lamb/(2*m) * np.sum(np.power(theta[1:],2))\n",
" return j\n",
"\n",
"# Gradient funkcji kosztu\n",
"def dJ(h,theta,X,y,lamb=0):\n",
" g = 1.0/y.shape[0]*(X.T*(h(theta,X)-y))\n",
" if lamb > 0:\n",
" g[1:] += lamb/float(y.shape[0]) * theta[1:] \n",
" return g\n",
"\n",
"# Funkcja klasyfikująca\n",
"def classifyBi(theta, X):\n",
" prob = h(theta, X)\n",
" return prob"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"outputs": [],
"source": [
"# Przygotowanie danych dla wielomianowej regresji logistycznej\n",
"\n",
"data = np.matrix(data_iris_setosa)\n",
"\n",
"Xpl = powerme(data[:, 1], data[:, 0], n)\n",
"Ypl = np.matrix(data[:, 2]).reshape(m, 1)"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {
"slideshow": {
"slide_type": "notes"
}
},
"outputs": [],
"source": [
"# Metoda gradientu prostego dla regresji logistycznej\n",
"def GD(h, fJ, fdJ, theta, X, y, alpha=0.01, eps=10**-3, maxSteps=10000):\n",
" errorCurr = fJ(h, theta, X, y)\n",
" errors = [[errorCurr, theta]]\n",
" while True:\n",
" # oblicz nowe theta\n",
" theta = theta - alpha * fdJ(h, theta, X, y)\n",
" # raportuj poziom błędu\n",
" errorCurr, errorPrev = fJ(h, theta, X, y), errorCurr\n",
" # kryteria stopu\n",
" if abs(errorPrev - errorCurr) <= eps:\n",
" break\n",
" if len(errors) > maxSteps:\n",
" break\n",
" errors.append([errorCurr, theta]) \n",
" return theta, errors"
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"theta = [[ 4.01960795]\n",
" [ 3.89499137]\n",
" [ 0.18747599]\n",
" [-1.3524039 ]\n",
" [-2.00123783]\n",
" [-0.87625505]]\n"
]
}
],
"source": [
"# Uruchomienie metody gradientu prostego dla regresji logistycznej\n",
"theta_start = np.matrix(np.zeros(Xpl.shape[1])).reshape(Xpl.shape[1], 1)\n",
"theta, errors = GD(h, J, dJ, theta_start, Xpl, Ypl, \n",
" alpha=0.1, eps=10**-7, maxSteps=100000)\n",
"print(r'theta = {}'.format(theta))"
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {
"slideshow": {
"slide_type": "notes"
}
},
"outputs": [],
"source": [
"# Wykres granicy klas\n",
"def plot_decision_boundary(fig, theta, Xpl, xmin=0.0, xmax=7.0):\n",
" ax = fig.axes[0]\n",
" xx, yy = np.meshgrid(np.arange(xmin, xmax, 0.02),\n",
" np.arange(xmin, xmax, 0.02))\n",
" l = len(xx.ravel())\n",
" C = powerme(yy.reshape(l, 1), xx.reshape(l, 1), n)\n",
" z = classifyBi(theta, C).reshape(int(np.sqrt(l)), int(np.sqrt(l)))\n",
"\n",
" plt.contour(xx, yy, z, levels=[0.5], colors='m', lw=3);"
]
},
{
"cell_type": "code",
"execution_count": 44,
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"outputs": [
{
"data": {
"image/png": "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\nHmyxvEu8hBkAAOAk3NI
"text/plain": [
"<matplotlib.figure.Figure at 0x7f80526a7ed0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig = plot_data_for_classification(Xpl, Ypl, xlabel=u'dł. płatka', ylabel=u'szer. płatka')\n",
"plot_decision_boundary(fig, theta, Xpl)"
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAlYAAAFnCAYAAABkaweKAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzt3Xl8VOX1P/DPySQhOyQECIRVVpUK\nQqqI1lZtXdAvIK3a1vanrS1tv1ZQKiqtXb7dbK2VYrWLpXtta2XTVqu1bUQUghBAdsIaSELIRvZl\nMnPP74+ZMQvJzDBzb+4sn/frNa8w98597pkrmuPznHuuqCqIiIiIKHwJdgdAREREFCuYWBERERGZ\nhIkVERERkUmYWBERERGZhIkVERERkUmYWBERERGZhIkVERERkUmYWBERERGZhIkVERERkUkS7Q6g\nu9zcXB0/frzdYRARERH1UFxcXKOqwwJ9LqISq/Hjx2P79u12h0FERETUg4iUBvM5LgUSERERmYSJ\nFREREZFJmFgRERERmYSJFREREZFJmFgRERERmYSJFREREZFJmFgRERERmYSJFREREZFJmFgRERER\nmYSJFREREZFJmFgRERERmYSJFREREZFJmFgRERERmYSJFREREZFJmFgRERERmYSJFREREZFJmFgR\nERERmYSJFREREZFJmFgRERERmYSJFREREZFJmFgRERERmYSJFREREZFJmFgRERERmYSJFREREZFJ\nmFgRERERmYSJFREREZFJmFgRERERmYSJFREREZFJmFgRERERmYSJFREREZFJmFgRERERmYSJFRER\nEZFJmFgRERERmYSJFREREZFJmFgRERERmYSJFREREZFJmFgRERERmYSJFREREZFJLE2sRGSIiKwR\nkYMickBErrDyfERERER2SrR4/FUAXlXVj4lIMoA0i89HREREZBvLEisRGQzgagB3A4CqOgE4rTof\nERERkd2sXAqcAKAawG9FZKeIrBaR9N4fEpHFIrJdRLZXV1dbGA4RERGRtaxMrBIBzALwc1W9FEAL\ngEd6f0hVn1XVAlUtGDZsmIXhEBEREVnLysSqDECZqm71vl8DT6JFREREFJMsS6xUtRLAKRGZ6t10\nHYD9Vp2PiIiIyG5W3xV4H4DnvHcEHgPwGYvPR0RERGQbSxMrVd0FoMDKcxARERFFCnZeJyIiIjIJ\nEysiIiIikzCxIiIiIjIJEysiIiIikzCxIiIiIjIJEysiIiIikzCxIiIiIjIJEysiIiIikzCxIiIi\nIjIJEysiIiIikzCxIiIiIjIJEysiIiIikzCxIiIiIjIJEysiIiIikzCxIiIiIjIJEysiIiIikzCx\nIiIiIjIJEysiIiIikzCxIiIiIjIJEysiIiIikzCxIiIiIjIJEysiIiIikzCxIiIiIjIJEysiIiIi\nkzCxIiIiIjIJEysiIiIikzCxIiIiIjIJEysiIiIikzCxIiIiIjIJEysiIiIikzCxIiIiIjIJEysi\nIiIikzCxIiIiIjIJEysiIiIikzCxIiIiIjIJEysiIiIikyRaObiInADQBMANwKWqBVaej4iIiMhO\nliZWXteoas0AnIeIiIjIVlwKJCIiIjKJ1YmVAviXiBSLyOK+PiAii0Vku4hsr66utjgcIiIiIutY\nnVhdpaqzANwE4F4Rubr3B1T1WVUtUNWCYcOGWRwOERERkXUsTaxUtdz7swrAegCXWXk+IiIiIjtZ\nlliJSLqIZPr+DOB6AHutOh8RERGR3ay8K3AEgPUi4jvPn1X1VQvPR0RERGQryxIrVT0GYIZV4xMR\nERFFGrZbICIiIjIJEysiIiIikzCxIiIiIjIJEysiIiIikzCxIiIiIjIJEysiIiIikzCxIiIiIjIJ\nEysiIiIikzCxIiIiIjIJEysiIiIikzCxIiIiIjIJEysiIiIikzCxIiIiIjIJEysiIiIikzCxIiIi\nIjIJEysiIiIikzCxIiIiIjIJEysiIiIikzCxIiIiIjIJEysiIiIikzCxIiIiIjIJEysiIiIikzCx\nIiIiIjIJEysiIiIikzCxIiIiIjIJEysiIiIikzCxIiIiIjIJEysiIiIikzCxIiIiIjIJEysiIiIi\nkzCxIiIiIjIJEysiIiIikzCxIiIiIjIJEysiIiIikyQG+0ERGQ4gxfdeVU9aEhERERFRlAo4YyUi\n80XkMIDjADYCOAHgn8GeQEQcIrJTRP4RcpREREREUSCYpcDvAJgDoERVJwC4DkDReZxjKYADIcRG\nREREFFWCSaw6VbUWQIKIJKhqIYCCYAYXkdEAbgawOowYiYiIiKJCMDVW9SKSAeBNAM+JSBWAliDH\n/wmAhwBkhhgfERERUdQIZsZqAYBWAA8AeBXAUQC3BDpIRG4BUKWqxQE+t1hEtovI9urq6iDCISIi\nIopMwSRWV6uqoaouVf29qj4F4PYgjrsSwHwROQHgrwCuFZE/9f6Qqj6rqgWqWjBs2LDzCp6IiIgo\nkgSTWH1dRK71vRGR5fDMYvmlqitUdbSqjgfwcQD/VdVPhRwpERERUYQLpsZqPoB/eBOqGwFMQxCJ\nFREREVG8CZhYqWqNiMwH8G8AxQA+pqp6PidR1TcAvBFKgERERETRot/ESkSaACgA8f5MBnABgI+J\niKpq1sCESERERBQd+k2sVJUtEoiIiIjOQzCPtPlPMNuIiIiI4p2/pcAUAOkAckUkG54lQQDIApA/\nALERERERRRV/xetfAHA/gFHwFK37EqtGAE9bHBcRERFR1PFXY7UKwCoRuU9VfzqAMRERERFFpWDa\nLfxURKYDuAhASrftf7AyMCIiIqJoEzCxEpFvAvgQPInVKwBuAvAWACZWRERERN0E80ibjwG4DkCl\nqn4GwAwAgy2NioiIiCgKBZNYtamqAcAlIlkAqgCMsTYsIiIiougTzLMCt4vIEAC/gufuwGYAWyyN\nioiIiCgKBVO8/r8ikqSqvxCRVwFkqeruAYiNiIiIKKr4axA6y/vHCwB8XES+B28vKxGZpao7BiA+\nIiIioqjhb8bqx93+nArgVQD7ve8VwLVWBUVEREQUjfw1CL2m+3sRWaKqT1kfEhEREVF0CuYhzCki\nsgzANSKyVkTu9z5HkIiIiIi6CeauwD8AaALgm636JIA/ArjNqqCIiIiIolEwidV0Vb2o2/tCEdnf\n76eJiIiI4lQwDUJ3iMgc3xsRuRzAdutCIiIiIopOwcxYzQawWUROet+PBXBIRPYAUFW9xLLoiIiI\niKJIMInVjZZHQURERBQDgum8XjoQgRARERFFu2BqrIiIiIgoCEysiIiIiEzCxIqIiIjIJCElViLy\nrNmBEBEREUW7UGesfmlqFEREREQxwG9iJSIOEXmi93ZVLbYuJCIiIqLo5DexUlU3gKsGKBYiIiKi\nqBZMg9CdIvISgBcAtPg2quo6y6IiIiIiikLBJFYpAGoBXNttmwJgYkVERETUTTCd1z8zEIEQERER\nRbuAdwWKyBQR+Y+I7PW+v0REHrU+NCIiIqLoEky7hV8BWAGgEwBUdTeAj1sZFBEREVE0CiaxSlPV\nd3ptc1kRDBEREVE0CyaxqhGRifAUrENEPgbgtKVREREREUWhYO4KvBfAswCmiUg5gOMAPhXoIBFJ\nAfAmgEHe86xR1W+GESsRERFRRAvmrsBjAD4sIukAElS1KcixOwBcq6rNIpIE4C0R+aeqFoURLxER\nEVHECuauQLeI/ABAqy+pEpEdgY5Tj2bv2yTvS8MJloiIiCiSBVNjtc/7uX+JSI53mwQzuPdZg7sA\nVAF4XVW39vGZxSKyXUS2V1dXBxs3ERERUcQJJrFyqepDAFYD2CQisxHkzJOqulV1JoDRAC4Tkel9\nfOZZVS1Q1YJhw4adT+xEREREESWY4nUBAFV9XkT2AfgzgLHncxJVrReRQgA3Ath73lESERERRYFg\nZqw+5/uDqu4F8AEASwI
"text/plain": [
"<matplotlib.figure.Figure at 0x7f80526a7ad0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig = plot_data_for_classification(Xpl, Ypl, xlabel=u'dł. płatka', ylabel=u'szer. płatka')\n",
"plot_decision_boundary(fig, theta, Xpl)\n",
"plot_decision_boundary_bayes(fig, X_mean, X_std)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"### Inny przykład"
]
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"outputs": [],
"source": [
"# Wczytanie danych (gatunki kosaćców)\n",
"\n",
"data_iris_versicolor = (\n",
" pandas.read_csv('iris.csv', usecols=['pł.dł.', 'pł.sz.', 'Gatunek'])\n",
" .apply(lambda x: [x[0], x[1], 1 if x[2] == 'Iris-versicolor' else 0], axis=1))\n",
"data_iris_versicolor.columns = ['dł. płatka', 'szer. płatka', 'Iris versicolor?']\n",
"\n",
"m, n_plus_1 = data_iris_versicolor.values.shape\n",
"n = n_plus_1 - 1\n",
"Xn = data_iris_versicolor.values[:, 0:n].reshape(m, n)\n",
"\n",
"X = np.matrix(np.concatenate((np.ones((m, 1)), Xn), axis=1)).reshape(m, n_plus_1)\n",
"Y = np.matrix(data_iris_versicolor.values[:, 2]).reshape(m, 1)"
]
},
{
"cell_type": "code",
"execution_count": 47,
"metadata": {
"slideshow": {
"slide_type": "notes"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"count: {0: 100, 1: 50}\n",
"prior prob.: {0: 0.6666666666666666, 1: 0.3333333333333333}\n"
]
}
],
"source": [
"classes = [0, 1]\n",
"count = [sum(1 if y == c else 0 for y in Y.T.tolist()[0]) for c in classes]\n",
"prior_prob = [float(count[c]) / float(Y.shape[0]) for c in classes]\n",
"\n",
"print 'count: ', {c: count[c] for c in classes}\n",
"print 'prior prob.:', {c: prior_prob[c] for c in classes}"
]
},
{
"cell_type": "code",
"execution_count": 48,
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"outputs": [
{
"data": {
"image/png": "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\nUcYowjmanBI+7Zh7MjX
"text/plain": [
"<matplotlib.figure.Figure at 0x7f805a13dd50>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig = plot_data_for_classification(X, Y, xlabel=u'dł. płatka', ylabel=u'szer. płatka')"
]
},
{
"cell_type": "code",
"execution_count": 49,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[matrix([[ 1. , 3.508, 1.135]]), matrix([[ 1. , 4.26 , 1.326]])]\n",
"[matrix([[ 0. , 2.08373127, 0.91459007]]), matrix([[ 0. , 0.46518813, 0.19576517]])]\n"
]
}
],
"source": [
"XY = np.column_stack((X, Y))\n",
"XY_split = [XY[np.where(XY[:,3] == c)[0]] for c in classes]\n",
"X_split = [XY_split[c][:,0:3] for c in classes]\n",
"Y_split = [XY_split[c][:,3] for c in classes]\n",
"\n",
"X_mean = [np.mean(X_split[c], axis=0) for c in classes]\n",
"X_std = [np.std(X_split[c], axis=0) for c in classes]\n",
"print X_mean\n",
"print X_std"
]
},
{
"cell_type": "code",
"execution_count": 50,
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/pawel/.local/lib/python2.7/site-packages/matplotlib/contour.py:1180: UserWarning: No contour levels were found within the data range.\n",
" warnings.warn(\"No contour levels were found\"\n"
]
},
{
"data": {
"image/png": "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\niIhItVVW8frtwDicxZe
"text/plain": [
"<matplotlib.figure.Figure at 0x7f8051c24090>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig = plot_data_for_classification(X, Y, xlabel=u'dł. płatka', ylabel=u'szer. płatka')\n",
"draw_means(fig, X_mean)\n",
"plot_prob(fig, X_mean, X_std, classes)"
]
},
{
"cell_type": "code",
"execution_count": 51,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n0+Z3iZcwAwAADMAtPQA
"text/plain": [
"<matplotlib.figure.Figure at 0x7f8051b18a10>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig = plot_data_for_classification(X, Y, xlabel=u'dł. płatka', ylabel=u'szer. płatka')\n",
"plot_decision_boundary_bayes(fig, X_mean, X_std)"
]
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"outputs": [],
"source": [
"# Przygotowanie danych dla wielomianowej regresji logistycznej\n",
"\n",
"data = np.matrix(data_iris_versicolor)\n",
"\n",
"Xpl = powerme(data[:, 1], data[:, 0], n)\n",
"Ypl = np.matrix(data[:, 2]).reshape(m, 1)"
]
},
{
"cell_type": "code",
"execution_count": 53,
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"theta = [[-22.4168027 ]\n",
" [ 12.03703048]\n",
" [ 11.13804517]\n",
" [ -1.75684025]\n",
" [ 1.01230657]\n",
" [ -7.61403096]]\n"
]
}
],
"source": [
"# Uruchomienie metody gradientu prostego dla regresji logistycznej\n",
"theta_start = np.matrix(np.zeros(Xpl.shape[1])).reshape(Xpl.shape[1], 1)\n",
"theta, errors = GD(h, J, dJ, theta_start, Xpl, Ypl, \n",
" alpha=0.05, eps=10**-7, maxSteps=100000)\n",
"print(r'theta = {}'.format(theta))"
]
},
{
"cell_type": "code",
"execution_count": 54,
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAlYAAAFnCAYAAABkaweKAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzt3XmcFOWdP/DPt++5h2EGZuQQEASF\nyBnEiBo1bgwawCMha7LZuGbdjSbikYi46y9m3RXXRAkadWPMxpBLohwaY4zG9VbA4UYOuQWGa4CZ\nnrPP7++P6mZ6jj6Yrprunvm8X6969XRVV9XTJTIfnudbT4mqgoiIiIjSZ8t0A4iIiIh6CwYrIiIi\nIpMwWBERERGZhMGKiIiIyCQMVkREREQmYbAiIiIiMgmDFREREZFJGKyIiIiITMJgRURERGQSR6Yb\nEKu8vFyHDRuW6WYQERERtbNmzZpaVa1I9rmsClbDhg1DdXV1pptBRERE1I6I7EvlcxwKJCIiIjIJ\ngxURERGRSRisiIiIiEzCYEVERERkEgYrIiIiIpMwWBERERGZhMGKiIiIyCQMVkREREQmYbAiIiIi\nMgmDFREREZFJGKyIiIiITMJgRURERGQSBisiIiIikzBYEREREZmEwYqIiIjIJAxWRERERCZhsCIi\nIiIyCYMVERERkUkYrIiIiIhMwmBFREREZBIGKyIiIiKTMFgRERERmYTBioiIiMgkDFZEREREJmGw\nIiIiIjIJgxURERGRSRisiIiIiEzCYEVERERkEgYrIiIiIpMwWBERERGZhMGKiIiIyCQMVkREREQm\nYbAiIiIiMgmDFREREZFJGKyIiIiITMJgRURERGQSBisiIiIikzBYEREREZnE0mAlIqUi8oKIbBOR\nrSJygZXnIyIiIsokh8XHXwTgVVW9XkRcAPItPh8RERFRxlgWrESkBMDFAL4FAKrqB+C36nxERERE\nmWblUOBwAMcA/EpE1onIMyJS0PFDInKziFSLSPWxY8csbA4RERGRtawMVg4AkwA8paoTATQBuKfj\nh1T1aVWdoqpTKioqLGwOERERkbWsDFYHABxQ1VWR9y/ACFpEREREvZJlwUpVDwPYLyKjI6suB7DF\nqvMRERERZZrVdwV+D8DvIncE7gZwo8XnIyIiIsoYS4OVqq4HMMXKcxARERFlC868TkRERGQSBisi\nIiIikzBYEREREZmEwYqIiIjIJAxWRERERCZhsCIiIiIyCYMVERERkUkYrIiIiIhMwmBFREREZBIG\nKyIiIiKTMFgRERERmYTBioiIiMgkDFZEREREJmGwIiIiIjIJgxURERGRSRisiIiIiEzCYEVERERk\nEgYrIiIiIpMwWBERERGZhMGKiIiIyCQMVkREREQmYbAiIiIiMgmDFREREZFJGKyIiIiITMJgRURE\nRGQSBisiIiIikzBYEREREZmEwYqIiIjIJAxWRERERCZhsCIiIiIyCYMVERERkUkYrIiIiIhMwmBF\nREREZBIGKyIiIiKTMFgRERERmYTBioiIiMgkDisPLiJ7ATQACAEIquoUK89HRERElEmWBquIS1W1\ntgfOQ0RERJRRHAokIiIiMonVwUoBvCYia0Tk5q4+ICI3i0i1iFQfO3bM4uYQERERWcfqYDVdVScB\n+BKAW0Xk4o4fUNWnVXWKqk6pqKiwuDlERERE1rE0WKnqwcjrUQDLAUy18nxEREREmWRZsBKRAhEp\niv4M4O8AbLbqfERERESZZuVdgQMBLBeR6Hl+r6qvWng+IiIiooyyLFip6m4A4606PhEREVG24XQL\nRERERCZhsCIiIiIyCYMVERERkUkYrIiIiIhMwmBFREREZBIGKyIiIiKTMFgRERERmYTBioiIiMgk\nDFZEREREJmGwIiIiIjIJgxURERGRSRisiIiIiEzCYEVERERkEgYrIiIiIpMwWBERERGZhMGKiIiI\nyCQMVkREREQmYbAiIiIiMgmDFREREZFJGKyIiIiITMJgRURERGQSBisiIiIikzBYEREREZmEwYqI\niIjIJAxWRERERCZhsCIiIiIyCYMVERERkUkYrIiIiIhMwmBFREREZBIGKyIiIiKTMFgRERERmYTB\nioiIiMgkDFZEREREJmGwIiIiIjKJI9UPisgAAJ7oe1X91JIWEREREeWopD1WIjJTRHYA2APgbQB7\nAfwl1ROIiF1E1onIy91uJREREVEOSGUo8AEA0wB8oqrDAVwOYOVpnGMugK3daBsRERFRTkklWAVU\n9TgAm4jYVPVNAFNSObiIDAZwFYBn0mgjERERUU5IpcaqTkQKAbwD4HcichRAU4rH/ymAuwEUdbN9\nRERERDkjlR6rWQCaAdwB4FUAuwBcnWwnEbkawFFVXZPkczeLSLWIVB87diyF5hARERFlp1SC1cWq\nGlbVoKr+WlUfA/DVFPa7EMBMEdkL4DkAl4nIbzt+SFWfVtUpqjqloqLitBpPRERElE1SCVb3ichl\n0Tci8gMYvVgJqep8VR2sqsMAfA3A/6nqN7rdUiIiIqIsl0qN1UwAL0cC1ZUAxiCFYEVERETU1yQN\nVqpaKyIzAfwNwBoA16uqns5JVPUtAG91p4FEREREuSJusBKRBgAKQCKvLgAjAFwvIqqqxT3TRCIi\nIqLcEDdYqSqnSCAiIiI6Dak80uaNVNYRERER9XWJhgI9AAoAlItIPxhDggBQDGBQD7SNiIiIKKck\nKl7/FwC3AzgDRtF6NFh5AfzM4nYRERER5ZxENVaLACwSke+p6uM92CYiIiKinJTKdAuPi8g4AOcC\n8MSsX2xlw4iIiIhyTdJgJSI/BPB5GMHqFQBfAvAeAAYrIiIiohipPNLmegCXAzisqjcCGA+gxNJW\nEREREeWgVIJVi6qGAQRFpBjAUQBDrG0WERERUe5J5VmB1SJSCuAXMO4ObATwoaWtIiIiIspBqRSv\n3yIiTlX9HxF5FUCxqm7sgbYRERER5ZREE4ROivw4AsDXROS/EJnLSkQmqeraHmgfERERUc5I1GP1\nSMzPeQBeBbAl8l4BXGZVo4iIiIhyUaIJQi+NfS8it6nqY9Y3iYiIiCg3pfIQZo+I3AngUhFZKiK3\nR54jSEREREQxUrkrcDGABgDR3qobAPwGwFesahQRERFRLkolWI1T1XNj3r8pIlvifpqIiIioj0pl\ngtC1IjIt+kZEzgdQbV2TiIiIiHJTKj1WkwF8ICKfRt4PBbBdRDYBUFU9z7LWEREREeWQVILVlZa3\ngoiIiKgXSGXm9X090RAiIiKiXJdKjRURERERpYDBioiIiMgkDFZEREREJulWsBKRp81uCBEREVGu\n626P1c9NbQURERFRL5AwWImIXUR+0nG9qq6xrklEREREuSlhsFLVEIDpPdQWIiIiopyWygSh60Tk\nJQDPA2iKrlTVZZa1ioiIiCgHpRKsPACOA7gsZp0CYLAiIiIiipHKzOs39kRDiIiIiHJd0rsCReRs\nEXlDRDZH3p8nIv9ufdOIiIiIcksq0y38AsB8AAEAUNWNAL5mZaOIiIiIclEqwSpfVVd3WBe0ojFE\nREREuSyVYFUrImfBKFiHiFwP4JClrSIiIiLKQancFXgrgKcBjBGRgwD2APhGsp1ExAPgHQDuyHle\nUNUfptFWIiIioqyWyl2BuwF8QUQKANhUtSHFY/sAXKaqjSLiBPCeiPxFVVem0V4iIiKirJXKXYEh\nEXkIQHM0VInI2mT7qaEx8tYZWTSdxhIRERFls1RqrD6OfO41ESmLrJNUDh551uB6AEcBvK6qq7r4\nzM0iUi0i1ceOHUu13URERERZJ5VgFVTVuwE8A+BdEZmMFHueVDWkqhMADAYwVUTGdfGZp1V1iqpO\nqaioOJ22ExEREWWVVIrXBQBUdYmIfAzg9wCGns5JVLVORN4EcCWAzafdSiIiIqIckEqP1bejP6jq\nZgAXAbgt2U4iUiEipZG
"text/plain": [
"<matplotlib.figure.Figure at 0x7f8051b20250>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig = plot_data_for_classification(Xpl, Ypl, xlabel=u'dł. płatka', ylabel=u'szer. płatka')\n",
"plot_decision_boundary(fig, theta, Xpl)"
]
},
{
"cell_type": "code",
"execution_count": 55,
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAlYAAAFnCAYAAABkaweKAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzs3Xl4W+Wd9vHvI8mSLK9x7DjORhIS\nEkggawktFAYoUxpaCEuhQzt9u8wwLcywdcrSGd62L9OGblDK0E4pM9PSlZYlUEqhhQJlDWSFEBIS\nshDixI4T2/Km9TzvH8eKncSWlEjyEt+f6zqXonN0znkkTHznOT/9jrHWIiIiIiK58wz2AERERESO\nFgpWIiIiInmiYCUiIiKSJwpWIiIiInmiYCUiIiKSJwpWIiIiInmiYCUiIiKSJwpWIiIiInmiYCUi\nIiKSJ77BHkBv1dXVdvLkyYM9DBEREZEDrFy5sslaW5PpdUMqWE2ePJkVK1YM9jBEREREDmCM2Z7N\n63QpUERERCRPFKxERERE8kTBSkRERCRPFKxERERE8kTBSkRERCRPFKxERERE8kTBSkRERCRPFKxE\nRERE8kTBSkRERCRPFKxERERE8kTBSkRERCRPFKxERERE8kTBSkRERCRPFKxERERE8kTBSkRERCRP\nFKxERERE8kTBSkRERCRPFKxERERE8kTBSkRERCRPFKxERERE8kTBSkRERCRPFKxERERE8kTBSkRE\nRCRPFKxERERE8kTBSkRERCRPFKxERERE8kTBSkRERCRPFKxERERE8kTBSkRERCRPFKxERERE8kTB\nSkRERCRPFKxERERE8kTBSkRERCRPFKxERERE8kTBSkRERCRPFKxERERE8kTBSkRERCRPFKxERERE\n8qSgwcoYU2mMecAYs8EY85Yx5v2FPJ+IiIjIYPIV+Ph3Ak9Yay8xxviBUIHPJyIiIjJoChasjDEV\nwOnAZwCstTEgVqjziYiIiAy2Ql4KnALsAf7XGLPaGHOvMabk4BcZY64wxqwwxqzYs2dPAYcjIiIi\nUliFDFY+YD7wI2vtPKADuOngF1lr77HWLrTWLqypqSngcEREREQKq5DB6j3gPWvt8u7nD+AGLRER\nEZGjUsGClbV2N7DDGDOje9XZwPpCnU9ERERksBX6W4H/Avyy+xuBW4DPFvh8IiIiIoOmoMHKWrsG\nWFjIc4iIiIgMFeq8LiIiIpInClYiIiIieaJgJSIiIpInClYiIiIieaJgJSIiIpInClYiIiIieaJg\nJSIiIpInClYiIiIieaJgJSIiIpInClYiIiIieaJgJSIiIpInClYiIiIieaJgJSIiIpInClYiIiIi\neaJgJSIiIpInClYiIiIieaJgJSIiIpInClYiIiIieaJgJSIiIpInClYiIiIieaJgJSIiIpInClYi\nIiIieaJgJSIiIpInClYiIiIieaJgJSIiIpInClYiIiIieaJgJSIiIpInClYiIiIieaJgJSIiIpIn\nClYiIiIieaJgJSIiIpInClYiIiIieaJgJSIiIpInClYiIiIieaJgJSIiIpInClYiIiIieeIr5MGN\nMduANiAJJKy1Cwt5PhEREZHBVNBg1e1Ma23TAJxHREREZFDpUqCIiIhInhQ6WFngT8aYlcaYK/p6\ngTHmCmPMCmPMij179hR4OCIiIiKFU+hgdZq1dj7wEeAqY8zpB7/AWnuPtXahtXZhTU1NgYcjIiIi\nUjgFDVbW2p3dj43Aw8DJhTyfiIiIyGAqWLAyxpQYY8pSfwb+FlhXqPOJiIiIDLZCfiuwFnjYGJM6\nz6+stU8U8HwiIiIig6pgwcpauwWYU6jji4iIiAw1arcgIiIikicKViIiIiJ5omAlIiIikicKViIi\nIiJ5omAlIiIikicKViIiIiJ5omAlIiIikicKViIiIiJ5omAlIiIikicKViIiIiJ5omAlIiIikicK\nViIiIiJ5omAlIiIikicKViIiIiJ5omAlIiIikicKViIiIiJ5omAlIiIikicKViIiIiJ5omAlIiIi\nkicKViIiIiJ5omAlIiIikicKViIiIiJ5omAlIiIikicKViIiIiJ5omAlIiIikicKViIiIiJ5omAl\nIiIikicKViIiIiJ5omAlIiIikicKViIiIiJ5omAlIiIikicKViIiIiJ5omAlIiIikicKViIiIiJ5\n4sv2hcaYMUAw9dxa+25BRiQiIiIyTGWcsTLGnG+M2QRsBZ4DtgF/zPYExhivMWa1MeaxIx6liIiI\nyDCQzaXAW4FTgLettVOAs4FXDuMc1wBvHcHYRERERIaVbIJV3Fq7F/AYYzzW2meAhdkc3BgzATgP\nuDeHMYqIiIgMC9nUWLUYY0qBvwK/NMY0Ah1ZHv/7wA1A2RGOT0RERGTYyGbG6gKgE7gOeAJ4B/ho\npp2MMR8FGq21KzO87gpjzApjzIo9e/ZkMRwRERGRoSmbYHW6tdax1iastT+z1v4AuDSL/U4FzjfG\nbAN+A5xljPnFwS+y1t5jrV1orV1YU1NzWIMXERERGUqyCVa3GGPOSj0xxnwZdxYrLWvtzdbaCdba\nycAngL9Yaz91xCMVERERGeKyqbE6H3isO1CdC8wki2AlIiIiMtJkDFbW2iZjzPnAU8BK4BJrrT2c\nk1hrnwWePZIBioiIiAwX/QYrY0wbYAHT/egHpgKXGGOstbZ8YIYoIiIiMjz0G6ystWqRICIiInIY\nsrmlzdPZrBMREREZ6dJdCgwCJUC1MWYU7iVBgHJg/ACMTURERGRYSVe8/k/AtcA43KL1VLAKA/9Z\n4HGJiIiIDDvpaqzuBO40xvyLtfauARyTiIiIyLCUTbuFu4wxs4ETgGCv9fcVcmAiIiIiw03GYGWM\n+SrwN7jB6nHgI8ALgIKViIiISC/Z3NLmEuBsYLe19rPAHKCioKMSERERGYayCVZd1loHSBhjyoFG\nYGJhhyUiIiIy/GRzr8AVxphK4Ce43w5sB14u6KhEREREhqFsitevNMYUWWv/yxjzBFBurX19AMYm\nIiIiMqykaxA6v/uPU4FPGGO+QXcvK2PMfGvtqgEYn4iIiMiwkW7G6nu9/lwMPAGs735ugbMKNSgR\nERGR4Shdg9Azez83xlxtrf1B4YckIiIiMjxlcxPmoDHmeuBMY8yDxphru+8jKCIiIiK9ZPOtwPuA\nNiA1W3U58HPg44UalIiIiMhwlE2wmm2tPaHX82eMMev7fbWIiIjICJVNg9BVxphTUk+MMYuAFYUb\nkoiIiMjwlM2M1QLgJWPMu93PJwEbjTFvANZae1LBRiciIiIyjGQTrM4t+ChEREREjgLZdF7fPhAD\nERERERnusqmxEhEREZEsKFiJiIiI5ImClYiIiEieHFGwMsbck++BiIiIiAx3Rzpj9eO8jkJERETk\nKJA2WBljvMaY7x683lq7snBDEhERERme0gYra20SOG2AxiIiIiIyrGXTIHS1MeZR4HdAR2qltfah\ngo1KREREZBjKJlgFgb3AWb3WWUDBSkRERKSXbDqvf3YgBiIiIiIy3GX8VqAx5jhjzNPGmHXdz08y\nxvx74YcmIiIiMrxk027hJ8DNQBzAWvs68IlCDkpERERkOMomWIWsta8etC5RiMGIiIiIDGfZBKsm\nY8yxuAXrGGMuAXYVdFQiIiIiw1A23wq8CrgHmGmM2QlsBT6VaSdjTBD4KxDoPs8D1tqv5jBWERER\nkSEtm28FbgE+ZIwpATzW2rYsjx0FzrLWthtjioAXjDF/tNa+ksN4RURERIasbL4VmDTG3AZ0pkKV\nMWZVpv2sq737aVH3YnMZrIiIiMhQlk2N1Zvdr/uTMaaqe53J5uDd9xpcAzQCf7bWLu/jNVcYY1YY\nY1bs2bMn23GLiIiIDDnZBKuEtfYG4F7geWPMArKcebLWJq21c4EJwMnGmNl9vOYea+1Ca+3Cmpqa\nwxm7iIiIyJCSTfG6AbD
"text/plain": [
"<matplotlib.figure.Figure at 0x7f8051b4b0d0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig = plot_data_for_classification(Xpl, Ypl, xlabel=u'dł. płatka', ylabel=u'szer. płatka')\n",
"plot_decision_boundary(fig, theta, Xpl)\n",
"plot_decision_boundary_bayes(fig, X_mean, X_std)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"### Kiedy naiwny Bayes nie działa?"
]
},
{
"cell_type": "code",
"execution_count": 56,
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"outputs": [],
"source": [
"# Wczytanie danych\n",
"import pandas\n",
"import numpy as np\n",
"\n",
"alldata = pandas.read_csv('bayes_nasty.tsv', sep='\\t')\n",
"data = np.matrix(alldata)\n",
"\n",
"m, n_plus_1 = data.shape\n",
"n = n_plus_1 - 1\n",
"Xn = data[:, 1:]\n",
"\n",
"Xbn = np.matrix(np.concatenate((np.ones((m, 1)), Xn), axis=1)).reshape(m, n_plus_1)\n",
"Xbnp = powerme(data[:, 1], data[:, 2], n)\n",
"Ybn = np.matrix(data[:, 0]).reshape(m, 1)"
]
},
{
"cell_type": "code",
"execution_count": 57,
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"outputs": [
{
"data": {
"image/png": "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\nkGmtTMHBKM/iWu0cep6
"text/plain": [
"<matplotlib.figure.Figure at 0x7f8062365510>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig = plot_data_for_classification(Xbn, Ybn, xlabel=r'$x_1$', ylabel=r'$x_2$')"
]
},
{
"cell_type": "code",
"execution_count": 58,
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"count: {0: 69, 1: 30}\n",
"prior prob.: {0: 0.696969696969697, 1: 0.30303030303030304}\n"
]
}
],
"source": [
"classes = [0, 1]\n",
"count = [sum(1 if y == c else 0 for y in Ybn.T.tolist()[0]) for c in classes]\n",
"prior_prob = [float(count[c]) / float(Ybn.shape[0]) for c in classes]\n",
"\n",
"print 'count: ', {c: count[c] for c in classes}\n",
"print 'prior prob.:', {c: prior_prob[c] for c in classes}"
]
},
{
"cell_type": "code",
"execution_count": 59,
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[matrix([[ 1. , 0.03949835, 0.02825019]]), matrix([[ 1. , 0.09929617, 0.06206227]])]\n",
"[matrix([[ 0. , 0.52318432, 0.60106092]]), matrix([[ 0. , 0.61370281, 0.6081128 ]])]\n"
]
}
],
"source": [
"XY = np.column_stack((Xbn, Ybn))\n",
"XY_split = [XY[np.where(XY[:,3] == c)[0]] for c in classes]\n",
"X_split = [XY_split[c][:,0:3] for c in classes]\n",
"Y_split = [XY_split[c][:,3] for c in classes]\n",
"\n",
"X_mean = [np.mean(X_split[c], axis=0) for c in classes]\n",
"X_std = [np.std(X_split[c], axis=0) for c in classes]\n",
"print X_mean\n",
"print X_std"
]
},
{
"cell_type": "code",
"execution_count": 60,
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"outputs": [
{
"data": {
"image/png": "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\nNTBhAhNy9eqx+LioKIX
"text/plain": [
"<matplotlib.figure.Figure at 0x7f80526c9fd0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig = plot_data_for_classification(Xbn, Ybn, xlabel=r'$x_1$', ylabel=r'$x_2$')\n",
"draw_means(fig, X_mean, xmin=-1.0, xmax=1.0, ymin=-1.0, ymax=1.0)\n",
"plot_prob(fig, X_mean, X_std, classes, xmin=-1.0, xmax=1.0, ymin=-1.0, ymax=1.0)"
]
},
{
"cell_type": "code",
"execution_count": 61,
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"outputs": [
{
"data": {
"image/png": "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\nnyinGMCIisSlQAAbz57
"text/plain": [
"<matplotlib.figure.Figure at 0x7f8059fbccd0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig = plot_data_for_classification(Xbn, Ybn, xlabel=r'$x_1$', ylabel=r'$x_2$')\n",
"plot_decision_boundary_bayes(fig, X_mean, X_std, xmin=-4.0, xmax=4.0, ymin=-4.0, ymax=4.0)"
]
},
{
"cell_type": "code",
"execution_count": 62,
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"theta = [[ -0.31582268]\n",
" [ 0.43496774]\n",
" [ -0.21840373]\n",
" [ -7.88802319]\n",
" [ 22.73897346]\n",
" [ -4.43682364]]\n"
]
}
],
"source": [
"# Uruchomienie metody gradientu prostego dla regresji logistycznej\n",
"theta_start = np.matrix(np.zeros(Xbnp.shape[1])).reshape(Xbnp.shape[1], 1)\n",
"theta, errors = GD(h, J, dJ, theta_start, Xbnp, Ybn, \n",
" alpha=0.05, eps=10**-7, maxSteps=100000)\n",
"print(r'theta = {}'.format(theta))"
]
},
{
"cell_type": "code",
"execution_count": 63,
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"outputs": [
{
"data": {
"image/png": "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\n97gR6tXSlrneDNtMG+q
"text/plain": [
"<matplotlib.figure.Figure at 0x7f808fe1d8d0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig = plot_data_for_classification(Xbnp, Ybn, xlabel=r'$x_1$', ylabel=r'$x_2$')\n",
"plot_decision_boundary(fig, theta, Xbnp, xmin=-4.0, xmax=4.0)"
]
},
{
"cell_type": "code",
"execution_count": 64,
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"outputs": [
{
"data": {
"image/png": "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\nB93WTaWlmKzX45enTlF
"text/plain": [
"<matplotlib.figure.Figure at 0x7f805269b2d0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig = plot_data_for_classification(Xbn, Ybn, xlabel=r'$x_1$', ylabel=r'$x_2$')\n",
"plot_decision_boundary_bayes(fig, X_mean, X_std, xmin=-4.0, xmax=4.0, ymin=-4.0, ymax=4.0)\n",
"plot_decision_boundary(fig, theta, Xbnp, xmin=-4.0, xmax=4.0)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"* Naiwny klasyfikator Bayesa nie działa, jeżeli dane nie różnią się średnią i odchyleniem standardowym"
]
}
],
"metadata": {
"celltoolbar": "Slideshow",
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"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.15rc1"
},
"livereveal": {
"start_slideshow_at": "selected",
"theme": "amu"
}
},
"nbformat": 4,
"nbformat_minor": 2
}