{ "cells": [ { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ " \n", "\n", "\n", " \n", "\n", "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import numpy as np\n", "import pandas as pd\n", "import bokeh.plotting as bk\n", "from sklearn.linear_model import Perceptron\n", "import matplotlib.pyplot as plt\n", "bk.output_notebook()\n", "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "df = pd.read_csv('https://archive.ics.uci.edu/ml/'\n", " 'machine-learning-databases/iris/iris.data', header=None)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "Perceptron(alpha=0.0001, class_weight=None, eta0=0.1, fit_intercept=True,\n", " n_iter=10, n_jobs=1, penalty=None, random_state=0, shuffle=True,\n", " verbose=0, warm_start=False)" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "y = df.iloc[0:100, 4].values\n", "y = np.where(y == 'Iris-setosa', -1, 1)\n", "X = df.iloc[0:100, [0, 2]].values\n", "ppn = Perceptron(eta0=0.1, n_iter=10)\n", "ppn.fit(X, y)" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "resolution=0.02\n", "x1_min, x1_max = X[:, 0].min() - 1, X[:, 0].max() + 1\n", "x2_min, x2_max = X[:, 1].min() - 1, X[:, 1].max() + 1\n", "xx1, xx2 = np.meshgrid(np.arange(x1_min, x1_max, resolution), np.arange(x2_min, x2_max, resolution))\n", "Z = ppn.predict(np.array([xx1.ravel(), xx2.ravel()]).T)\n", "Z = Z.reshape(xx1.shape)\n", "\n", "p = bk.figure(x_range=(xx1.min(), xx1.max()), y_range=(xx2.min(), xx2.max()), \n", " width=400, height=300, tools='')\n", "p.image(image=[Z], x=xx1.min(), y=xx2.min(), dw=xx1.max(), dh=xx2.max(), palette=\"PuBu3\")\n", "bk.show(p)" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "(0.0, 6.0800000000000001)" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "