Skip to content

Instantly share code, notes, and snippets.

@hhllcks
Created February 20, 2017 07:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hhllcks/77e30ab55e9424dfb9c2f41fa6d60902 to your computer and use it in GitHub Desktop.
Save hhllcks/77e30ab55e9424dfb9c2f41fa6d60902 to your computer and use it in GitHub Desktop.
20170220_SupervisedLearningInANutshell
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Supervised Learning in a nutshell\n",
"This notebook explains common machine learning algorithms used for [supervised learning](https://en.wikipedia.org/wiki/Supervised_learning). It is the first part of a series on machine learning algorithms. I try to explain them in very short texts to give an overview over the topic. It makes heavy use of the mglearn library that is provided by [Andreas Müller](https://github.com/amueller) over at [GitHub](https://github.com/amueller/introduction_to_ml_with_python). It is part of the great book [Introduction to Machine Learning with Python](http://shop.oreilly.com/product/0636920030515.do).\n",
"\n",
"This notebook covers the following algorithms and explains them briefly together with some images.\n",
"\n",
"* Linear Models\n",
" * Regression\n",
" * Classification\n",
"* k-nearest Neighbors\n",
"* Decision Trees\n",
" * Random Forests\n",
"* Neural Networks (Deep Learning)\n",
" * Multilayer Perceptron"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Imports"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"import mglearn\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"from IPython.display import display\n",
"%matplotlib inline"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Linear Models"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"A linear models tries to fit a linear function to the training data. The prediction is then just the result of this function for the given parameters. It can be compared to fitting a line to the data (in the two dimensional case). In its most basic variant the mean squared error for the training examples is minimized by the function. This is called **linear regression**."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Regression with linear models"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"w[0]: 0.393906 b: -0.031804\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAdMAAAGuCAYAAADLQuyyAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xt8VNW9///35AI4Ei4FuRhyQYVAEjAYEmhBDApIEaXY\nVuJJq1Q8trZa2ypVy1dRf0b9Wvs9B4/nPCztsdQaG8BrAauCEk5BNAG5CEgEa26A3AmBkJDL/v2R\nk0DI5DKzZ2bvPfN6Ph59lEz2zKysjPudtfdan+UyDEMAAMB3EVY3AAAApyNMAQAwiTAFAMAkwhQA\nAJMIUwAATCJMAQAwiTAFgszlcvVwuVyFLpdrm8vl2ulyuR63uk0AzHGxzhQILpfL5ZJ0sWEYp1wu\nV7Sk9ZLuMwzjY4ubBsBHUVY3AAg3RtNfsKf+98vo//0ff9UCDsZlXsACLpcr0uVybZV0SNJqwzA+\nsbpNAHzn1WXejRs3GrW1tX5789OnT+viiy/22+s5Hf1xTrj0xalTp/TII4/o5z//uYYOHdrqeytW\nrNDKlSslSTU1Nfrzn/9sRRNtKVw+H11BX7Tm7/6orKx8b9asWdM7O87be6Z+vRRVUFCgrKwsf76k\no9Ef54RTXzzxxBNyu9164IEH2j0mKSlJxcXFQWyVvYXT56Mz9EVrAegPV1cO4jIvEGSHDx/WiRMn\nJElnzpzR6tWrNWLECItbBcAMJiABQXbgwAHdfvvtamhoUGNjo2655RbNnDnT6mYBMIEwBYJs9OjR\n2rJli9XNAOBHhCkAWKCurk4VFRWqqakx9Tq9e/fW559/7qdWOZ+v/dGjRw8NGTJE0dHRPr0vYQoA\nFqioqFBMTIwSExPVVMfDN1VVVYqJifFjy5zNl/4wDENHjx5VRUVFm1n1XcUEJACwQE1Njfr162cq\nSOEfLpdL/fr1M3WVgDAFAIsQpPZh9ndBmAIATEtMTNSRI0dMH+NUhCkAACYRpgAQpkpKSjRixAjN\nnTtXw4cPV05OjtasWaMJEyZo2LBhKiws1LFjx/Sd73xHo0eP1vjx47V9+3ZJ0tGjRzVt2jSlpKTo\nzjvv1PnV9F555RVlZmYqLS1NP/7xj9XQ0GDVjxg0zOYFAIs9vmKndu0/6dNzGxoaFBkZ2ebx5Et7\naeGNKZ0+f+/evVq+fLleeuklZWRk6NVXX9X69ev1t7/9TU899ZTi4uI0ZswYvfXWW/rwww912223\naevWrXr88cc1ceJEPfroo1q1apX++7//W5L0+eefa+nSpdqwYYOio6P105/+VHl5ebrtttt8+vmc\ngjAFgDA2dOhQjRo1SpKUkpKi6667Ti6XS6NGjVJJSYlKS0v1+uuvS5KuvfZaHT16VCdPntT//M//\n6I033pAk3XDDDerbt68k6YMPPtDmzZuVkZEhqalk5oABAyz4yYKLMAUAi3VlBNkes+tMu3fv3vLv\niIiIlq8jIiJUX1/vdREDwzB0++236+mnn/a5TU7EPVMAQLuuvvpq5eXlSWrakaV///7q1auXJk2a\npFdffVWS9Pe//13Hjx+XJF133XV67bXXdOjQIUnSsWPHVFpaak3jg4iRKQCgXY899pjuuOMOjR49\nWm63u2Vf3YULF+rWW29VSkqKvvWtbyk+Pl6SlJycrCeffFLTpk1TY2OjoqOj9Z//+Z9KSEiw8scI\nOMIUAMJUYmKiduzY0fL1kiVLPH7vrbfeavPcfv366f333/f4unPmzNGcOXPaPF5SUmKuwTbGZV4A\nAEwiTAEAMIkwBQDAJMIUAACTCFMAAEwiTAEAMIkwBYAwdOLECf3Xf/2XT8+dMWOGTpw40eExjz76\nqNasWePT63dkyZIluueeezo8pqCgQB999JHf37sjhCkAOEBeXqkSE1cpImK5EhNXKS/PXFWhjsK0\nvr6+w+e+88476tOnT4fHPPHEE5oyZYrP7TODMAUAtJGXV6q77tqs0tJqGYZUWlqtu+7abCpQH3ro\nIX355ZdKS0vT/PnzVVBQoKuvvlo33XSTkpOTJUnf+c53lJ6erpSUFC1evLjluc2bfJeUlGjkyJH6\n13/9V6WkpGjatGk6c+aMJGnu3Ll67bXXWo5fuHChrrrqKo0aNUq7d++WJB0+fFhTp05t2cYtISHB\n4+bhf/rTnzR8+HBlZmZqw4YNLY+vWLFC48aN05gxYzRlyhQdPHhQpaWlevHFF/Vv//ZvSktL0z/+\n8Q+Px/kbYQoANrdgwQ5VV7feE7S6ukELFuxo5xmde+aZZ3T55Zdr69at+u1vfytJ+vTTT7Vo0SJ9\n8cUXkqSXXnpJmzdv1qZNm/T888/r6NGjbV5nz549+tnPfqadO3eqT58+LTvMXKh///769NNPdffd\nd+u5556TJD3++OO69tprtXPnTn3ve99TWVlZm+cdOHBACxcu1IYNG7R+/Xrt2rWr5XsTJ07Uxx9/\n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\nIGMAAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x10e027b70>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"mglearn.plots.plot_linear_regression_wave()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"There are also variants in computing the linear function. One is called **Ridge Regression**. Ridge Regression introduces the concept of *regularization*. This aims to avoid [*overfitting*](https://en.wikipedia.org/wiki/Overfitting). A linear model overfits, if the linear function fits to tightly to the training data. This results in a bad performance on the test (or productive) data. Ridge regression introduces the parameter *alpha*. *alpha* controls how much focus is on the performances on the training data vs the test data. Increasing *alpha* forces the algorithm to move the coefficients towards zero. This might help the model [generalize](https://en.wikipedia.org/wiki/Generalization_error). As you can see in the next figure a Ridge Regression model performs worse on the training data (since it tries to avoid overfitting). However it performs much better on the before unseen data of the test set. Notice, that if you have enough training samples (what \"enough\" means varies of course from project to project) the linear models will roughly perform the same."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x11b54af98>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"mglearn.plots.plot_ridge_n_samples()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Classification with linear models\n",
"Linear Models can be used for classification, too. Usually you compute a *decision boundary* between two classes. Two examples of *Linear Classifiers* are **LinearSVC** (where SVC stands for *Support Vector Classifier*) and **Logistic Regression**."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.legend.Legend at 0x11d338dd8>"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nbQAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x11d3380f0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from sklearn.linear_model import LogisticRegression\n",
"from sklearn.svm import LinearSVC\n",
"\n",
"X,y = mglearn.datasets.make_forge()\n",
"fig, axes = plt.subplots(1,2,figsize=(10,3))\n",
"\n",
"for model, ax in zip([LinearSVC(), LogisticRegression()], axes):\n",
" clf = model.fit(X,y)\n",
" mglearn.plots.plot_2d_separator(clf, X, fill=False, eps=0.5, ax=ax, alpha=.7)\n",
" mglearn.discrete_scatter(X[:,0], X[:,1],y, ax=ax)\n",
" ax.set_title(f\"{clf.__class__.__name__}\")\n",
" ax.set_xlabel(\"Feature 0\")\n",
" ax.set_ylabel(\"Feature 1\")\n",
"axes[0].legend()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Multiclass Classifiction with linear models\n",
"If there are more classes you have to compute a decision boundary for each class. The decision boundary for class X classifies \"X\" and \"NOT X\" ([one-vs-rest classifiction](https://en.wikipedia.org/wiki/Multiclass_classification#One-vs.-rest)). If you want to classify a new example the algorithm takes the class with the highest confidence. In the figure below you can see the three classes and the corresponding decision boundaries. "
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.text.Text at 0x11b5a2b70>"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x11b959400>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from sklearn.datasets import make_blobs\n",
"\n",
"X, y = make_blobs(random_state=42)\n",
"linear_svc = LinearSVC().fit(X, y)\n",
"mglearn.plots.plot_2d_classification(linear_svc, X, fill=True, alpha=.7)\n",
"mglearn.discrete_scatter(X[:,0],X[:,1],y)\n",
"line = np.linspace(-15,15)\n",
"for coef, intercept, color in zip(linear_svc.coef_, linear_svc.intercept_, ['b','r','g']):\n",
" plt.plot(line, -(line * coef[0] + intercept) / coef[1], c=color)\n",
"plt.legend(['Class 0', 'Class 1', 'Class 2', 'Line Class 0', 'Line Class 1', 'Line Class 2'], loc=(1.01, 0.3))\n",
"plt.xlabel(\"Feature 0\")\n",
"plt.ylabel(\"Feature 1\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### k-Nearest Neighbors"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nvQAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x11d32e5c0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"mglearn.plots.plot_knn_classification(n_neighbors=3)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This image explains what a k-Nearest Neighbours classifier does. It looks at the existing examples in the training set and takes n of them with the shortest distance to the test example. The distance is often the [euclidean distance](https://en.wikipedia.org/wiki/Euclidean_distance). It can be used for regression, too. To do that the algorithm takes the mean of the target value of the n nearest neighbors."
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x11b336fd0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"mglearn.plots.plot_knn_regression(n_neighbors=3)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Decision Trees\n",
"Decision Trees are conceptionally the easiest of the machine learning algorithms. The algorithms arrives at a prediction by just traversing a tree. Look at the following example for animal classification."
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n8FkiEvZjSkoKAP3djy/Lzs7G06dPhQtRQNGpD2NjYyxduhRA0WCCiYmJcHJyQlRUFDw8PJCeng6F\nQgEACAwMREREBMLDw5GamorMzEy18iSh6clWLb8EVbl4ExISQiNHjiQANH36dIqMjCQioi+++IKs\nra0JAHl6elJhYSFdunSJTE1Nady4cfTw4UNq0qQJBQQECGVt2rSJjh07JkyPHTtW7Z6//fv3EwBa\nunQpxcfHEwAyMTGh+fPnaxSrri9KOTs7C0PiFl+AKyk6OlpY3q1bNyIquld0yZIlwsWNpKQkGjdu\nHL355pt09epVIiKysLBQG273nXfeES509e7dmwDQkSNHaPz48TRs2DDKzs6m7du3U7Nmzeijjz6i\n2NhYWrJkCb366qtCHQDU6iiPri9KHTt2jAYNGkQAqE+fPuTs7EwjR46kFStW0B9//FFq/Xbt2tGy\nZcvo6NGjwnDXOTk5VL9+fQJAGzZsICKiBQsWkFwup1WrVtG7775Lo0ePJiKiQ4cOUdOmTWnFihWU\nkZFBBw8epGbNmtHKlSspLS2Ntm/fTgCE/QhA2I/jxo0T9mNlpL4oderUKZo4cSIBoK5du9Lw4cPJ\n1taWpkyZQhcvXhTWU6lUtGbNGjI2NiZjY2NavXq1cN/qnDlzyNjYmPz8/OjHH3+kevXqkbe3N7Vq\n1YoA0O+//y72dmmUy6ROpDW+ym8odJ1QteHq1atUWFioNi81NZV27dqlk/qluMqvDQsWLCATExNJ\n6iaSPqHqO77Kz3Ti5s2buHr1Kt555x289tprCAoKws2bN7FmzRqpQzMo2dnZur8/kumEwZ9DZboz\na9YsBAYGomvXrmjcuDEUCgU8PT0lez6AITp48CDOnDkDIsL169elDoeJjFuoTGMymQyhoaFSh2HQ\npk+fXureZlZ7cAuVMcZEwgmVMcZEwgmVMcZEwgmVMcZEwgmVMcZEwgmVMcZEwgmVMcZEwgmVMcZE\nonc39hc/11GfHsklFjGfo1ryIcR1ydixY0UppzZ/z3RFLpcjMDCwVu7Dd999t1qfk5F+PJBWCCI3\nNxcnT54s9Ti+2uDVV19F//79a1zO8ePHDeYxbWKSyWQYOHAgmjdvXuOyiAgnTpyos/tx4sSJNS4n\nLi5O7RmwtUnPnj1ffmi9Rv819C6hMsaYHtIoofI5VMYYEwknVMYYE4m+XJSqfWe1GWN1DrdQGWNM\nJJxQGWNMJJxQGWNMJJxQGWNMJJxQGWNMJJxQGWNMJJxQGWNMJJxQGWNMJJxQGWNMJJxQGWNMJJxQ\nGWNMJJxQGWNMJJxQGWNMJJxQGWNMJJxQGWNMJJxQGWNMJJxQGWNMJJxQGWNMJJxQGWNMJJxQGWNM\nJJxQGWNMJJxQGWNMJJxQGWNMJP8P/ocxGzS2Tl4AAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x11dae20f0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"mglearn.plots.plot_animal_tree()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"If you want to predict which animal is in front of you, you can just start at the root node and move your way down. Has the animal feathers? Yes? Can it fly? No? It seems that you have a penguin in front of you.\n",
"\n",
"#### Building a decision tree\n",
"An importang concept for building decision trees is [entropy](https://en.wikipedia.org/wiki/Diversity_index). What the algorithm tries to do while building the tree is picking the feature that splits the data into more homogeneous sets. \n",
"You can find a great explanation [here](http://www.saedsayad.com/decision_tree.htm). \n",
"\n",
"#### Ensembles of Decision Trees (Random Forests)\n",
"To prevent overfitting of a single decision tree often times multiple decision trees are used. The form an ensemble which is often called **Random Forest**. The single trees are restricted to have only a certain number of levels. This forces them to focus on few features. This results in very different decision boundaries for each tree. The random forest classifier then takes the results of the single trees and average the predictions to generate its own prediction."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Neural Networks (or Deep Learning)\n",
"Neural networks are used very often in several different areas. Here we take a look at a very simple neural network. The **Multilayer Perceptron** is roughly modeled after the human brain. First take a look at a perceptron. It has some inputs *x* with corresponding weights *w* and computes output *y*."
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
"<!-- Generated by graphviz version 2.38.0 (20140413.2041)\n",
" -->\n",
"<!-- Title: %3 Pages: 1 -->\n",
"<svg width=\"174pt\" height=\"260pt\"\n",
" viewBox=\"0.00 0.00 174.43 260.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 256)\">\n",
"<title>%3</title>\n",
"<polygon fill=\"white\" stroke=\"none\" points=\"-4,4 -4,-256 170.435,-256 170.435,4 -4,4\"/>\n",
"<g id=\"clust1\" class=\"cluster\"><title>cluster_0</title>\n",
"<polygon fill=\"none\" stroke=\"white\" points=\"8,-8 8,-244 60,-244 60,-8 8,-8\"/>\n",
"<text text-anchor=\"middle\" x=\"34\" y=\"-228.8\" font-family=\"Times,serif\" font-size=\"14.00\">inputs</text>\n",
"</g>\n",
"<g id=\"clust2\" class=\"cluster\"><title>cluster_2</title>\n",
"<polygon fill=\"none\" stroke=\"white\" points=\"106.435,-88 106.435,-162 158.435,-162 158.435,-88 106.435,-88\"/>\n",
"<text text-anchor=\"middle\" x=\"132.435\" y=\"-146.8\" font-family=\"Times,serif\" font-size=\"14.00\">output</text>\n",
"</g>\n",
"<!-- x[0] -->\n",
"<g id=\"node1\" class=\"node\"><title>x[0]</title>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"34\" cy=\"-196\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"34\" y=\"-191.8\" font-family=\"Times,serif\" font-size=\"14.00\">x[0]</text>\n",
"</g>\n",
"<!-- y -->\n",
"<g id=\"node5\" class=\"node\"><title>y</title>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"132.435\" cy=\"-114\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"132.435\" y=\"-109.8\" font-family=\"Times,serif\" font-size=\"14.00\">y</text>\n",
"</g>\n",
"<!-- x[0]&#45;&gt;y -->\n",
"<g id=\"edge1\" class=\"edge\"><title>x[0]&#45;&gt;y</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M48.4088,-184.598C64.4579,-170.951 91.5238,-147.937 110.373,-131.909\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"112.789,-134.449 118.14,-125.305 108.254,-129.116 112.789,-134.449\"/>\n",
"<text text-anchor=\"middle\" x=\"83.2173\" y=\"-170.8\" font-family=\"Times,serif\" font-size=\"14.00\">w[0]</text>\n",
"</g>\n",
"<!-- x[1] -->\n",
"<g id=\"node2\" class=\"node\"><title>x[1]</title>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"34\" cy=\"-142\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"34\" y=\"-137.8\" font-family=\"Times,serif\" font-size=\"14.00\">x[1]</text>\n",
"</g>\n",
"<!-- x[1]&#45;&gt;y -->\n",
"<g id=\"edge2\" class=\"edge\"><title>x[1]&#45;&gt;y</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M51.7976,-137.123C66.4554,-132.867 87.9745,-126.619 104.949,-121.69\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"106.202,-124.971 114.829,-118.821 104.25,-118.249 106.202,-124.971\"/>\n",
"<text text-anchor=\"middle\" x=\"83.2173\" y=\"-134.8\" font-family=\"Times,serif\" font-size=\"14.00\">w[1]</text>\n",
"</g>\n",
"<!-- x[2] -->\n",
"<g id=\"node3\" class=\"node\"><title>x[2]</title>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"34\" cy=\"-88\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"34\" y=\"-83.8\" font-family=\"Times,serif\" font-size=\"14.00\">x[2]</text>\n",
"</g>\n",
"<!-- x[2]&#45;&gt;y -->\n",
"<g id=\"edge3\" class=\"edge\"><title>x[2]&#45;&gt;y</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M51.7976,-92.5289C66.4554,-96.4808 87.9745,-102.283 104.949,-106.859\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"104.263,-110.299 114.829,-109.523 106.085,-103.54 104.263,-110.299\"/>\n",
"<text text-anchor=\"middle\" x=\"83.2173\" y=\"-103.8\" font-family=\"Times,serif\" font-size=\"14.00\">w[2]</text>\n",
"</g>\n",
"<!-- x[3] -->\n",
"<g id=\"node4\" class=\"node\"><title>x[3]</title>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"34\" cy=\"-34\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"34\" y=\"-29.8\" font-family=\"Times,serif\" font-size=\"14.00\">x[3]</text>\n",
"</g>\n",
"<!-- x[3]&#45;&gt;y -->\n",
"<g id=\"edge4\" class=\"edge\"><title>x[3]&#45;&gt;y</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M48.4088,-45.1237C64.4579,-58.4377 91.5238,-80.8909 110.373,-96.5282\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"108.209,-99.2798 118.14,-102.971 112.678,-93.8923 108.209,-99.2798\"/>\n",
"<text text-anchor=\"middle\" x=\"83.2173\" y=\"-80.8\" font-family=\"Times,serif\" font-size=\"14.00\">w[3]</text>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<graphviz.dot.Digraph at 0x11b928390>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"display(mglearn.plots.plot_logistic_regression_graph())"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Modelling perceptrons in several layers give us a multilayer perceptron."
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
"<!-- Generated by graphviz version 2.38.0 (20140413.2041)\n",
" -->\n",
"<!-- Title: %3 Pages: 1 -->\n",
"<svg width=\"380pt\" height=\"260pt\"\n",
" viewBox=\"0.00 0.00 380.00 260.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 256)\">\n",
"<title>%3</title>\n",
"<polygon fill=\"white\" stroke=\"none\" points=\"-4,4 -4,-256 376,-256 376,4 -4,4\"/>\n",
"<g id=\"clust1\" class=\"cluster\"><title>cluster_0</title>\n",
"<polygon fill=\"none\" stroke=\"white\" points=\"8,-8 8,-244 60,-244 60,-8 8,-8\"/>\n",
"<text text-anchor=\"middle\" x=\"34\" y=\"-228.8\" font-family=\"Times,serif\" font-size=\"14.00\">inputs</text>\n",
"</g>\n",
"<g id=\"clust2\" class=\"cluster\"><title>cluster_1</title>\n",
"<polygon fill=\"none\" stroke=\"white\" points=\"80,-35 80,-217 176,-217 176,-35 80,-35\"/>\n",
"<text text-anchor=\"middle\" x=\"128\" y=\"-201.8\" font-family=\"Times,serif\" font-size=\"14.00\">hidden layer 1</text>\n",
"</g>\n",
"<g id=\"clust3\" class=\"cluster\"><title>cluster_2</title>\n",
"<polygon fill=\"none\" stroke=\"white\" points=\"196,-35 196,-217 292,-217 292,-35 196,-35\"/>\n",
"<text text-anchor=\"middle\" x=\"244\" y=\"-201.8\" font-family=\"Times,serif\" font-size=\"14.00\">hidden layer 2</text>\n",
"</g>\n",
"<g id=\"clust4\" class=\"cluster\"><title>cluster_3</title>\n",
"<polygon fill=\"none\" stroke=\"white\" points=\"312,-89 312,-163 364,-163 364,-89 312,-89\"/>\n",
"<text text-anchor=\"middle\" x=\"338\" y=\"-147.8\" font-family=\"Times,serif\" font-size=\"14.00\">output</text>\n",
"</g>\n",
"<!-- x[0] -->\n",
"<g id=\"node1\" class=\"node\"><title>x[0]</title>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"34\" cy=\"-196\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"34\" y=\"-191.8\" font-family=\"Times,serif\" font-size=\"14.00\">x[0]</text>\n",
"</g>\n",
"<!-- h1[0] -->\n",
"<g id=\"node5\" class=\"node\"><title>h1[0]</title>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"128\" cy=\"-61\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"128\" y=\"-56.8\" font-family=\"Times,serif\" font-size=\"14.00\">h1[0]</text>\n",
"</g>\n",
"<!-- x[0]&#45;&gt;h1[0] -->\n",
"<g id=\"edge1\" class=\"edge\"><title>x[0]&#45;&gt;h1[0]</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M44.8456,-181.553C60.7401,-158.229 92.1923,-112.077 111.235,-84.1334\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"114.207,-85.9874 116.946,-75.7527 108.423,-82.0453 114.207,-85.9874\"/>\n",
"</g>\n",
"<!-- h1[1] -->\n",
"<g id=\"node6\" class=\"node\"><title>h1[1]</title>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"128\" cy=\"-169\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"128\" y=\"-164.8\" font-family=\"Times,serif\" font-size=\"14.00\">h1[1]</text>\n",
"</g>\n",
"<!-- x[0]&#45;&gt;h1[1] -->\n",
"<g id=\"edge2\" class=\"edge\"><title>x[0]&#45;&gt;h1[1]</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M51.4478,-191.173C65.0997,-187.166 84.774,-181.392 100.623,-176.741\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"101.775,-180.051 110.384,-173.876 99.8035,-173.334 101.775,-180.051\"/>\n",
"</g>\n",
"<!-- h1[2] -->\n",
"<g id=\"node7\" class=\"node\"><title>h1[2]</title>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"128\" cy=\"-115\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"128\" y=\"-110.8\" font-family=\"Times,serif\" font-size=\"14.00\">h1[2]</text>\n",
"</g>\n",
"<!-- x[0]&#45;&gt;h1[2] -->\n",
"<g id=\"edge3\" class=\"edge\"><title>x[0]&#45;&gt;h1[2]</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M48.1814,-184.395C63.3478,-171.042 88.4456,-148.945 106.242,-133.276\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"108.65,-135.819 113.843,-126.584 104.025,-130.565 108.65,-135.819\"/>\n",
"</g>\n",
"<!-- x[1] -->\n",
"<g id=\"node2\" class=\"node\"><title>x[1]</title>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"34\" cy=\"-142\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"34\" y=\"-137.8\" font-family=\"Times,serif\" font-size=\"14.00\">x[1]</text>\n",
"</g>\n",
"<!-- x[1]&#45;&gt;h1[0] -->\n",
"<g id=\"edge4\" class=\"edge\"><title>x[1]&#45;&gt;h1[0]</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M48.1814,-130.395C63.3478,-117.042 88.4456,-94.9446 106.242,-79.276\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"108.65,-81.8189 113.843,-72.5838 104.025,-76.565 108.65,-81.8189\"/>\n",
"</g>\n",
"<!-- x[1]&#45;&gt;h1[1] -->\n",
"<g id=\"edge5\" class=\"edge\"><title>x[1]&#45;&gt;h1[1]</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M51.4478,-146.827C65.0997,-150.834 84.774,-156.608 100.623,-161.259\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"99.8035,-164.666 110.384,-164.124 101.775,-157.949 99.8035,-164.666\"/>\n",
"</g>\n",
"<!-- x[1]&#45;&gt;h1[2] -->\n",
"<g id=\"edge6\" class=\"edge\"><title>x[1]&#45;&gt;h1[2]</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M51.4478,-137.173C65.0997,-133.166 84.774,-127.392 100.623,-122.741\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"101.775,-126.051 110.384,-119.876 99.8035,-119.334 101.775,-126.051\"/>\n",
"</g>\n",
"<!-- x[2] -->\n",
"<g id=\"node3\" class=\"node\"><title>x[2]</title>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"34\" cy=\"-88\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"34\" y=\"-83.8\" font-family=\"Times,serif\" font-size=\"14.00\">x[2]</text>\n",
"</g>\n",
"<!-- x[2]&#45;&gt;h1[0] -->\n",
"<g id=\"edge7\" class=\"edge\"><title>x[2]&#45;&gt;h1[0]</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M51.4478,-83.1729C65.0997,-79.1664 84.774,-73.3924 100.623,-68.741\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"101.775,-72.0508 110.384,-65.8763 99.8035,-65.334 101.775,-72.0508\"/>\n",
"</g>\n",
"<!-- x[2]&#45;&gt;h1[1] -->\n",
"<g id=\"edge8\" class=\"edge\"><title>x[2]&#45;&gt;h1[1]</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M48.1814,-99.6053C63.3478,-112.958 88.4456,-135.055 106.242,-150.724\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"104.025,-153.435 113.843,-157.416 108.65,-148.181 104.025,-153.435\"/>\n",
"</g>\n",
"<!-- x[2]&#45;&gt;h1[2] -->\n",
"<g id=\"edge9\" class=\"edge\"><title>x[2]&#45;&gt;h1[2]</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M51.4478,-92.8271C65.0997,-96.8336 84.774,-102.608 100.623,-107.259\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"99.8035,-110.666 110.384,-110.124 101.775,-103.949 99.8035,-110.666\"/>\n",
"</g>\n",
"<!-- x[3] -->\n",
"<g id=\"node4\" class=\"node\"><title>x[3]</title>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"34\" cy=\"-34\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"34\" y=\"-29.8\" font-family=\"Times,serif\" font-size=\"14.00\">x[3]</text>\n",
"</g>\n",
"<!-- x[3]&#45;&gt;h1[0] -->\n",
"<g id=\"edge10\" class=\"edge\"><title>x[3]&#45;&gt;h1[0]</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M51.4478,-38.8271C65.0997,-42.8336 84.774,-48.6076 100.623,-53.259\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"99.8035,-56.666 110.384,-56.1237 101.775,-49.9492 99.8035,-56.666\"/>\n",
"</g>\n",
"<!-- x[3]&#45;&gt;h1[1] -->\n",
"<g id=\"edge11\" class=\"edge\"><title>x[3]&#45;&gt;h1[1]</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M44.8456,-48.4474C60.7401,-71.7708 92.1923,-117.923 111.235,-145.867\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"108.423,-147.955 116.946,-154.247 114.207,-144.013 108.423,-147.955\"/>\n",
"</g>\n",
"<!-- x[3]&#45;&gt;h1[2] -->\n",
"<g id=\"edge12\" class=\"edge\"><title>x[3]&#45;&gt;h1[2]</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M48.1814,-45.6053C63.3478,-58.9584 88.4456,-81.0554 106.242,-96.724\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"104.025,-99.435 113.843,-103.416 108.65,-94.1811 104.025,-99.435\"/>\n",
"</g>\n",
"<!-- h2[0] -->\n",
"<g id=\"node8\" class=\"node\"><title>h2[0]</title>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"244\" cy=\"-61\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"244\" y=\"-56.8\" font-family=\"Times,serif\" font-size=\"14.00\">h2[0]</text>\n",
"</g>\n",
"<!-- h1[0]&#45;&gt;h2[0] -->\n",
"<g id=\"edge13\" class=\"edge\"><title>h1[0]&#45;&gt;h2[0]</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M146.314,-61C164.751,-61 194.184,-61 215.738,-61\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"215.896,-64.5001 225.896,-61 215.896,-57.5001 215.896,-64.5001\"/>\n",
"</g>\n",
"<!-- h2[1] -->\n",
"<g id=\"node9\" class=\"node\"><title>h2[1]</title>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"244\" cy=\"-169\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"244\" y=\"-164.8\" font-family=\"Times,serif\" font-size=\"14.00\">h2[1]</text>\n",
"</g>\n",
"<!-- h1[0]&#45;&gt;h2[1] -->\n",
"<g id=\"edge14\" class=\"edge\"><title>h1[0]&#45;&gt;h2[1]</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M141.636,-72.9705C161.323,-91.6219 199.49,-127.78 222.96,-150.015\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"220.641,-152.639 230.308,-156.976 225.455,-147.558 220.641,-152.639\"/>\n",
"</g>\n",
"<!-- h2[2] -->\n",
"<g id=\"node10\" class=\"node\"><title>h2[2]</title>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"244\" cy=\"-115\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"244\" y=\"-110.8\" font-family=\"Times,serif\" font-size=\"14.00\">h2[2]</text>\n",
"</g>\n",
"<!-- h1[0]&#45;&gt;h2[2] -->\n",
"<g id=\"edge15\" class=\"edge\"><title>h1[0]&#45;&gt;h2[2]</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M144.851,-68.5085C163.824,-77.4954 195.82,-92.6514 218.103,-103.207\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"216.748,-106.437 227.283,-107.555 219.744,-100.111 216.748,-106.437\"/>\n",
"</g>\n",
"<!-- h1[1]&#45;&gt;h2[0] -->\n",
"<g id=\"edge16\" class=\"edge\"><title>h1[1]&#45;&gt;h2[0]</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M141.636,-157.029C161.323,-138.378 199.49,-102.22 222.96,-79.9854\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"225.455,-82.4425 230.308,-73.0242 220.641,-77.3608 225.455,-82.4425\"/>\n",
"</g>\n",
"<!-- h1[1]&#45;&gt;h2[1] -->\n",
"<g id=\"edge17\" class=\"edge\"><title>h1[1]&#45;&gt;h2[1]</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M146.314,-169C164.751,-169 194.184,-169 215.738,-169\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"215.896,-172.5 225.896,-169 215.896,-165.5 215.896,-172.5\"/>\n",
"</g>\n",
"<!-- h1[1]&#45;&gt;h2[2] -->\n",
"<g id=\"edge18\" class=\"edge\"><title>h1[1]&#45;&gt;h2[2]</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M144.851,-161.492C163.824,-152.505 195.82,-137.349 218.103,-126.793\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"219.744,-129.889 227.283,-122.445 216.748,-123.563 219.744,-129.889\"/>\n",
"</g>\n",
"<!-- h1[2]&#45;&gt;h2[0] -->\n",
"<g id=\"edge19\" class=\"edge\"><title>h1[2]&#45;&gt;h2[0]</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M144.851,-107.492C163.824,-98.5046 195.82,-83.3486 218.103,-72.7935\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"219.744,-75.8887 227.283,-68.4447 216.748,-69.5625 219.744,-75.8887\"/>\n",
"</g>\n",
"<!-- h1[2]&#45;&gt;h2[1] -->\n",
"<g id=\"edge20\" class=\"edge\"><title>h1[2]&#45;&gt;h2[1]</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M144.851,-122.508C163.824,-131.495 195.82,-146.651 218.103,-157.207\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"216.748,-160.437 227.283,-161.555 219.744,-154.111 216.748,-160.437\"/>\n",
"</g>\n",
"<!-- h1[2]&#45;&gt;h2[2] -->\n",
"<g id=\"edge21\" class=\"edge\"><title>h1[2]&#45;&gt;h2[2]</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M146.314,-115C164.751,-115 194.184,-115 215.738,-115\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"215.896,-118.5 225.896,-115 215.896,-111.5 215.896,-118.5\"/>\n",
"</g>\n",
"<!-- y -->\n",
"<g id=\"node11\" class=\"node\"><title>y</title>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"338\" cy=\"-115\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"338\" y=\"-110.8\" font-family=\"Times,serif\" font-size=\"14.00\">y</text>\n",
"</g>\n",
"<!-- h2[0]&#45;&gt;y -->\n",
"<g id=\"edge22\" class=\"edge\"><title>h2[0]&#45;&gt;y</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M259.781,-69.676C274.181,-78.1282 296.309,-91.1164 313.192,-101.026\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"311.554,-104.123 321.95,-106.166 315.097,-98.0856 311.554,-104.123\"/>\n",
"</g>\n",
"<!-- h2[1]&#45;&gt;y -->\n",
"<g id=\"edge23\" class=\"edge\"><title>h2[1]&#45;&gt;y</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M259.781,-160.324C274.181,-151.872 296.309,-138.884 313.192,-128.974\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"315.097,-131.914 321.95,-123.834 311.554,-125.877 315.097,-131.914\"/>\n",
"</g>\n",
"<!-- h2[2]&#45;&gt;y -->\n",
"<g id=\"edge24\" class=\"edge\"><title>h2[2]&#45;&gt;y</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M262.304,-115C275.54,-115 294.053,-115 309.337,-115\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"309.773,-118.5 319.773,-115 309.773,-111.5 309.773,-118.5\"/>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<graphviz.dot.Digraph at 0x11b928908>"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"mglearn.plots.plot_two_hidden_layer_graph()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"As you can see every input is connected to every perceptron of the next layer. Depending on the results of the computation (by forward propagating the results through the network) the weights are adjusted (using [backpropagation](https://en.wikipedia.org/wiki/Backpropagation)). Now think about image classification (a classical field in computer vision). Let the inputs be the RGB values of an image. If it has size 400x400 there are 16000 inputs. Usually in modern deep learning there are a lot of hidden layers. This results in high computing power requirements. However the results are often really good. Just take a look at the powers of the [Google Vision API](https://cloud.google.com/vision/). Upload a random image there and see what it can identify. Neural networks are the foundation of that."
]
}
],
"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.0"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment