{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": { "slideshow": { "slide_type": "notes" } }, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "%matplotlib inline\n", "#plt.rcParams['figure.figsize'] = (9.0, 9.0)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# The perceptron\n", "\n", "In this notebook we will create a Python class that implements the perceptron algorithm.\n", "\n", "First, let's write a function that generates linearly separable data in two dimensions:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [], "source": [ "def generate_separable_data(N) :\n", " w = np.random.uniform(-1, 1, 2)\n", " print(w)\n", " X = np.random.uniform(-1, 1, [N, 2])\n", " print (X.shape)\n", " y = np.sign(np.inner(w, X))\n", " return X,y,w" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[-0.61684013 0.05713919]\n", "(10, 2)\n" ] }, { "data": { "text/plain": [ "(array([[-0.92744825, -0.81236358],\n", " [-0.70004309, 0.3222561 ],\n", " [ 0.06534076, 0.08593533],\n", " [ 0.04679987, -0.7217905 ],\n", " [ 0.86729371, 0.01463821],\n", " [-0.82809065, 0.40109597],\n", " [-0.8708476 , 0.87847806],\n", " [-0.36828967, -0.67558481],\n", " [-0.48711717, -0.69808223],\n", " [-0.15672283, 0.86816536]]),\n", " array([ 1., 1., -1., -1., -1., 1., 1., 1., 1., 1.]),\n", " array([-0.61684013, 0.05713919]))" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "generate_separable_data(10)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "The following is a function to display the data and the weight vector:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [], "source": [ "\n", "def plot_data(X, y, w) :\n", " fig = plt.figure(figsize=(4,4))\n", " plt.xlim(-1,1)\n", " plt.ylim(-1,1)\n", " a = -w[0]/w[1]\n", " pts = np.linspace(-1,1)\n", " plt.plot(pts, a*pts, 'k-')\n", " cols = {1: 'r', -1: 'b'}\n", " for i in range(len(X)): \n", " plt.plot(X[i][0], X[i][1], cols[y[i]]+'o')\n", " plt.show()\n", " " ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[-0.32139547 -0.81735261]\n", "(50, 2)\n" ] }, { "data": { "image/png": "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\nSUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "X,y,w = generate_separable_data(50)\n", "plot_data(X, y, w)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "And here's the Python class with the implementation of the perceptron:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [], "source": [ "class Perceptron :\n", " \n", " \"\"\"An implementation of the perceptron algorithm.\n", " Note that this implementation does not include a bias term\"\"\"\n", " \n", " def __init__(self, max_iterations=100, learning_rate=0.2) :\n", " \n", " self.max_iterations = max_iterations\n", " self.learning_rate = learning_rate\n", " \n", " def fit(self, X, y) :\n", " \"\"\"\n", " Train a classifier using the perceptron training algorithm.\n", " After training the attribute 'w' will contain the perceptron weight vector.\n", " \n", " Parameters\n", " ----------\n", " \n", " X : ndarray, shape (num_examples, n_features)\n", " Training data.\n", " \n", " y : ndarray, shape (n_examples,)\n", " Array of labels.\n", " \n", " \"\"\"\n", " self.w = np.zeros(len(X[0]))\n", " converged = False\n", " iterations = 0\n", " while (not converged and iterations <= self.max_iterations) :\n", " converged = True\n", " for i in range(len(X)) :\n", " if y[i] * self.decision_function(X[i]) <= 0 :\n", " self.w = self.w + y[i] * self.learning_rate * X[i]\n", " converged = False\n", " plot_data(X, y, self.w)\n", " iterations += 1\n", " self.converged = converged\n", " if converged :\n", " print ('converged in %d iterations ' % iterations)\n", " print ('weight vector: ' + str(self.w))\n", " \n", " def decision_function(self, x) :\n", " return np.inner(self.w, x)\n", " \n", " def predict(self, X) :\n", " \"\"\"\n", " make predictions using a trained linear classifier\n", " \n", " Parameters\n", " ----------\n", " \n", " X : ndarray, shape (num_examples, n_features)\n", " Training data.\n", " \"\"\"\n", " \n", " scores = np.inner(self.w, X)\n", " return np.sign(scores)\n", " \n" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "slideshow": { "slide_type": "slide" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[ 0.71577113 -0.47950058]\n", "(40, 2)\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\nAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "converged in 2 iterations \n", "weight vector: [ 0.16961734 -0.11537053]\n" ] } ], "source": [ "X,y,w = generate_separable_data(40)\n", "p = Perceptron()\n", "p.fit(X,y)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's compare the two weight vectors:" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(array([ 0.16961734, -0.11537053]), array([ 0.71577113, -0.47950058]))" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p.w, w" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's normalize the two vectors into unit vectors:" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 0.82685682, -0.56241248])" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" }, { "data": { "text/plain": [ "array([ 0.83080544, -0.55656295])" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p.w/np.sqrt(np.inner(p.w, p.w))\n", "w/np.sqrt(np.inner(w, w))\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can see that they are pointing more or less in the same direction!" ] } ], "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.5.2" } }, "nbformat": 4, "nbformat_minor": 1 }