From 1f6ad3f51cacd21bb57fef8425b39649d4febb01 Mon Sep 17 00:00:00 2001 From: chengjun Date: Mon, 22 Apr 2019 16:32:56 +0800 Subject: [PATCH] update --- ...ne-learning-with-sklearn-checkpoint.ipynb} | 2 +- .../09.08-Random-Forests-checkpoint.ipynb | 1143 ++++++ ...-machine-learning-summary-checkpoint.ipynb | 3055 +++++++++++++++++ ...ine_learning_with_sklearn-checkpoint.ipynb | 3015 ---------------- .../09.01-machine-learning-with-sklearn.ipynb | 2200 ++++++++++++ code/09.06-Linear-Regression.ipynb | 1886 ++++++++++ ...nb => 09.07-Support-Vector-Machines.ipynb} | 0 code/09.08-Random-Forests.ipynb | 21 +- code/09.09-machine-learning-summary.ipynb | 3055 +++++++++++++++++ code/09.machine_learning_with_sklearn.ipynb | 3016 ---------------- 10 files changed, 11341 insertions(+), 6052 deletions(-) rename code/{09.machine_learning_introduction.ipynb => .ipynb_checkpoints/09.01-machine-learning-with-sklearn-checkpoint.ipynb} (99%) create mode 100755 code/.ipynb_checkpoints/09.08-Random-Forests-checkpoint.ipynb create mode 100644 code/.ipynb_checkpoints/09.09-machine-learning-summary-checkpoint.ipynb delete mode 100644 code/.ipynb_checkpoints/09.machine_learning_with_sklearn-checkpoint.ipynb create mode 100755 code/09.01-machine-learning-with-sklearn.ipynb create mode 100755 code/09.06-Linear-Regression.ipynb rename code/{09.06-Support-Vector-Machines.ipynb => 09.07-Support-Vector-Machines.ipynb} (100%) create mode 100644 code/09.09-machine-learning-summary.ipynb delete mode 100644 code/09.machine_learning_with_sklearn.ipynb diff --git a/code/09.machine_learning_introduction.ipynb b/code/.ipynb_checkpoints/09.01-machine-learning-with-sklearn-checkpoint.ipynb similarity index 99% rename from code/09.machine_learning_introduction.ipynb rename to code/.ipynb_checkpoints/09.01-machine-learning-with-sklearn-checkpoint.ipynb index dbfa758..cbb64ac 100755 --- a/code/09.machine_learning_introduction.ipynb +++ b/code/.ipynb_checkpoints/09.01-machine-learning-with-sklearn-checkpoint.ipynb @@ -20,7 +20,7 @@ }, "source": [ "\n", - "\n", + "\n", "*This notebook contains an excerpt from the [Python Data Science Handbook](http://shop.oreilly.com/product/0636920034919.do) by Jake VanderPlas; the content is available [on GitHub](https://github.com/jakevdp/PythonDataScienceHandbook).*\n", "\n", "*The text is released under the [CC-BY-NC-ND license](https://creativecommons.org/licenses/by-nc-nd/3.0/us/legalcode), and code is released under the [MIT license](https://opensource.org/licenses/MIT). If you find this content useful, please consider supporting the work by [buying the book](http://shop.oreilly.com/product/0636920034919.do)!*" diff --git a/code/.ipynb_checkpoints/09.08-Random-Forests-checkpoint.ipynb b/code/.ipynb_checkpoints/09.08-Random-Forests-checkpoint.ipynb new file mode 100755 index 0000000..ac229a0 --- /dev/null +++ b/code/.ipynb_checkpoints/09.08-Random-Forests-checkpoint.ipynb @@ -0,0 +1,1143 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "# In-Depth: Decision Trees and Random Forests" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "\n", + "\n", + "*This notebook contains an excerpt from the [Python Data Science Handbook](http://shop.oreilly.com/product/0636920034919.do) by Jake VanderPlas; the content is available [on GitHub](https://github.com/jakevdp/PythonDataScienceHandbook).*\n", + "\n", + "*The text is released under the [CC-BY-NC-ND license](https://creativecommons.org/licenses/by-nc-nd/3.0/us/legalcode), and code is released under the [MIT license](https://opensource.org/licenses/MIT). If you find this content useful, please consider supporting the work by [buying the book](http://shop.oreilly.com/product/0636920034919.do)!*" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "\n", + "< [In-Depth: Support Vector Machines](05.07-Support-Vector-Machines.ipynb) | [Contents](Index.ipynb) | [In Depth: Principal Component Analysis](05.09-Principal-Component-Analysis.ipynb) >" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "Previously\n", + "\n", + "- simple generative classifier (naive Bayes; see [In Depth: Naive Bayes Classification](05.05-Naive-Bayes.ipynb)) \n", + "- powerful discriminative classifier (support vector machines; see [In-Depth: Support Vector Machines](05.07-Support-Vector-Machines.ipynb)).\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "\n", + "\n", + "\n", + "## *Random Forests*\n", + "- Another powerful & non-parametric algorithm \n", + "- Random forests are an example of an **ensemble method**, \n", + " - meaning that it relies on aggregating the results of an ensemble of simpler estimators.\n", + "\n", + "The sum can be greater than the parts: \n", + "- a majority vote among a number of estimators can end up being better than any of the individual estimators doing the voting!\n", + "\n", + "We will see examples of this in the following sections." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Motivating Random Forests: Decision Trees" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "ExecuteTime": { + "end_time": "2018-12-26T06:58:23.100831Z", + "start_time": "2018-12-26T06:58:21.786163Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import seaborn as sns; sns.set()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "Random forests are an example of an *ensemble learner* built on decision trees.\n", + "- For this reason we'll start by discussing decision trees.\n", + "\n", + "Decision trees are extremely intuitive ways to classify or label objects: \n", + "- you simply ask a series of questions designed to zero-in on the classification.\n", + "\n", + "For example, if you wanted to build a decision tree to classify an animal you come across while on a hike, you might construct the one shown here:" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "Guess what is the animal I am thinking?" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "![](figures/05.08-decision-tree.png)\n", + "\n", + "[figure source in Appendix](06.00-Figure-Code.ipynb#Decision-Tree-Example)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "The binary splitting makes this extremely efficient: in a well-constructed tree, \n", + "- each question will cut the number of options by approximately half, \n", + "- very quickly narrowing the options even among a large number of classes.\n", + "\n", + "The trick comes in deciding which questions to ask at each step.\n", + "\n", + "Using axis-aligned splits in the data: \n", + "- each node in the tree splits the data into two groups using a cutoff value within one of the features.\n", + "\n", + "Let's now look at an example of this." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Creating a decision tree\n", + "\n", + "Consider the following two-dimensional data, which has one of four class labels:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "ExecuteTime": { + "end_time": "2018-12-26T06:58:23.571323Z", + "start_time": "2018-12-26T06:58:23.103258Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from sklearn.datasets import make_blobs\n", + "\n", + "X, y = make_blobs(n_samples=300, centers=4,\n", + " random_state=0, cluster_std=1.0)\n", + "plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap='rainbow');" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "A simple decision tree built on this data will iteratively split the data along one or the other axis \n", + "- according to some quantitative criterion, and \n", + "- at each level assign the label of the new region according to a majority vote of points within it.\n", + "\n", + "This figure presents a visualization of **the first four levels** of a decision tree classifier for this data:" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "![](figures/05.08-decision-tree-levels.png)\n", + "[figure source in Appendix](06.00-Figure-Code.ipynb#Decision-Tree-Levels)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "## Notice\n", + "\n", + "after the each split\n", + "\n", + "- Nodes that contain all of one color will not be splitted again. \n", + "- At each level *every* region is again split along one of the two features." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "This process of fitting a decision tree to our data can be done in Scikit-Learn with the ``DecisionTreeClassifier`` estimator:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "ExecuteTime": { + "end_time": "2018-12-26T06:58:23.626281Z", + "start_time": "2018-12-26T06:58:23.573622Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [], + "source": [ + "from sklearn.tree import DecisionTreeClassifier\n", + "tree = DecisionTreeClassifier().fit(X, y)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "Let's write a quick utility function to help us visualize the output of the classifier:" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "ExecuteTime": { + "end_time": "2018-12-26T07:00:13.511603Z", + "start_time": "2018-12-26T07:00:13.476742Z" + }, + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [], + "source": [ + "def visualize_classifier(model, X, y, ax=None, cmap='rainbow'):\n", + " ax = ax or plt.gca()\n", + " \n", + " # Plot the training points\n", + " ax.scatter(X[:, 0], X[:, 1], c=y, s=30, cmap=cmap,\n", + " clim=(y.min(), y.max()), zorder=3)\n", + " ax.axis('tight')\n", + " ax.axis('off')\n", + " xlim = ax.get_xlim()\n", + " ylim = ax.get_ylim()\n", + " \n", + " # fit the estimator\n", + " model.fit(X, y)\n", + " xx, yy = np.meshgrid(np.linspace(*xlim, num=200),\n", + " np.linspace(*ylim, num=200))\n", + " Z = model.predict(np.c_[xx.ravel(), yy.ravel()]).reshape(xx.shape)\n", + "\n", + " # Create a color plot with the results\n", + " n_classes = len(np.unique(y))\n", + " contours = ax.contourf(xx, yy, Z, alpha=0.3,\n", + " levels=np.arange(n_classes + 1) - 0.5,\n", + " cmap=cmap, vmin = y.min(), vmax = y.max(),\n", + " zorder=1)\n", + "\n", + " ax.set(xlim=xlim, ylim=ylim)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "Now we can examine what the decision tree classification looks like:" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "ExecuteTime": { + "end_time": "2018-12-26T07:16:21.081356Z", + "start_time": "2018-12-26T07:16:20.926405Z" + }, + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "visualize_classifier(DecisionTreeClassifier(), X, y)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "If you're running this notebook live, you can use the helpers script included in [The Online Appendix](06.00-Figure-Code.ipynb#Helper-Code) to bring up an interactive visualization of the decision tree building process:" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "ExecuteTime": { + "end_time": "2018-12-26T07:16:48.072333Z", + "start_time": "2018-12-26T07:16:47.884276Z" + }, + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/datalab/Applications/anaconda/lib/python3.5/site-packages/matplotlib/contour.py:1000: UserWarning: The following kwargs were not used by contour: 'clim'\n", + " s)\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# helpers_05_08 is found in the online appendix\n", + "import helpers_05_08\n", + "helpers_05_08.plot_tree_interactive(X, y);" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "Notice that as the depth increases, we tend to get very strangely shaped classification regions; \n", + "- for example, at a depth of five, there is a tall and skinny purple region between the yellow and blue regions.\n", + "- It's clear that this is less a result of the true, intrinsic data distribution\n", + "- It's more a result of the particular sampling or noise properties of the data.\n", + "\n", + "That is, this decision tree, even at only five levels deep, is clearly **over-fitting** our data." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Decision trees and over-fitting\n", + "\n", + "Such over-fitting turns out to be a general property of decision trees: \n", + "- it is very easy to go too deep in the tree\n", + " - to fit details of the particular data rather than the overall properties of the distributions they are drawn from.\n", + "\n", + "Another way to see this over-fitting is \n", + "- to look at models trained on different subsets of the data\n", + "\n", + "for example, in this figure we train two different trees, each on half of the original data:" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "![](figures/05.08-decision-tree-overfitting.png)\n", + "[figure source in Appendix](06.00-Figure-Code.ipynb#Decision-Tree-Overfitting)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "It is clear that \n", + "- in some places, the two trees produce consistent results \n", + " - e.g., in the four corners\n", + "- while in other places, the two trees give very different classifications \n", + " - e.g., in the regions between any two clusters\n", + " \n", + "The key observation is that the inconsistencies tend to happen where the classification is less certain, \n", + "> ### by using information from *both* of these trees, we might come up with a better result!" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "If you are running this notebook live, the following function will allow you to interactively display the fits of trees trained on a random subset of the data:" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "ExecuteTime": { + "end_time": "2018-12-26T06:58:27.275825Z", + "start_time": "2018-12-26T06:58:27.101954Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/datalab/Applications/anaconda/lib/python3.5/site-packages/matplotlib/contour.py:1000: UserWarning: The following kwargs were not used by contour: 'clim'\n", + " s)\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# helpers_05_08 is found in the online appendix\n", + "import helpers_05_08\n", + "helpers_05_08.randomized_tree_interactive(X, y)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "Just as using information from two trees improves our results, we might expect that using information from many trees would improve our results even further." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Ensembles of Estimators: Random Forests\n", + "\n", + "Multiple overfitting estimators can be combined to reduce the effect of this overfitting.\n", + "This notion is called **bagging**.\n", + "- an ensemble method (集成学习)\n", + "\n", + "- Bagging makes use of an ensemble (a grab bag, perhaps) of parallel estimators, \n", + " - each of which over-fits the data, and \n", + " - averages the results to find a better classification.\n", + "\n", + "An ensemble of randomized decision trees is known as a **random forest**.\n", + "\n", + "This type of bagging classification can be done manually using Scikit-Learn's ``BaggingClassifier`` meta-estimator, as shown here:" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-21T09:22:51.279359Z", + "start_time": "2018-05-21T09:22:50.701772Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/datalab/Applications/anaconda/lib/python3.5/site-packages/matplotlib/contour.py:960: UserWarning: The following kwargs were not used by contour: 'clim'\n", + " s)\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from sklearn.tree import DecisionTreeClassifier\n", + "from sklearn.ensemble import BaggingClassifier\n", + "\n", + "tree = DecisionTreeClassifier()\n", + "bag = BaggingClassifier(tree, n_estimators=100, max_samples=0.8,\n", + " random_state=1)\n", + "\n", + "bag.fit(X, y)\n", + "visualize_classifier(bag, X, y)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "In this example, we have randomized the data by fitting each estimator with a random subset of 80% of the training points.\n", + "\n", + "In practice, decision trees are more effectively randomized by **injecting some stochasticity in how the splits are chosen**: \n", + "- this way **all the data contributes to the fit each time**\n", + "- but the results of the fit still have the desired randomness.\n", + "- when determining which feature to split on, the randomized tree might select from among the **top several features**." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "You can read more technical details about these randomization strategies in the [Scikit-Learn documentation](http://scikit-learn.org/stable/modules/ensemble.html#forest) and references within.\n", + "\n", + "In Scikit-Learn, such an optimized ensemble of randomized decision trees is implemented in the ``RandomForestClassifier`` estimator, which takes care of all the randomization automatically.\n", + "\n", + "All you need to do is select a number of estimators, and it will very quickly (in parallel, if desired) fit the ensemble of trees:" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-21T09:28:30.271183Z", + "start_time": "2018-05-21T09:28:29.792594Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/datalab/Applications/anaconda/lib/python3.5/site-packages/matplotlib/contour.py:960: UserWarning: The following kwargs were not used by contour: 'clim'\n", + " s)\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from sklearn.ensemble import RandomForestClassifier\n", + "\n", + "model = RandomForestClassifier(n_estimators=100, random_state=0)\n", + "visualize_classifier(model, X, y);" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "We see that by averaging over 100 randomly perturbed models, we end up with an overall model that is much closer to our intuition about how the parameter space should be split." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Random Forest Regression\n", + "\n", + "In the previous section we considered random forests within the context of classification.\n", + "\n", + "Random forests can also be made to work in the case of regression (that is, continuous rather than categorical variables). \n", + "- The estimator to use for this is the ``RandomForestRegressor``, and \n", + "- the syntax is very similar to what we saw earlier.\n", + "\n", + "Consider the following data, drawn from the combination of a fast and slow oscillation:" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-21T09:31:40.938055Z", + "start_time": "2018-05-21T09:31:40.742169Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "rng = np.random.RandomState(42)\n", + "x = 10 * rng.rand(200)\n", + "\n", + "def model(x, sigma=0.3):\n", + " fast_oscillation = np.sin(5 * x)\n", + " slow_oscillation = np.sin(0.5 * x)\n", + " noise = sigma * rng.randn(len(x))\n", + "\n", + " return slow_oscillation + fast_oscillation + noise\n", + "\n", + "y = model(x)\n", + "plt.errorbar(x, y, 0.3, fmt='o');" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "Using the random forest regressor, we can find the best fit curve as follows:" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-21T09:31:50.952109Z", + "start_time": "2018-05-21T09:31:50.598789Z" + }, + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAW8AAAD3CAYAAADSftWOAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzsvXl0JPd94Peps+9GNxqN+5gbwxlyeFMUSVEiJdEUZUvyIVrykfecjeNN1l4/Z9/zJhtv4my8Tp6TtePN2ms9J362tbbWsqPLOmjKEkWKpEgOr7kHA8wFNM7uRt9XnfmjunHMAIMG0I0ByPq8x8dBdVfVt6qrvr/v7/v7HoJt27i4uLi47C3E2y2Ai4uLi8vmcZW3i4uLyx7EVd4uLi4uexBXebu4uLjsQVzl7eLi4rIHkXfqRMlkYcthLdGon0ym3Epxdj3uNb8/eL9d8/vtemH71xyPh4S1tu8Jy1uWpdstwo7jXvP7g/fbNb/frhfad817Qnm7uLi4uKzGVd4uLi4uexBXebu4uLjsQVzl7eLi4rIHcZW3i4uLyx7EVd4uLi4uexBXebu4uLjsQVzl7eLi4rIHcZV3G3n+5BTPn5y63WK4uLi8B3GV9/uY3T647Hb5XFxuJ67ydnFxcdmDuMrbxcXFZQ/iKm8XFxeXPYirvF1cXFz2IK7ydnFxcdmDuMrbxcXFZQ/iKm8XFxeXPciOtUF7v5FIFhlPZKlpJookcHgowmA8eLvFWsKVz8Vlb+Mq7zaQSBZ58+ICVc0EIFfSePPiAsBtVUCNhJdj+6K7Ur4GX35hgqmF4tLfu00+F5fdgOs2aQPjU9lNbd9pbpTj8kyeyzP5XSNfMltZc/tukc/FZTfgKu82UCjrm9q+0+x2+Wr1GcGN7Bb5XFx2A67ybgMhv7Kp7TvNbpfPo67dbXu3yOfishtwlXcbODwU2dT2nWa3yxeP+NbcvhPyucWwXPYK7oJlG2gsqk2nStQ0k46AuquiJW6Uz6NKxCO+XSNfJOgBHN/37bx/DSX+1INDO3peF5dmcJV3mxiMB7EsG0UWeeK+wdstzk0MxoMcHtwdlvZaRIKeJSW+G++fi8vtxlXebUY0DajVwOO53aKsxrIQDB1b3p1+5BNf/L8ZOPki+YF98J//CmT3UXVxWcl7wue9W/2UwxOn+J9+7Qkiz3zsdouylPRy9kqaP/rqGa4++0v83KfvQTDXjuy4XTTkPDVT5rXACMK5c0iXxm63WC4uu44tmTOjo6MK8GfAPsAD/M7Y2Ng3WijXe4LhK2cRbRvxzKnbKseNSUNVzWRC99ATG8abSVLp6t1xmW7yJ9s21//gC5xKGFhdI2BZZAMRXjnyCHcl0vQe23ERXVx2NVudi/4CkB4bG/vF0dHRGPAO4CrvG/BUSrdbBODm5JZ0zkmCOTdwDM6dZ/yg97anoUvnz3Huz7+GGohwlJdXfXZptsDODy8uLrubrbpN/hb41yv+Nlogy3sOtVa+3SIANye3GLrGeeB7sWEmrs9R1UxsltPQE8nimsdpJ9LsNDl/eNU2U1EBqLz17o7L4+Ky29mS5T02NlYEGB0dDQF/B/zWRvtEo35kee3ki2aIx0PrfhasRyXc6ju3gxltOc073hUEQeDrL10G4NOPH9xw/1ZdT19PiGyhhqpKmIbBwswEkiiieYNks2m6LB2P10sg4NzH2WyVe4/1teTc63HTb1bJ01HOk/2Jn2a2CggCWkeUkW//LZ1Tl4nHAiC2d4nm+myeyWSRqmYSjfjQLJvOsLftz9Vue27bzfvteqE917zlJfzR0dEh4KvAH4+Njf31Rt/PZLZuhcbjIZLJwrqfF4s1gFt+Z6cRpxMcGntr6e/kfA4kiWKxxthkhmKxdsv44Y2ueTP0RbxMz+WJvP0GiUwSwxNiSBARagUmRYsLFy/RM3CAoa4AAJWy1vZ7eeNv5h+7zPHp83wv+l+T9HQtfS8/sI9HX/hrUpcT2JFo2+RprAvkCo5cFy6nGJvKEvAq1Cpa29xJrfyd9wLvt+uF7V/zeop/S6bM6OhoD/A88C/Hxsb+bMtSvYeJ/PhTBFJzyxv021eXYzAe5KGoxYEf/QPlyQnCxUV+/uLL3J+aorNUQssvolWXZwm3Iw1dee1HjKQnuevEEKoMAnDf4S4+as8xkp4Evb2euZXrAlXNYCZdwjAtSlX9trqTXFzWY6uW978CosC/Hh0dbfi+PzE2NrZ2Obj3IVOazPkTT5Pzh+ko5+mbzzM44r3pezdGXTT+/vlnWhteMVxKUTv9HL3A4Sc/y6HUNRTb4vKRR7igVSjm0zjBQzufJi8kk6gvvcBLAwN86x+/ypXZAnc/8DhP3HcPIdtRmIJpYLdRhpXrAuWqsTSAGaa1tH18KrtrslBdXLbq8/514NdbLMuW2I1F+xNzeS4cephidz+m6sFOXGXmUgr8/tsmk+8v/4wzQDU2zJAd5EsPP0tHOc99C1f5Qd8wpUKGkF9hdDi6I/dvbDIDOIOWNDfDBeD7AwP4fH5Escw7b/yAmQ/fyahUf0TbPHMJ+RVyJQ0Aw1weJmRpeXLqVjV02U3s6SSdlfHLtztaYiXj11IA2JIEguBstKzbWo+6/PabXIoNYx15BF+1gi2IZAMRJrv3M1TLU5s5xeG4tSOKO5EsksxWmE2XeeHtBFPX5vkuIIVCfO5zP88jH/kktm3z4osvYCt1F06blffK2YYsCUv/9nuX7Ru3qqHLbmJP5xzfqunB7bS+C8UqPsCSZOxGhIRlUSjreD234ZbrOtcvT5B69Gfpjg0yLnqpKh48ikT33HXum7pG9PRzXPvUhxgeHmmrKI0Bt+GOyJU0nh9LkYwN8+joKLFYjK7uMr39I0xNTTKj6RwEXn03QT6ttq1I1MpiXQGvjFeRCAdUvOry77Vbqi66uMAeV967talASBEwAFuUsIVl5R3yK+hmOz23ayMU8lwGqp2DzNz1ISzNQNY14qLOlG4xaNtIwNwf/jv47OfaKstaA+78whzlgWN84IMfXNq2//BxFsZf5lwhx0HqNWLazMpiXcf2Rfn6y1d3ZVVIFxfY426T3dhU4PmTUxRTjoKyJWmF5W3ePsstn+cKIPjCSKoHXfFQ8YdAdOLuS94gQ0Dy8gTlcnsTi24cWE3TJDc3i9cfpufee5e29/YN4/X6OJfLYQGCsbN5YA1FfueBGE/cN+gqbpddx55U3o1CVLu1qUCXZPDopVcJWhqmbeMpZXmo34k0GU9kmU2XGU9kd8w3v5iYogyEBNuJwWtQ/3eoVuAAgGmSuHqlrbLcOLDm3zoJuRxD1SLs27e0XZQkDh8+QtE0mQHEHVbea7FbC6C5vD/Z026T3dr0QNI1RtKTRGfe4Z25aTKXzjD7+o+hlrxkizXKVZ3J+SJ/+8IE4YDKUHd7M87mJsYBOBo0MfZ18valJJZt4xFsgqUMBU+Icw8/S7Kc5/zFaxw5fmfbZDk8FFnqBO8tFci/9AMA7v3cj0MgAOXCkl97bKzERVHkCiBat195u7jsJva08obVfsrdUrRf1DUWgH9MzqFIEjHgxbEkB8tvoWseTH8UsMmXNa7PFZhfLKNIAuGAuhT2+O1Xr9IX8W57IBLnZsn+5m8AcF9I5GJAXYqg6LIN5gJRhtJTBAURPRDhxTNJtM4JIkFPWxYHG9fz9qUkgWKGcilLj5Hmjl/6wk3fHRoaRhBFLgODu8DydnHZTex55b1bWDmdlqsVXgIMQeSp/mE+euFdXlb8TF+6Rp/iJT/ix1BEkpkKumlRqhpMLRSZSZcwLRuvKpMt1JieywNsS4GL16+TAFTg6Oc+QzDUzduXkhimTcmWGEpPEankAAgCi+USC4vlpS42baVcpAbs++BjCIJw08d+v5/ejg6mgL5atf3yuLjsIfakz3u3E/n+NzgHdAaC7OvoxAc89u7LGIqHEjAweRFxcREAAQHDtEnnHeVUrq62MLcbG16rlEkCsR97Bg4cZDAeJB7x0RfzM6CaS4rbkiTCgG0Y5Artqz3RCBW0NB115ip6IEKh5/i6/v+haAwLyGTTbZPpRqIT5xGSSe7+iz/kkf/jN2GXNaxwcYH3iOUtmCaHv/WfEXt/Dmto+HaLw/hiChvoe/wTpL1+DI+Xj0+f5/UDD1BQvIRsG7FcQvAGkSQJWRLQdCfueWU6Nmw/7HE+uYANDHR03PRZSLZp2LOmohI2KwiWiVFtn/JuDEYjE6eoZB3ZQoODjE9l16xkOBCN8qPYMO9UVKQr6bZn0SrFPM/8+mcBaJTHWrx+FfPAoVXfc5sTu9xu9qzlPTaZWXqBHv+df86DX/hdQr/xa7dZKoeri0kkIHrnAyQe+Rjf+cO/5Wh6krvPfJd8JEI6EsenVemo5hBFAb9XRlWcn2JlOjZsP+xxftGxWHvWUN6jvmUr3/R4CQGiaWJXF7d1zlvRGIyiqRlygHDPffh6etcdpOxoP5kjj5DdoSzajw2pN2/U3LR4l93HnlXeKxl84wfOP3YgkWMjioUsi+UCBwEh6thu5Vg3AE9dfh0lewFDrHFX4hyxbBKvKuFVZWJhJ5RwZTo2bD/scaGuvOPhm5X3kNfi0UuvEillMX0B+ktZgsmLVPKz2zrnrWgMRmKlREFWCPQPrNp+Iwkphgos5guksst1z9pVakAo5G/eptXaci4Xl+3wnlDeDaa8nbc1DjdbrHFmfIbFOz5O7t5nOHq4h6ceHMLwB5l85GPse+xxbMUmVZrhn7z2n/jcmW/i88gIwFB3kI8/MEQk6EEAIiEPDxzt3rZ7YGFxEQXoDK4RjihJjKQneeb0czyZH+eTp59joLRIPpvGapOf90jAQnnrJHqtjCmrBIPO9a03SBVElTBgmgamoS1vb1MWrZBZY9ahaav+fP7k1FJhLReX28WeU96NKoJLiS5zy5ZSOXv7irxnizWmForkckUEy0aOdK+a3v/wf/xDtK98k2hXL/nMAgV/iMPXz/JPv/J7fFhL8MR9g9w/2r2U1ffMI/u3rLgbySSmaZLO5egGRGWN5Q1pubNRpT476LNMkpkS7164vqVzb8SRv/oTnvjC/4pZylLz+unpitxykAoGPIRx3Dm16nL2Z7uyaJU3Xr9pm6BpS8/d2StpxhNZKrXbP8tzeX+zp5T36i7oNlXN5K3TU1yPOYuUqnb7wsmS2QqpbIVkOo3P1PH6na40N07vu3oGAJurXh++TIq7T36Xp//Fz7VFplQqhWma9AK2tKy8R4ejjA5HnaqHda53jfDtE09zbf/jePvuJ5Eq8cLbiZb7lsXMIiPpSa52BpgTCnzy0UO3HKSODHQQBNRaBXlxfml7u7Jo5bGLN237+slJ/sNf/4BEIoFpmlQ1k2yxRrboulNcbh97KtpkTT9nrca5gWOMpCeRV/gmdzIaIJEsMpMqkS9WEGU/PjWIHXGUSyJVIl/SluqNe8M9AFxRVO5vs1wLC/MIluV0XpfX+KnrtU2ux4Y5FRwk0jVCydeJKHup6rYzk6jXuG5VdIdQr52SGehl0OsnuJY7ZwUD+7p58tKrXBg4RiSfIvKhExy6/0j7smhvWDcpAd88fxkt7vSvL+YzjBw4CjgDtovL7WJPKe+1/JyCZS11HVd07abP201jNgBg6hreSoVKbIhsNIxe1kjnqlj1QoK5kkbJDCB5Ojh58B4C4QPLnXaSxZYrpGRyASyLHljlIlka0J47A8C5gWPYksx8Zx/BegijZeqMTWXpDHvpCKitU96lIkWgpGv09G9cftbsH+CO9CT70pOowI/9Fx+nFr+vJbLcyPMnp/hIqsDAym2AjkRnrAdD18nnF0mn5hE8EWqaG//tcvvYU8p7ZbeTJSyTjrLj9x6+cmbHF5IaswG/VyZXzCLWKniAhfggdq5KLOwlmVt254iShL/rIOPRfu4qv40EpEMxpusDQCtJJhfAdpR3bS3Lux6WmPOHsQWRiieApNVQTQPNkJZizlu6OFguM4NT6zxa97PfEr8f/UMfoeeHP+AKYNTrtLQL0TC4Hhvm3MAx5v1h3irn8coK3X1DWJZJaSzPYmqOaF8YjyptfEAXlzaxp3zeh4ciYNuE3j1J9OIZUsk8Vxc1oqVlhd2xOHeLI7SehmLzqjJSdgZJr2LE4tDVRVeHj3Bgddzwwf4woUgcS5KYGjkMQDnouFhaHf6WTqcJezx4YJXl3aDh8+4o57FFkfLQPgB8uoZtWwj1rpGtXBwUymXmPF4QBDoisab2saJRZ/YAJNeKBmkhs94orxx5hGwgQkIQ0QIROkKd1HQTSZKJdsYxbJFsvkCuWGvLuoCLSzPsKeU9GA9y+DtfxkhnkGsVAsUsMY/N1e79S4uWkfT8BkdpLQ3FZpsGvpkJeucniMcjnDjYxUA8sOY+3Z1hokEP147cBYApKwjVKuU33kIwWmPlalqNU5em0Up1n80tfN7Hp8/T3x1EiUWxRJFAfeFXFhz/bysXB4VyiXnVGdCaVd52KLSkvBeyzkDdrvKsEx39zjmBBZypabcoEs2luOOV7+Dzd4DoRSvn8Kjyrmm95/L+Y0+5TQDy2RKH5+suhsQ5Kp//BQDOjNzNSHqSUDbJTubDNUqcBk6/QcY0CAGm6llSeG+u4Q7Z3x/h3QWoVsuYooRoGqjf+SZdp9/kcekJKr/832xbrlMXrpHOVYiqToEpew3Lu2GNj6QneahPZWrRR8gsI+XLzNsaSn+Yoe6BlvrihUqFBVlGlhX8wXBT+4w/+1/x7kSJGUHiJaWfYBsVZUH24aNIHqgBvcCRC6/DmMQv/PCLVKr/gpnhO6loJqlsmXiH16kG6XaWd9lh9pTlDVC4YbwRLMcve6XvEN8+8TTm+fOMJ7I7FsY1GA/ywNFu/JNjYFv0lbIMxf0MxoNLn3lVCQHoCKg8cLSbx+8bQZYlqpUSliSjYiHNTHN8+jzSNn26jXjk+WwVJbIPMVj3K0u3jvMejHg4PBjhKTnFP//O79P51lfwmqmWVxe0ajVSQLgjumYlwRtJJIu8boR584nPIQgiKUvizYsLbft9w/W6Lqn633FAtCw6c0mux4a5rkQIGs4zV6lUmUk70UQ71XrPbQjh0mDPWd4dpSwZWaEYjBDOpcG0mIoOMDFyJ7P+Try6E39b3cFIgMF4EGXxOoqhIvjDTJseEvXokfXqjR/olnnjYgpDFIkWF7l37jwj6Ukq1tZ7XK6Mg9e1GqLkIeUb5npsmMgabhNbXFbetqyABm9/8Bk6z19D7z3AXI6WK8lFXcOUFR5/YLSpMM6ldQBJxgeU63VGktlKW8rWHl2Y4HRoiIxtIwKCr4PxcJye3AJnB45hI+AVBETLwKiUgA7S+SpD3a7V7bKz7DnL+47ZMSxZwZRVBNsiX9a43H0QUZYoBzqoKl5yqTzzi2VOTaR2ZEEpkSxyqe84RiBCat9xypawoR/00FAXYnmK+848xyfOfpeRXH2h1d668l654KnX/dY+UeLcwDGQ13KbrPj5ZZlsscaYFaAQiBAwDcqaztRCsaX3b0HTsUWRrq6ujb/M8oJwJOLHD1RqGpqmtS1MbzgzzX1zZ6mVsnh8IdLhOPF8knA1TyYYpaZ48BTydGSSqImriLkcmm7d9tZ7Lu8/9pzy3jd/hQdnz+K1dQTbolzRCNRKKNiUgx1UFQ9apUZVMzBMu+ULSmtNWy9NZSnWNHzA9aPLqTe3ih7p6enFloM8f/TD/N2dn+Abhx53Fl1ta919NmLl1F2vVRElGUUQnFBA8WblbY7sX/q3HQqRzFawZIVyIEzAFjFsL3PpIt989VrL7l/S0EGS6OqKN/X9xoKwJUn4AcGyqVTKLQ/Ta7ibvnb0Y7zcd5Tg9Hm6qyV0n5+p2CBnD91PZvgQXr2Gv1IiqFcxsFGvX+bwUIfr73bZcfac20Qol+nzZrl38TL3v/YtvnjHcfSKzrTVRUH0UA7F0WwBUzfxqsuX184FpVSmgGWZBIDyCiV5Kz+orXZgeXuY92UZKBfI+Tp45cgj3C8E6dyiHI04eNuyMHQNjy8Ads2Jg1/LbdLdzTf/6Gv40/Pc1T9ATUsCMN09TFUHSTcxDZ1cUVtaeB2MB7eVvbpgGCCKxOPNKe/GgrAtSQQAbItyuUy8nvHYCla6m2zbZsobYuHuT1DsOYQxtJ+8pOLzqdjlKlXFg0+vcmB+gnFJpsvn5aE7Pt8yWVxcmmVPWd7i/BxiPofh9WELjujRyxeo5pMkqzWKpkVZkp1wOxtMyyJfT+pp64KSWUWwbfxAZzTAwX4niuJW8dHzeRAFkRICom1j1RdeLyrNhc+tRWPqrkxdIT5zGVVWUKoVjk+fXztUEMjtO8zs/Y8BLFmz85F+6gGQGIaJp15rfNtx6JZF0rbxKQqBQHMDaWPR1+NR8dsWvvQMcaXQUn/3yusSbIucDXo4DrIKgrD0rEmyiKrXiBQzhG0L0arR++4/Mhj1tkyWreIuZL7/2FPKW377LQAiXpHUTznFnAKTZ0lXcsiChSBJWDiKMGxWkCVxqb1Yu6rQAQTFEoJt4b/BNXErP2ixrOPx+igDFk7VPIC8sHU5G4pu//NfxmNCpFRBTlzn3MAxprSN3QzxiA8AXZQc5W3bmIZOZ4ejnLY7AOrlMotA3OttKtKkwWA8yOGhCJ9/5+/pfedbqP/vH2xLjhtZeV2maVEGtGgPliJjeJcVc6TDh4jNz77xdwz1RPHPn6WWvIb6g++1VB4Xl2bYU8qbegfx2mc/h+n1YgOXEhfpvPQq3T4f/kAAagXk3Bw9UxMAS+3F2rmgZFZSdEy8TnettCok8FZumpBfweP1YQoCFUC0HOUdNrdXGXEwHsQqZah1dCPbAgvhHq4OHeU1ujb0W0eCHoa6g3gtAxUb0dQRzBJhv7ok83ZYXJjDBuI+/5b2f+4X/ns6gMTlGfLf/i7j715uyYL0yusqWSYIAlpHJ/n+fYTCPiRRAARUn4djCScqSIt0oYwcYgZgtn3NK1xc1mNPKW+hruBsUcLweLkOzBoG96UnOapohAMeAn4V39wEml5FNAw6ghsr0u2STCbpSE/y9KWXufNAjCfuG1x1vqceHLrJP3x4KILH68cWRYqAVL+2e77xl6jf+vsty5JIpHnrro9jKV7C5QJVxcu1+z9MvmJs6PZ46sEhnn3iEE/6C5xInCNYSWHUlhVjMlfd1tQ8Ne9E1GxVeZ994KMosWGmjzxC4O3XOPytL5FfWNz2gvTKgb1gWdiCgEdVUGQRryrj98p0R33s7wvTMzpCNtrN1IG76Ix0oQGp9M40R15ZU9xNy3fZlvIeHR39wOjo6A9aJMvGNLq7SBKm6uVMffNDQJ8z48cb60MPBmB+gtHMJD/+yL62Km6rXKb8pf/EUKWI7fU1vd9gPMhnHtuPalYp2xahaoFHL73KSHoS/+//3pblufaVf6CiON14JMBUFKwOJxa5WbdHTHHao4UsHUPX8CmgGRbzi+WNd76Blb7YVD0ztiuwdtmAZsiPfgCAMiDYNkK90/12/PHnr2XQDIuuxTnKpo5SK9DTGSAe8eFVJUDAq0o8cLSb5Gd/kd//3a+w2D1IrNMJd5xLJbd87mZZtajK+r08Xd/3+4ctR5uMjo7+JvCLOCWPd4YVyluXFSaAIDAMvPrgB4hczVKsiAg9/WjXznNo+jSD8V9or0i/+RsIp96hC3j1oz+7qX2PHRrAP3uK/efe4hOSjFyvJS0YW+/Ski/WMPUaojdAJtqD0dNLRHS609/o9mhYco1a442u7LakMJKe5I7CVWaUIscGZL72RpaFTIXR4eiWZUslHeXdHQiw1Sucf/jjmIkJEoqfY1cuItScJKLt+uMjQQ//7H9+lj8AIkDu87+KIAgcHoxgWfZSolWji5MsCfTV66AkM4sc2dbZN2a9wWl8Ksv5axnGJjPb+m1c9h7bCRW8DPwU8MUWybIxdeVtyzKHRrxcAB4Eqr/2G9iygs8j4/PIxGMC6dPPUQl+rL3yWBaFb/09tiBw5rf+PWb/vYxuYvdAIABdI7x1Io7gDxOu5DmWTzBkbV15K5U8Sj5Jru8ARrQbv+hMrlRFXOUeWN2VaNmSAyemGiBWr4uSTqfYyqPS6PXYUCqp5AIhwOfzsdmGddlijWS2QjXYS2VQYTFTT2CvOdFErViQLgI5oCc2TFESqWnmUsuzbLG2qotTR9CL5D1AJTZMMpfb9rlvxfMnpzh7Jc2B/ptrwRTKOl7P7or4vdHy34mGKO9Htvyrj42N/X+jo6P7mv1+NOpHXivLr0ni8RDUX9BwJEC+6rwwh4DLtp9g0IOn/hDvGz1KBri0sMDPxW/dqWUzXJ/NM5ksUtVMohEfx6MimVKR6v2PY0f2UchV8SWLlA2bkb6Niy5dn81jD99NQbuADuT2HeFHxX7E3GVGGte8SQbK0yiVHH7RAFlEkkTCQQ9PPTTCvcf6lr53cjxFIOBBrYcHBgKOop7NVomEHPdPb8CHqkoYRhmPpxNZFgmuCNHbSL7GbxIMegiFFAy9QjfgDfnxrrPvWse8PptnPlvBBqKRANVyjqyng6yvgwgmBDx84ET/lu5XQ06AGaASGyZz5BEsQFElLKBQ0ZnLVLhjXyeqKiFJIqoqEQwEMQeOMTGX5NULC3z68YNbOn8z9zEc8qz5e0VCHnTDWrrPzR6znQRvCOO8UZbbKdvtoh3XvGNDdiazeX9pg3g8RDJZwJstEQLyJY0zZ8cQgBHgOw88QblYo1ZvCqsFA/QD75QKTE+nUVX1Fkdvjoalmis40/TpuTwzF7NUDn6A9MA9BE0ZwzDJFWo8/6OrTS2Svn56Gq/t+G9LgPeBD6C8+H3OdAwzAiSTm2+obM1eJXrpAvaDHwVVZqArwKfqfv+Vx5udL2DZNlrd8i6VnOuqlDVUzUnR/+CX/pS/uetBLt9/nJocxjAsEnN5ktkKNc2kVtGWXC1rUaz/JsVijYsXr6KdOkM3UDFsimtcW+N3Xus+DXUFHFltG49Qo2JqpEJdDP3w+wx+6sP4ZWFL96shJ8A8UBw4Rp8okV+Rfm+aFvPpEsNxR4ZI0MNQV4BKqoLqD1NITZFKLpJMNtFcoslrvlG+icksVxJZYh3OwNrx76vsAAAgAElEQVT4ve4Y6uD8tczSfW6w1XvRCoo31MNZKUsz1/teY7vXvJ7i313zrY2ou010bGZmpun9xV/i5Tseoxx3LMrG9NwsFdgHvGvqTE8n2L//wLZPvZbPUdBqnD/yKLYMqsdLSdNWfX8j5V0o61QGDpEvW7zUu4/90SH6vWEEY+u9ESdmk/jSkzxypIurkp/Dg2sr1zW7EtW3W/WEHg9w5MxJ0unPQA/ohsXUwvIC2UpXy0bX+s0Xz2KfOkU3YBzZjHPpBn+2IBAOqOQW0xyaH+fpyjjZFi1IzwO6P0xAbC4G3ZZl4uU8RdMgn21vkwhFFgn5FbyqhF6p0fPXf8bxK28T/urf8WrdpaQbFh5VWorXd3lvs7eUdz2cLpHLY5omfZ/8CeZDjiJo+NWePzmF4fGyD5BMk6mpyZYo7zX7Z9ZqFAMRQkoF8YYEnWYW0AzToqKGWewaxKd6qOkmiUgf4fTVLcuZrVQQAX9nzHHgrkMj7Xyt7fus/qW/48BMsYDSWaOmr10MqpmBKp9bxFMp09nTS/Wf/Eozl7LEjQONz+fDkmRs20DIt87fPA/4ynnmP7l6kTvW4WN/7xrWjyJz1/R5EopNLtu+cMGxyQzFis6J4hQfO/U80csXiF88BcDpM+NMLdgYpoUNVDVzqZiYW2/lvc22lPfY2Ng14OHWiLIxjSiMqXo3leHhEa6s0bLSlhX6RAnZNJiammzJudeyVM1KBaGUxdfrLATGOnxNpcYvIYBUt3KtpQgTAbZYWNC2bbLVMn2A7fED6yf8NF7s6VSJmmbSEVCXXSAzy7I3KpBkMlmqmspCpowsifi9y49OMwNVKTmL39CJHr+TzRaZvXGg8fkcyzKSmUQs5Dd5tLUJXL3EBNC9OEmhf/imzx865vTyWXW/juyj38jxcjqHPnEO+ImWyLIejz/3RY68/cLS3zbw2rlJCkYA216dou82h3jvs7cs73pD3LlcDoJBenv7uJJZp+FwZ5yjqTkuX7+GrusoyvaiEdayVCvFItFLr+A78DM3hb41k9EpiyJ3HoixMD+Daep4FImBwjyyubmwt0ZUx0hcpWbodOF087mV8gbWrTVuy8v3qhsoWFGSeRNTsNCzBQQR8qEQ+bJG2K82NVCV5qc5BKhd8U0r7xsHmq5oCLE6j11ZRMhvT3k3wiXlty+xcOJpwj4vQ93BJb/+vYe7Vvn1b7xfofseQH7hexQnr2xLjmbwVpyo3L//j1/nI4l3eOHf/javXRwnrYYwUekM37k0A9yp5hAut489lWHZ8HnP5XOEQmGCwZsti0Y2Y6F/mCEg9cpJ/u6772z71Gt1xdlXnSZ6+XXu9lVu6pbTjNUT8iuE/SqyoGOUkvR3eujQikvdXDZLIZ9FNAw6RQnEbfy0KwY6LTbMdLUTwzTBslByGexMBiGfZzHnDA7rDVSN8L5T4/MUlR7U2DD2Gr9ZMzQGmjsPxPj4g8MIRpEFWUHQNKQL57d0zFXNK/IZ9ECEmQeeca6pfq4bs2VvRH/mJ+gC8vkM9jZqsTeDolWwBYH80EHOWyZvA8FMBp/SgadUZeGd06TmnXj8mXTJzcB8j7O3LG/LpAAUazUO9N66JOjE05+l//QbSFqVTPpm3y6w6dKmN1qqb/xtAoDDMR/aGhbsRjSseVX1USFLuVwiIggcm99aK7R8bhG1lCcYibGtnL8VIZ1zA8cwbQnLBBXHryrgtDMTBGHdgSqRLDK1UMQwLapVDQSFxSOPcD3QzdbrJjpEIlFEUSQR6QLGiPzkM6QvXtv0cRqL0N5MGnHa2V8IRTfVpcf2++kCLK1GoZAnHO7YtBy3IpEsOvHtmsmrg/eiV2tYts1LxQLV2DD7C1X8C3NMKh7yko9AOoPQHcfvlZteTG4lX35hgrNX0nhVGU03URVxVQKYS+vYU8pbME2mAQSB3t6+dTMEE8kir/sGiT78LOVIhLnkOq6VbZKpJ2d0NtlY4EYaD/NLb3rIYmPrFT44e4Z9mcSWjhf72hdJ1qqod9yzpf0b2J5l/+lsbBhR8oBlIoomjTgMv1bhxMHYui/kGxfmWayn5FeoYYsqAeCCr5vHtiUdiKJIMNTBxWP3YL/zCuLiotOBaBOVCmFFl57JCa76OsjFR9AtlbFJJzFnuGfj2FzbHyAGiIZOOp1uqfJuzAwM0wJsSoqXV448yrVr1yl6vISe/RXiU7N40lPMDd1JFRuqJTxaaKmY2E76vhsDdqVmLC1uVzSYWigurRe9H2O828WeUt4YhlPFTRQRvNE1MwTnF8tMLRQpiiq9goio+EkVnQfr/DVHiW8342ts0jlOOpdDAUKRraclD8aD9MbCTJ6+RLdniJFScsvddMyrYwDMfv6fAU7o5Fau1eofwPb7Ecpl8t4gsqkhajphlmP1NUFa112SSBYZn8phmBaiZWLns1hqGNPXQV7Zel2TlTx67yEuXRpj8YOPEfvRy07FyU2ua0zVE646i2Xmew9RiQ8i2wC24/PWzQ2jNiZtHxMnnqY4dIyXTs2iBFtXBO3G8FTJMLAUhWtTs3QB4Q9+mMrHgiTPXkYriYgLkwilAv6sAjgRVjvp+27IqxlWvSaMQzpfJRxQGZ/KrkoUc9kee8vnbZnMAogi2draBfBPNlK8ZQUBCIoimlbl/JXUmt/fLJErF/mnv/tfEpy6QqZYcFwAW6yS18DrDyFKMsnkguOrtramvDPVMmFBIH/83jUrGTaNIFD+lf8WgFCtQKBWRq7kECwDsJEtg4Fyal0lNT6VRVVEBMti6Oo51OQs3nyWYjhOyNsae6Gz03G+pBqhOfrmlVQjHnpRUNA9AUTJkU2RndeiXL11JcZEssgbBRUrEEGwbc5eSfE3359oma+5UNa5PJMnW9TQdYuXD36A14bvZbFo0tnZSV+303Op0hkHVUWIxNABqbK8ZtLOOvZryQtgWTbYTnSYYFlLZZndRdTWsmeU9/Mnp7iayLIA+H1+NGPtKXKjc04j0SRUn0rPJluTRHH3v/st+qcuceQL/zu6Vqsr7+11UhEEgUAoyuJiGhNhKapmMxh6jUV/F5l7P8nZq4vbLhla/u/+JQAjqSkOXT+DUs4RKKYZWkxwz/VTHMmuX7muUNaJhb3I5RKiZVFVPJjBThKxIdKR7pYotyXlXZ+lCMbmFUOjfrlZq2BLCqIoIkvOf+DE4d9K4YxPZUFV8AOB5CzifGJ5ewsI+RVSOSfqRdarlFU/BdWP5O3A03mEIytmPqosongdI0LJzi9t38nGyI2BwmPUiF06Q/eFd+m6eApvKbfqc5fWsGeUN4Cha2SBeGd03QchHHB8fVY93C1UjwAway1aea8behmjBoZJF6t9xFslEIpimiYp2JLlnclkKYzcixiK3bJkaNN4PLzwv/wJx6fP01vOEpifoDtxjsPzl4lUchzJrB8/H/IrhAMq/ZU0BgKaL4xkQ0QrQX9/SxpCx2KO8k43Bjp9a8W84oLGyMRJlOICPlVCXJFdKUviTc/ZyhlNoaxjxbowQh14AHsxubS9FYQDKpl8DdnUkU0TSxCp+AKATbIWXBUBpcgSffEw/tmLGJm5TUU9tYrGQHHXxdeRtRq2KCKaJr1vvoxQLO7oQLIe76WSuXtKeWcqjs+1qzO27oPw4FGnvoSpqFiSTE9qHmwb1WzRomX93c7oOoKhEwNs7/aU9+hwlGOHRwBYsMxNKe/Gom2yYFKJ7cMMrPa/N9OAYT33SqFvmJH0JE9eehWllKVsW0RLGR699CqDufW7xyRzVS7P5Oko5RD1ClI5Q8Aoow4vR+JsxTpdKeuS5V0PH92K5Q2OxeyfPo9YKyCv6PMZDXkYHY7cUuGE/ApIElef/BR+wNBqWKbZMgszX9IQRQHF0AAbU5YBGwER3XJ8yo0IqL6Yn/uO9nHizLeJvPgXfNiz80k6569lUPMZjl07zUhqkuKJ++grpzlw5QyPXvyhG23SYvaY8naSFOKdsTXjrh842s39o93Odo9MMj7IYrgHb03j2kKFbHGz6SE34/U4L2auWkYau+hY3sHg9nzMQDjiKKMF00RocsGyEY2QLdao6ja16ABTA8fIlZavc6tWYCJZ5LWcxL/59L/ibx77RQh2Ehh/jccm32IoM41orm/pNtwRnYU0JVmlFu6AgwexV4R3btc69Xg8BIMhUo3M1C34vAF6Tr1OLT1JMHmenlgQSRSQJZEjQxGe3CDGu6HYDY8PP07EiVartszCLJR1vIJFoFpCNfV64pWFJCt0rBPK6L3rQUxg8a/+oiUybJaD81d45vRzPNIn88F7hrjjQ3fzzOnnnIV4l5ayp6JNFuuWd6xuda2XITgYDxKP+CgPDjH45g+5HFDJl8Jcn8tBrxPKtV6Y4UY0Oomb18adQePgQcqd241chnCkkxkc5d2s5T0+lSVf0siXNOz6PrakkC3UyJc0woHmsh9vJJEs8v23EsyVbToCUUpqgHTPQaaOP8FvRDr46e9/kVG/zq2C4iJBDx84+wKzSozEQx8lGFg9O2mFddrZ2cmcZaEBaDcX2WqG6IV3SQG+wT7uPhTHq8pNR+mszPz0KCrB+Ume/ML/wNGz91D83/5P2GY1y5BfoVO2KQCmJGNZJiKgKvLSDPNG9Kd+Cl7+B6avXKZrW2ffPNlijVxV4EsPP8ti/BgUa0T99XequvViay5rs6cs78Wa8wB0xTZ+LJPZCvnB/QB0aDVsG2rVCslspemWUmtSd5ukgRCg/fH/s7WLWcFTDw7xqQ+NEggEWTCMppV3oayTzlcRTBNbryLgLH5alhOeBVtbsBqfypLOVzEsi3S4i6rqQfcGMHxhMrbCta4RftQ5uuH98pULiHNjIEl4PKsr3bXCOo3FYiCKpNl696FCPosJeEYOb2n/hgFxeF+E8OVXCV55F98X/5zA7/3ulo63ksNDETolg9HZMWTTqCtvk8fucmaYK2kMOMEDRwFIXL++7fNvhkaMt6nr2IJI1tfB1EKRBcEZtIWKq7xbzZ6xvLvPnGTu1Ot0AB6fj7Xr2y1T00zw+rEFgbChM4tMOlelWJP45qvX8K/RfaSZhIZrXcO8dqKXC/4wse4Y1wZHaT6n8tZ0dXUxb1nUDINmvOghv4KmW3ReOkPZMJAVD5LahSiCeIvsx40olHU03UI3LPRABNs0sQURwTSwLItkuIuOamrD+6WUi+RzKcJKFZ9XubkA1jbp7IyBJJICBrboNskUc9hAsLt/w+/eisWf+HnGDAMUlSf/4v9C/dY3KP3Wb2/rmIPxIKNymXDiHMVAB+mQj33dOj/5kWfW3UeJdtEhycxfHodsBraRg7AZGmsYnqozOzZ8Tjz/jOb45oXy1uv5u6zNnrG87/yjf0MBiIsiVhNuCo8qYYsihteHp6pTw4em6UiSQK6oMZMuUdVWW2sb+WETySLn1G4SoRjzx+/HeuyjLYmcaBCPd4MgsGBZfP2lyxt+//BQhHyphlm3On16jbBZpafTf8vsx40I+RVURcSywRJFDEmuZy/aSIJNTfHCBmF0AMVqiaokE4sEm64Vshk6O2MgSqTY/IJlw232/f2PsnDvJ5H923N91UwZgiNcCR/hWw9+him7NTW1e8wyz5x+jgNzYxTnL7Cv3ykNcCviPj8VoDgx0RIZmqHxLHjq61JawPmNy3Zdee8Sy3tsMrOUZLfX2RPK+/psnn/oPcHUh36Ra7/zF0xZG9edaCRgCJZFMRxHqGkYpoHfK+NRlpMwVrKRH/aNszNcD/Xy7oH7sTydIDn2cavieuPxuKO8wUn33oDBeJBjQQtBrwI2Ab1Kt1HCq8rbckscHooQC3tZ3ZNAwLYtbEvDY+lg3dzQ+EYy1TK6pBKJtsf72nCbpGBTC5Yr3WZlw0ALdZKtKlte0M4WaySSJRRfmJpWZXH4IK/23kliYXsdYxLJIqdLEl96+FlOde1DVIP09TUxQ7j3gwDMz2ytzMJWaDwL3koJU5Lri6ug+pz/CxXX8m41u155J5JFXnlnirTsRVM8EIk3Ze02Ih5qh0bRZRVbq1HOp/AqEp0djtI1zNUK8lYKz0n5zlJVvOgC2KJEoSaSL2kti+tdsryhKeUNMEqB+3/4l3SOvcLo3CW6qTLUHdyWdTsYD/Lk/YN0R/0IgoAkCiiSgGgbmHqNrnIWLPOW90vUaizqNWxV5cc/fNeWZbkVoVAYRVXqlnfzPu+Vg23FMPCpKkeGO0lmt2YdNvZTVS+2bVNRFATbZvzy2gXRmqExwLCQxBZEFiUVJdSPErh1q7WnHhzingOOI29ubm7L598sjWfBUylS9QWW6szEYs5zqL7wvaaf6XbRKPI1my5vO4ltN7Drfd6Tv/cfYHqeCs6Ke6MQfzP+6UjQw2GlxMClN0nf9zhZS2Q+nQdBoL8rQLVmLoUZbuSHHZ/KUixWiQJ6/RmUFYV03lGWrSAW60IQROaBWJOLlkq5gJ6eJJ6e5JeAc8eGuNBkRbxbMRgP8tAdPaiySLGi41Vl5maLlAoFYoU5Hk6cI7hONcHxRBbf+EUunngarThPd3cPF+dbHyomCAKd/iBpnCqHzdIYbE1dRzcNOhWnWFJNM5dS4zdDrV5fR60na1VkhSBQTG19RjY+lUU+9S7xsdMAFOvhozn95tWQGyNjeuoJTK+/e4lHtyzB5hiMBznot+jOznN15A68qsSnH9u/6p0SFhage+PG3O1gdZGvzbXw263sess77wuD18uix085FMFXryPSeAHXi69ubDe8Po5PnycgCPiKOYy6Ty7sVzm2v7NpP2yhrBOqD3U6ICAgSzKabrUsrldRFKKqwgJgWxstyTrIxQLzQBSn52Rq9O6WyNLA55GJR3w8cLSbo30CcuEiR6++ysj8za3aVrojhFqNVCBC+f6nSRW2FgnSDLFwGAOoffHPm96nMcWvlYsIQMDjDHb3Hu7i1376xKbj9T31IkyeuvIu1WuW9/zx7285/rxQ1pGmnUzAieFjLHp8yIoH3dz4lfUFQ0SATDbd9hrjDRLJIuabb5Hzh+mQ7VWKu/pTPwM4PV9vFytnW6WKweWZ/E3b9xq7Xnl7PvMp+NVfZezQCaodsaWOOM3GCRs+PyPpST7y9nMMTrzD0Ze/jl+0eeBoN1Ff8xOPkF/BL1gMpacwjRqSJOFVJQ4PdbR05O5WPVSAarE5f6mRSZGODZO555P89i//Ia9GDrYkGWktOuq+6+lIFDGfQ7p4YdXnK18EQ6uiA2oo0tYXJPzhJwEofuOrCKnmio81Blu96LzAAa9v1fbN8unH9nOwP7xkeReGnDZqd147hbBep6cNCPmVpZDRif7DmJaJ4vE19dzbPi+9QK1SplRqv2ugMWhXTCcPYurQ3atcm7bfiTwR9K3F4reC9Vybe7lY1q5X3oeHIti2ja5ryIp31fZmMOrxxQ9PvE389HMcfvVLfGjhHEMek5/71Ake/KN/07Qcgmniq+SQMtMEFIN9fWEeuqNn8xd1C3rrbqHF1HJxoXXrMZgm1nN/T+bII1w9/hjTI0dXNaBtNQ3lPdPrlPUUk6t9uitfhHTNoNRziGqoj9OX020bUCL33IvVFScFyGdONbXP+WsZNMPCKi2CbdHj2XpYJSx3WQoHA2DbmGg8cDDKSHoSoVza0jEPD0XAssn6OihaEOzopr+vb6l2zy3x+ugGRNMgmWx/ZmNjcBbrET96PTFnadBulOrVdl5RNt6d9Qa9kF/Zs/VOdr3yHowHObE/hGVUUBTPpgvuGPVKa/FSAS9Oh3BPMcfbX/0BAEe+/TdNy3HYU0MqZbEFgYCvPYV/+hvKO7n+YlPjYROnJrkYchRpKeYsUh3sD3OwP9wWa1dVPYQ7osxUylgAprnqwW+8IFXNICUHsBQvsuLBtm1UWeTYvtbHHHd2xtAfeIgUkPv3/5Hv/qi5XpKRoAd14RxDr32Zz3gy2/4dB+NBRkdiBK15QuY0Q4qjqLYaIjcYD7KvnCQZjgM2sgTxiL+pgdn2eOjGaV6STremFPKtaAzaDeVtKgqapnF1apZisYBdzzS9nW6Tw0MRME0i6TkC5dzq7XuUXa+8AXxSFT17jbBa23SccLVuLQpAL7AIkM9uKjqhoaC67Sp3nH4O7/gP2dfjb8tChxnuJXniacYXrA1XxGfOX+XC/vtIHv4AlhpEN5YXOds1Hezs6kWzbOYB4Yb6Jo0XoZYtoNenyJLqWYruaceA0tnZCdEoKWDklefZ99J3mtrv4rU085evOEpui52Q1iIYjpDP59HqLpStWt4AWcnD4fkJqGURjTzxTmdhdaP7aNct7/j5d0g16UraDo1BW6y/UyVd55133mb84mn+9E//hMlKvRH2ihIGO23tDsaDHHr7JeIXTxGfmqCULS5FZe3V2O89obwbD6AvsPkWU4X+YdKHjgPQg1PRtZBeuGVhpfWQtBopwJIkQuHWW5GJZJHTGRE5EMH/+ovkE3NLhaduJFus8fabl6kIIpasgihS1cyleubtqp3cFe8DUWQKwFi9qDoYD/KwtUDv6TegXMSvV4nUmyxDewYUWZYJHruTmeN3YgOebHN12yvlPPvPvUYPoJ9o3SJvKOwMYOl6jPx2klPygrOQqmlVRFHCW69eudF91D/wQaKCgK+UJz3d/ljvxqAt6joWMDmfwDQN7jnSj2mafOXaFTRA2OLibStIJItMFi0GszPcOX2emF1rm3txp9gTyjudTgPgD25eeT/10DCTX/4mX/nQ57nw8LMkTzyN+eL3CCzMNH2Mxsi8pLxFiWC49dOthkUVBgzAePEFgDXjj5PZCkZmESGfRAmHiQQ9+L3ytmqa3MhTDw4xOrx6kOqM94EoMAlO67GVmCZ3ffYpDl59i2DiHIOpqyjB5S5D7RpQunt6KNxxnCLOANsMxbyj5HsA/UMfaZkswVBdedeDPLZjeYe1EiagGRpeX/P30Y7HSXz4k8SA9HSi7REnDZ//yNjbzNsWmlbiA8d6+dmf/AQPP/wIRdPkDYBNhHO2mvGpLJjLxoak15a371H2hPK+ksigRPaR19RNB9cnkkXevJrj5M/8Cmce+RTZAw/wtSd/mTPjC1yPDTd9nErN4ExZ4eTDz2IefJhSrfUvRMOiarRoLdUHrUYc8UpqmkmhWkWp5Ah45aXuL9upabIWKxX4Uw8O8VNP3onf62USsG9ISZfOnwPAO33e+X9HDFta7mXYLv9id3cPyDJzLL+UG1HKLyJYFoGuvk33vrwVjRlZuh7quR3L+1hukobqX1nYa6P7mEgWeXHgHmYffpYLiwG++J3TW5ahWYZUg0+cfg7ltS9zR7zKjz3hZHk+8MBDKIrKWwBaja+/dPm2LA4Wyvpq5V134bjRJm0kkSxyadZA8YQQRHHTHWIaI2vFsKh4Oih1xNEQmPFEeeXII00p8ErNIFusUdJMqoKIFOxsy5SrYVE10hgKuSwYxlIc8Uo8qkShVsMGQuEAnWEv3dHt1TRZj5Wx9IIgMBzrIg8sZldbLfKYEzqYT0/SeelV+hRhVa31diVDdHf3YDeUd5OlYfPZJKJl0u3ZfkLTSoL17vGpepifkMvd6uu3ZKQwz9D4j7DMGl6fv6n7uFTj3RfGL4ggKFydybTdPSCUSkwD57qGODJ6lGDQMUG8Xi9H+/rIANdnmp/ttpqQX0EwTbK+DsZ7DrE4l+b66csYW+wXuxvY9cr74rU0tVoVWV39kjU73WmMrOWqgd+nIESiaEBVcY53buDYhscoVuohUPWKabJnOcuzlTQsqiBOa7WcZSFNJ5bqtKwkHvGR1zRsUcTnC950jHZyoNsJj7wyt7qbjpDNUAMSwKH0JI9WZ1pejGot4vE4SA3lXd3w+7ZtU8yliFkWttDaJGN/IIwkSaRFZ8C9MZxyUxgG1mICPXuN4/uiTd3HxjNpKioBHDdSrVrl6y9fbavFK1TKnAE01cOxY6vfqTuHR+qy7WyZ2pUcHoqQQ2EqNkRV8aKUSxgXLlBKZanU2pdE1k52vfJeWHSSVZQblHez052GNduoYyLJCjbL0+ucf+N03ca+tXpB+Y5IBwf7wy2fcg3Ggzx66VU6S1m80RhaKcvQ975GMlPm7JX0KpdR2K+gTvyIjloRWZbxqtK2a5o0y/56nPfl+dXhjIKmMw5YwEFAqWzd37sZwuEOPAF/U5Z3Ilnk3OU5xPA+ynd9nPmekZbKIooikUiUtG1jA+o/fHvrBzMN5kQREAhHOpvaZSn13+PFD3QkrqJVK2u63lqJXSozBkiyysjI/lWfDXX34AUmpqd3LOMTlks1nL2SZnwqi2VZePUq2XAMSRYZTk0hplLMLZb3ZL2TXa+8BcuxpBRla51YGpaoLDnL/7KsUOwZZLZ/P2cHjzM5dHTDH6yxr1CPvR4e7N6UDJuh8LGneeb0c+y7e4Tg9HnOLVYRZ2aWmkZ8/60Epy+nePP8FIuxgxxJXePOAzEOD0aItKCmSTOEAgH6gUt5gwtXF5YGlqmayDkgFR/kqCAy+ehTOyKPIAj4uvZx8cTTfCd6x7ovYcOlkMsXERBQfGFODpxo2QvbcC91dnZS9XopAcq772z5eLZukBRF9g/3IcvNPWuNZzI3dJDGfE2rldd0vbWS7MKC0xw8EEGSVp9L9Hg4BOSKBXJNRgNtl7UarswqYeL5JMX/v733jnLkPO90nwoo5NzoHCb1YBKHaZgpiZQpiqJl05aDZF8Hyd71Ohx7ne27Duceeb279nFYrb2yfC373LXW8hVtX8mWJVKUTFJMosQgcjgzHEzuON2NRiPHQlXdPwro6Z7pnukAoHs433MOz+GggaoXQOGt73vTL9aHd8BegEzn9EaJrbV50e4Os+2dd8Bhr3ZjkQDR4NqTNk2amfCw33ZsimrPpi74AtRVB9565apf2GSygF43KZR1Zrzd6O4g7ljXumxYD2/+2H/kdz/5PKGDt5J+6CzjuA8AACAASURBVPvJAL1vvgzYgrTTqSLpfJViPkfd5SM7ek/buhdXRVXpiw6T9u9gLjm/+ON4serjzegw2YN38ak/f4aJ+97XEXMmkwXyzgF0b4iyXlv1R9gMKdQX5lD1GgHsyqFWh78ikSiW00kytLnrI6vXqMoSwdDaZ403r0lDc5If2oUb0EvFFUNvrWRszJ510+W/codgebzswS4VnLs4QaZQXVwRt2u1u9J36qzXSAZimJKM7vWRDMSolqvUG7PpL1zMkSvVrpsKlA0H/OLxuAx8ErgZqAL/LpFItH76ezVDWM0g+2yZqo0osQzGfBze3UWmUOWtM3PkMguY9RqDuVlCRpkyK08pbN69JckeM1GzTCo9O1G9/rYm4JAkIl3dmAM7WBifZrDR8NIsA6wbJuViDr9p4tc0ZjPljq26ASxFoT5wAAlIL8wRjto7kZlcluzAAQZ6RrDk9q70lnJ6IoPX77NHw14cRyoUsHy+K77TfDqP6x8fx5UuEA7EGB88iOTxUpxvbXgnErEd2OyOnex849v2xXMNAYWVmKlWQJIXxxKshaW6mqamES5muJg6g8fx4LrPvx4uTIwDEAleaavl9TICoOtMTM3hqV8aa9uu6X7LRjVk7QXgYCXLtMOJx+Ok7PdTDnSRL+l45CI1r5+KbjA9X0SSpNUOu63YzMr7ewBXIpG4B/hN4I9bY9Jy0ukFfJrOgV09m05+hXxOwgEPDjOPVUvjrxahUdK1Uvy6KfBbqtSp1w3qlkWwOE/Y72x7bFmWZXr7YpQdDsqN2uWabmfGZSxKxTwB01YSb3c88woUlYonQI/XS61aIbswj67rTGSzVKPDBONH0OsmpyczHdkV5Es6/nCEmsdHFvB86s+RZ2eu+E67vvZlcukC89EhFIcLCYmK6mS+oWvaKsJh23mnGuNHNzpZcK5qJ6TX47zhkq7mg6Ux7j76JJ7kBfL59q0mTdPk9CtvUTz8CGM7br1iNW15vIQAvyQxl6msONe71avdy0OaqWwZZz7N3umTFDIzJOcvovf2Eixn8ZVyy55bLF8f5YObcd73A08CJBKJl4EjLbHoMrLZLOHwtaWf1opTU3C5Pei1KlULDN3ONK8Uv55KFplOFTENE8uoYThc1EIDTCU7k4g7cmAEFIVUY+WtNRSATL1IpVSlGzBVB05NWXU0bltQVYKlHMOBELKsMDN9gTfe+DYV2Ykv2E1NcWJBW4dkLcXvceD2eMiNHmS2EWLQnv7aFd/pTS99iYloP8WuHpr7FMkyiQZcLXUekYZMX7PW+4pmpjUyq+sgywRDG1MiutA1zPnDj2C5RjgzmW3pjXRpe/uJN95mXu3B7Q2RjvReEbayvF4kIBDopYKfc1Npxmfzy2QIW538XxrSLJbrFMt1MAzSp7/B9MlnWTj3AhUji6pXCWaSKEs6rn2u9jSTtZrN1EkFgKVFrEY8HlcTicSKV2o47EFV17+VfuyxR/H7/RyftrcysZj/Gq9YGV8jrDDSH2R6ykelnKcoSfh0Ha/XyV2H+684tm6BVq2w48ybFIB5wKEq6NbG7ViLnc6GOPJ3vu8Ir/7Kz5N19+J3yIwOR8gXa7w0eRpFghhQdTgY6Q+2zZ4Vifo5OHWCjOv72dW7k4nxs0iSiT/YzeiZ42ScDjRNYd+IvQK9mKlw64G+NR16I+/jrsMDvHh0Gn8gRGpkN9VqCWcuy12HBy4db3yc2Nuv4rzpYVDAjYVLr9KTztPd/RCGJLXwM/TT1RUi29h9x8JuCK5+7NXOm6zr+B0qP/l9R9a9la+ZFt+85TvofiuBo1ygWq0xmylTqluM9G1eEKH5e3rp7TleffJVJKDSv5NqKILXa/9t8Xsf6mYsOkyxK44FmGYdcFCs1NFNCPmdhPzOll7DsZifSNjLZ586iZwsoMgS/rMvM56ZomdgJ4fiI8zOZzGLc7i0AN0zFwjsvpNY2MOO/kDLf0/t+H1uxnnnuNQMCCCv5rgB0umNadgNDu4hFvPzzVN2114yuTFdwEJj1aHJEt1BjdmpCjlZYX9unvhv/TT+P/x9/u7blzoJAVQZjKkpFKBZgKbICqq8cTvWYme1UXeayVS4Wyrz6re/hKPy4zxy5DCvHzvLsxNnOHDxIj3FDIH8OGOy1DZ7VsJRqDGSGqesz3LKv5/do4c5vDtC6l+eIlzOMmdY1GoGxaL9mZdLtTXZF4v5N/Q+PKrE/qEgz3tcZNImumzwwNsv41El/u7L9nXz3UefwA+Y1TTUomgBP6SqXOjZRfJMkuHejZ17NTTNS7KmYwDpmTRWbeWd42rvuVqtsqDr7HA6mZ9f/85lbDpL1YDKrn0YFy9inBtnUg3zt186zgfv3bHpsF9hySo+k1pAdwdJ9eyhmK9y/EySSNC1+L1LFbufwjc2hnwghq7rqA4XhmEyNZvDIQfYPxRs+TXsUSWGYz7GpnO4C2kmT70GgTC7D97Lrt29SPUXOLt3N72JM4yeOkPl8A6M6A76Qq6W2rLR63rp61diM7GIF4FHAeLx+N3AW5s4Vkfp646ilCeZCyi8/8TX2P3a13E++aUrnjfY5WV4bgyXXkHHQtYr9NcLDHZ522JXsy5Vr5s4VJnJZIE7e3pQgJOvPc/CQoq3Xvs6Bx7/Q37h+c/w6NEnub3L0blwSZNGKdiQWVhUhX/oyDBDNXsy2+XJynbNNFnKYMzHvpEulOI5+iZfYcfkyUUxAwCpkMcEqgFQnT6mundzftdN5HuHqOgGhZLe0vBOJBLFlCQycMUAr7WQ+fvPIJVK9GobS0Q38yDTB45QjQ5Rb5bDFVpfDlcp5KlGh9BdtpNpJv6a3YtWKETWE8BfrSIbNcxKFkWWAAmpxeMcVqJQ1smdeoOCZXHkjjs4tKcPSZL4jvuPEFAynAkEkSyTUH6+7ba0ks04788DlXg8/hLwp8Avtcak9hMIRpBlmQnNxVN/9FkApFzuitGQcbVEZPw0I+lJPJPHicyeISC1TvZsKZfXpWbyVV49OcfCvjt4AFDGz/LpT/8ls7Mz3AY0m/otd3tLwFZEtTdsc6+8xX2/+H/w0G/8OMrJt9lftDsurcvyE52amRyOdqMqKucAybKWDYWSCwVmAKmex+t2ISsyVbcXxaHSH/US8GotjntHQJIb4sjri+fKF85T+vVfBqDrsoaXtdKs686jIWsahlEHy8LZyJu06r3qeo1KrYoGy+bYAPYITwCnE+/IIAoQLOaplXOYpoUi05ZxDiuxkLSrYW4budSUtWvXbkIeifT0MT788uN88NnPXjeOGzbhvBOJhJlIJH46kUjcm0gk7kkkEidbaVg7kRWFUCRGIbdAqSGBJeWunEGxY/IU9516CVNVqFkm0WKGUafeli94tR/TsZvfw/3Az3z9y+w+d4Z77rmP71zyd8vTeedtKbbz7n3jG+w4/QY9x14l9V/+COfkOPedegmnU+3ITJPLURSVrp4BkkAGkApLVpfFAgkATcMfCOJxqfjcDiIB16I6TSuTZpFIFGSZFKw7YamePc0skOsfwfMXf7Wh8zfruuuGhaxqdrfn/OzibPVWvdd0ag6pXqcvNYEsS0gSOB0K/VHv4rA0gNFRO+cxePYkI6deJzBvJzuT2Ur72vYrFW767CeJzZwjl52lF4iELk3JVBSFeDxOWnNyAVBfe7U9drSJbd+k02Sz1RSXvz4S7cGyTJKNSg45l7viNVIuy0hqnKrfQf/Lj/Ouo0+SefSxDdtwNVb7MWW7+kjv3s9dwE89+zTvetd7WLq+sXxboMbdSDwvbX93lArIRp2R1Dh7+/wdmWmyEr39w1hOF2cA9VsvLz4uFwqcBGSXa7EO+3JaGd4JhyNYysactzw+zgyQ37mXaKz7ms9fiZDPyVC3D7emYIQiyHqFnunTi7PVW/Ve06lZlEqe3nIWr6bgczvY2Rcg4NWWnSP2Yz/IrQ/eQm8xA5bJ7S//Mz1qva39Cd4//C8c/rv/yd1f+RRyXWc/V+5U9+7dR83l4bjDue4d0lZz3TjvVrHYwtxlD1eaLdmrs+bKey5dXlwJyHnboV+Q3bz43b/GE7/2N6iaoy2lb6tq7PldPPE//pH0zr1IxeIVqxT97ntabsu1sBpxWLV6aQjUjueeYOjlpwG7fHGr6B3YgTGyg2OA7//6bSKnj9P/6vPk/+lxZoGRXXvoja58Q2lleCccDiPJih02Ma4e875CVSa9wBzgjXZf0Wq+Vh6+Y4gffHAPB3ZGCET9uFJj+KbPLtZYt+q9ZtPzeObO2Mngy3IdS89hhcJ0/eLPsvfQCP0vP86Oo0/SU0y1xIbVUN/8NmPRYd4YOIhj5x1MH36ECTWwbCE3ODiErKi8EYohlcs89a3xttrUSlo7Uu06IhK1nXcqncLyeJBWXHnnGIsOM+GNoRtA33DbOsJGh0KLx7388RMX0lR9QaRqFamuMxYd5vjAAU7d/T765X5Gk4WOrnAtj2fVv5V/9GMYri2Iwzfw+gIMvPchzj39VXKTE3zgF38QgK9gx+IP3HY7EzUnIZ+TQllfDO+st2v3WqiqSsjl2tDKeyG9gA4bru9eSnMFftbSKVsmu4+/zs7v/0DL3ms2k6I/M81756Z57YMfxbCkq36e3gE7WzMHBDPtFUe+eOI8X7r5A5zpG0XxRngmuoPXylEeSsxxe9ze0aiqSjDSy5xlkWftYh7bgRvWeddw4oqOMp1T+dJt38WB3JV3XCmX49jAAYr1OorDjeq4pNy9Ujv9Zlja1lytGYT8TvYPBRmM+ThxIU29oaRSnpnnxb33MhsdYPamO/C26WZyNSzvyucpdvVS+uNPwBYrcR86fAtP/PCP8tzkBPvxUtKcfDM3jTIwyN5Dh5l4fRq3U8XtVIkP26NW20HY42ECqJYK6/qhJRfs4U3+SGu0Nft6opzUSux64V94dFAi/zM/sKnjNauiMvkKaQZxHfkBjo8fx+NxEnU5rvp5ju+5jfzhR/imJ0BvTSVUqLYldPL1r71Jee99nOzdQ80bRlZU6oqDedPBV18ZpydySYP25oNxcl/TOM/aRgpvF25I5z2ZLDCZLOLyhdHrJWaDUbKa54q5vlK5RNIToG6ZOJzLV5vtUOBotjUDPHrvzsXa0IfvGMLfb3ftZScu4gYkbXlootU3k6theVculcz3DdG5iSars2/ffl4YHOLZ0AAv9t7B3Nwsqp7i/tv3oijK4pa53aKzEbftvBcWFlhP5HoubdsV6OptiR2a5sTqGyIFSKWN9Vs0WRR7KFRZyJYwFSe1YC9jPWUyxRpcpZloMlngOAHm9t+FezxBybDIz7Wn+1YtlzjfvZOs075WNatRNipJZIr6st9LtLuPjOpgElCq14/zvuFi3mA7ut39AWJRO3GVVVQyspOZhZI9VWwyY8e163WMUg5LknBoy513J2qXl9Jc7ToaA4Cy4eXuoKNyTquETQr9a5eVawfNWKaqqhy+40HS9RCJk8dILyTR3EGqjr6OjvuM+ezvbD61vtjuXNauPPLHelpmiyfcRQYwCptrPmlWRdnzfuzFjmbBXMC+HgtXmQvSfK2m2RUvqmznAlbSaN0stsC4RFl1gqIhySplzU1dUZBY/nsJhbuQVAcTLM/jbHduSOfd/OK8DammaaePM927KZd1qjW7weDp1yeZsNxoUydwOR2EgsvFjztVu9ykGWceedsuZyoElo8J7ejNRJaxPJdW3/U99sTHybvf2zkbrkFVChKPx3G7vQQCEQ4ePIgsy4sOZCVx5VbT3bhmkkuc95/901H+7J+urik5l8/jB9TA2gQY1oI33IUJpPObc97N307dsKg3qjM0oKpdKk281mubzrvScJTtGKwm1+tECil0VQNJRkJCd7mpWjIuTVn2e/nA3TuJ98eYBXynj7fclnZxQ4ZN/B4H2WINl9uLLCtc9PfglNxo1RJVl5e6YTI9X+Ql5wDF1DiOyixe35G2JbfWgrF3HwCx1DTfvul9zCoeXLkKsaBdp9zpm8mF/j287ekj6wmg/Oqvks0W8fR2c7CjVqxOvqTT1RVjxx47nqo1KmQ6uUOJ+QNIwFxqfs2vKZVK5Ctl4thqOK3CHwhjqg5S+TxrmzKzynE8DnJzC/jyCxSKRWTDwF2r4lQbYifK6mGTpsO0XH6KPXsouGJIs3mcDoVnXp9s6e9KMur4SlnU4gKGNwKShKk68DhknA75it9L3+Aws4D2zL/Cr/10S2xoNzek825WdkiShNcXoFTTcJTK9MxPUnc4Kbl3A3BGCaIC7zk8SPDmAYC2JbeuReX7P8zCf/sTznfvJJZLck5RqRsmC7kKB3dGOnozmUwWOL7zDuRCAV3VmC9BYkbHm5nDoUgc2BHe8k615g16pcc7heZ0EgHmFlJYlrWm4VIzMxcpu6PMHY6TnCoit8ip+QIhMqrKQqmwKee91w/H/+DT7JOcpKJDOLG37+HhPipBN0Pdq9s5OhTilVNJypoP3ROkrjhxGCaKIjGRLCx+X624dmSjTsUy8E2ewBEdJtuzE6em0h12MxjzX3GOrp/+OazPfobC2OlNn7tT3JBhk6a6jktT8PkDSKqE6tVw6VV8pRzutL1SKjW2hcMjO7bQ2gZeL0fvfj8A/moBl8dJd9jDjr4AuRWcVDs5PZHBbIgQn951mOlUkbphUqzo20ZKarWdSCd3KJbTRQ9QKZXI568sRV1KYjzNU69M8Pa5abK9hyDcu6hQtJnPs5kH8PtDmKqDzPT0hkfUUq2y//d+lfuPPk24lkVLjREsLDC0MEnfg3cz1O27auXIYMzH4T0x/C4HkuaBuo7ToaAqMgtZO4TSqrZ9uV6nXsrhKGfZP/kWsUqWkV4/+0ciDMSuTLj39vVR8/mZ75Duaiu4IVfecKmyYyCs8OLLr1J1d5EK90BNp2LIOApVvAW7ZGvvvn28MnONA3aAMx/6MS4cHyeDA123cDfmIXc0Wdk4n/XIdzL+tRcY79tDs6CtblwaBNXJ6peVuLz0civCXZbXSy8g6TWSyTkCgUt5k2ZTzv23DnJ6MsPFVAlZlsgms1DTcfmX51g2+3l+z4MH+ZQikQIcLzyH/sD68xPOL34B55NfZgR48fCPM/LJ3+M9QM/3fpTYGnekqiLT5ZYoFxcoFSWi1TwXB0a5uFBiR1/rRL1lo45r6gTsvbfRQLSkVX+FG3iuqpC56f18S1LRWhzCaRc35Mp7KR6vn719GkatwHwwRl1RcOhVXA6Fgl7FHR0m3MKs/7VYbQzAZLJAsmyRD0WpujyYpkWuWCNXqnW88sXvcZBF5cTQQQqmTCZv6wAunWXR6RvKSjRv0Ku16rdbwMLyeukBqOnMzV3ZgJUpVHnx6DSVmgFYVGoGM2kD2elD8SxfHW7281QUBe9DD5MC1KNvbOwYk/YNp/A7H2fSayf7ewDdt/ZZ1UGfhqUoePRGM0xjeFjz2mnFtTyZLPBWQeHY6N0okowTCUuyE5UrzdqZTBZ4LZHEEYhSsSxee/sin3v6zJbvHq/FDe+8Ae64eS8aFax6mWC1wFDyAkGpiFzO4xo4AI6tV9Y4PZEhGrgygbWQrXQ8WRnwakzPFzFNCwmomxbVmrEsWdXpG8p2xPL6lq28L+fyEjldr0FuAQIxqv7l32krPs/ArbdTAox/+fyGXi/NzQJQe+C9zDc6EXuAmnftzvvgziiWJNOVs7srdUAx6nhcdhBgs9dysw69UDMpSTJKVzfHd91KJtrH6ODKq+lmqMbdSGrrhdyyx7crwnkDBw4cwuFQKWcmCVey7Jk5Q2bqPDIWQU9gcX71VpIv6QS8GgGvhtKY3qYqMl1Bd8e3d7lijf6oF0WWUBQJVZZwasqyMrFO31C2I5bXSwBwWxazs1fG3S4vkauUCrjOnkBxOClf1l3Zis8zPBrH9HpJr7PuvInc2D2Y3T2kykUcQBioedc+HG2kL8BQj48982O4UmNohQVilQwhn7MlEyibDtdMzaK7gxR79nCyL05FN1aVgWvuajyOxsyeC6eWPb5dEc4b0DSNPTuGMA2Ds3qVU0ClUKBPVYnVtkcCo7nycmnqsnGmKyVf2k3zRuJxqQS9Ggd2RHBpKoZhdXwM7Hamqd04IEuk02lOjydJZspcTJU4PZnBvEyIt5pvJNim3qY6uq/lY3UjkUhDE3VjTklOzmFJEvVQiGypwMJN93H0zvdz8fb71nUcT283ifsepTr7Fkee+BP++yc+yr4urSXvMV/SkUolpHNnqESHkBwuwMKyWFVPdXFX023X4VSLheWPb1OE827w0H0343T7yJgGM4Avn2OH6uDg7Bmg/fHRa7EdqieaXH5RB7wakYCLoR7floyB3a6YjXGuu595mmrR5MmXz5Et1siXakzPF8mXamTyl1aDlbzdFv/AgJPdI9GWj9UNhyMgy8zXNladJM8nsSIRFnI5TNNk8r7v4v/72O9QDa6/mWhuaD/zew7TrIB3ZRY2ZNPl+D0OlPPnmAvYOxdVVlBkeTGkt1IopPkbMnuHbC3OamnZ49sV4bwbDPcG2BvfTyjcwx7L5IFagXdPH2W4MLvVpgHLyxtBYiDm48Pv3bMljnK1i7opACCwMYdHqN3/boaAQsnNdNLOE4BdmVOpGZimhUeBQ9/8CsrZY+w99RJ7fO0J09kCEQoLG5xbLc8nMWPdJJNzWKoP2de/uIvYSHLPFYhyZvQQdWDyfGt+Z6MDAbSnnqDUDIE0hEN8bge7+1euZln8bXnd+CyTenaewS7Ptl+E3NDO+/LVtNftxL3vFn795cf5rslXGclMgWP7VFM2qyf6op5Vky+dsuPIvu5GhYA9AvRaNb43KsXf/B0GgFqmjj49iT+Xwlm5NBxqIV9hd36a8NgJnNks0sABxkL9bbHF6/XiVFUWNlLnrevI6TRmV4xTY7MEu4Ybs4HsKpn11KI/fMcQ3WE3bm8QQ1FZALRaa+ab7Jg6xf1vP49USOPAQpMs/B4HvVE7vLhaKGQw5mPXji7uf/lxgiefxSFt/9GwN7TzXo2a149ULiPp+qLkl2A5gzEfsZCbvqiHB28bFI57Fep33In1fT+IhoWeyRCdnSAyM0Y9naFYrjM5l+dYFia8IZBkNG+Ib3TtXzW5thkkSSLq0FgwDEzTvFIE4irIjRZ/s6uLs9P2fBSny0006GZ3v52wXG91hscXxFRVu/a8RXO0pXyertQ4sW/9IwOTx+mTqzjUq9d4N6m7vUQlGaVWIdeiME47Ec57CfHhMN1hN3WnC8olpEIeNO3aLxRsW7Y6V4Ekkf+LT9N95yGMaBdT0X6y7iBSpUIzkVbIlZlx2005/kCQ+r79bZm0BxBxatQNg9wKmq1XQ0rapX1mV4x0rozT6US5TDFpvdUZHl+QarCPrx5+hFOGh2den9x0bbWk15gD3Klxbjn1Eh7JBKRVa7yXv1iiOhAnu+teTk0VW2JPOxHLyiU0f+SG5kI9fw6AymMf2kqTBO8Q7juyi8nUG+RML5F6Dke9hqUp+NwaViFLMhAj6HFS/5B9vbVj0h5A1OkE02RhIQWsfbfUXHkXA0GMWhF/6MoJ5WutzphMFkhmyhTqPkp7HmRiIoFm1FujUlXTmQMKvhCeUIj+W+JEIrE13cAzhSrZ/e/CKJfQK5W2qWa1CrHyXgHDeemirt908xZasr2JD4fbPlb1ncLth0aJqfPUqwW6Smn6MzNEAi5Cfo2KaWI6nOi33ocVtLf1Tq09Scuoy40ELMyvfdIhgFS1wxpzhomHHN4VBDnWUp0xdjHHqyfnCPqcuFwuLFVjLjpEbUnV5GaaY5or7+mRfTzzU/+ZyjrUiJKZMg6nC9U0qFYv7Xy2a7OOcN4rUF8yitPs6Vxr/FqJD4e3NhSwAlsentjmOBwO4jt7qeYm6UtdYO90ApemEgt5KBt1pHoVf/DSjfCx+3e25fOMuOxrOz2/Tv3IRnnhXLWMUypzy+4ILk1Zdy368fOXGoQM08LtdaMDS0WsNtUcU7OdN4qCZx3NQ2DvdgynC69lUSsXsRp1+Nu1WUc47xUwtCXOe2BrRsAK3nkcPHgTRinFjCQhmwZaPovLYWEtTNI1P47T6Wp7k1PYbZdzppKXnPdaEpdSo7xwtmSvSA/sGbjq3JjVyBYu1ZirioTq9mIB5pKE5aaaY2o1LkSHkXbcxWzGVsVaa/LXqSkYmhMvgF6j2thtbNdmHeG8L+PhO4YI9dkqNfm+IfS7791ii5YjVrjXL3v2jCJbVfJTx/EVM6hnTpOenyb61lf5gTe+2PKmnJXQNCdBIJOaJzGeXruOZ6Mrc7ZcQlVVotHoNV6wMkHfpQIAj0sFzUXVH6UkqVw4O0OuVNtUc8zJTI3ZvfeiekM0yxhX66y8nMfu34kvHMADyIbByQuznJ3ObdtmHeG8V6D0G7/F8e/7CZ77rU+AKnK6gtagqioDOw4yFgrhPvokd7/1JOWLr9ObGmePa2Vd0JbjcBAF8rkcxjqadaR6HROYL5Xo6oohyxtzHQd3Lnf6qqJgKAqOagnHm9+G1VXUrslTr0zwtQl7ZxD0e4kGLzWNrSVuPRjzcZerSE8xg2zomHqJoW4fJy6k11xS2UmEZ1qB+uFbeOMnfmWrzdj2iB3A+hncdYjU2Nu8CKQunCBav4fvwkLSWid5djUsh0oMOJ80wZMkFAohy9IV3bFNZ7X4HddqzAN1IBa7stJkrYz0BTiyr5up+SILuQohv4vJeoFQ8jR7izmK2kObml2eqdsz5V2XScitNW49GHby2NEneSN/HnnnzxLyHd6QHZ1ArLwFgg6iOjQO3vOd7AQihklw6HYO6TV0R4eanBQVosMY3n5qtSprDi3UdWYBS5Hp7t6484ZLncLRgIs9g2Eso0baZVevyJn0phKERske5+p0Lr8ZrTVurd9zH2Gg+3yCYnIbKLBcBbHyFgg6jMsf4sMuD3NON6fcHpR6uz9JkAAAGZ9JREFUnbrWGedtORwsDBzAUcxTdVeW/e1qK15JrzMDICt0d7emAsupKaiqiqI6KDX0PaVqFd8mEoTy/FkkNDTNhQ6L3Z9rjVvXD99CJdpDV2qW82eOr1l7dCsQK+8VmEwWOD2Z4di51LbvshJcX/z89x3m57/vMFWXF3e1RP8zXwYg1d2Zqiaztw/LE0DRa9Qvmydy1RWvrject7ypsMlSmqEaVXNRs0wMAMPYcILQsizk06+z59RLeDR5wyN1T3z/TxDDroApFa6uPbqVbMp5x+Px743H459tlTHbgaYSR6VmtEQAViBYiZrLg7NaJnAuAcCzH/hoZ8770MNESjlcgDt1kbuf/gd8FyeBq4cWpEbYJBgI4HK1Jj7fFGBwOlQsCxzFDHcG6xuOdxuT53FPXWB3apy9Pe4NV+/UnS5i2DqYudwaq3G2gA0773g8/gngv27mGNuR1bLS27XLSnB9UnV6cFeLOBsDkIqB9c/E3giWP8DBqRN4JQl/egalXGDkhSeBq4cWCoUCBaA72rX4WCvKVgdjPoJucJ57kUNHn2TIsUFle6AyeR6AyL4D5Ib3bPg4daebGFDKl8hnt++Aqs3EvF8CvgD8hxbZsi1Ybeu4XbusBNcfk8kCbxx4EFffTbhViUMDafbs6u5I9Y7l9zOSGmcgN8t8cIBvecNoyBiZwuICZaWV6lxjkFVsifNuFW5fiLIkMw8M6bUrK13WSD5tt/yHbj/C1CbsMZxuqtFh6gOHuTBvIE1mtuWs+ms673g8/pPAL1328McSicTn4vH4A2s9UTjsQVU3Pq8hFlu7yOlm6Ovxk8lX0RqzJbxeO5EU8js7ZkOTTp9vO/BOf89jF3O8PZGl1DuIM7PAtBbktXf9CNWzKcIhNwd3RhnpW19b97pw9jMWHcZV0nFZaSSnDzfA0deZl3LUuZlI2IvP5+TY2XleenuOx969mxMVWw4wPrpj099RLObH1xghHIv5uff2vTz3ZTfzQNCtLvvbeqiU7JvPSH8PYxs8BkDGG2Ry773Impe6XsMEZjNlSnVrw99NO67razrvRCLx18Bfb/ZE6XTp2k9ahVjMTzKZ36wJa6Iv5GJqJketMdWtWLRbZPcPBTtmA3T2PW8XboT3/M2jUxSLNcpuH5I7yER0iJrTRz5fYWomx9RMrr0aoKbFc/vuZy62i3yoj4osY2oOQqkZ5k6O4di/jydfPMfFhRJTySK6bjDc5eF80p5J4nZv7nfQ/I7v3W8nPZPJPKblwJIU5oHcfJZCsLr4t7UymSxwthbAdfcP8ow8zMWZHCGfc0O26uEuJMBXr5Eq1zgzkcE0Lf72S8f54L071v3dbPa6Xs3xi1LBy2h+MVPzRao1g6BXY3Ro61RrBO8smuG3VKiH8wMWFc0FioJeuxTr3UyTyrWYTJU4dvcHkMbHsBSVosuDGQih1ipQyJAr1riYKqGqMktVciaSRcKALxSm1cNqJUki6PXbepbrFEd+6pUJMoUqDkWiZEhEJJmc4mJibuMFBjlUXECoqpPLl6kHdGRFJVvYXiNi31HJxlbRbCLoxKwJwY2F3+MgV6wx6wxQdHmxkNA1J3rdJFeyhza1M79yeiKDunOEcrQbZBlDkrEsKGoeXLUKC+kiTsdyt1CtVpl3xeh3ODBG97bFroAvQB3I5tZfmpfMlKlUKmAaeAGrIRKxUUELX7c93VEPxFCrVbwLtr6m1vhctkvxwqacdyKReDaRSHykVcYIBO90RodCpHIVW2En3E01GKHqDeBQZRaydtNMO6fY5Us6kaCLfP8wVbcPJAnTNKgrDmK5JLVylUhweSlgoZCn7vTTOzAIbWpYCTTGty7k1u8YqzWDUqkIpmlPBFSUxcc3wuheW0NUanS9urJ2IjQasD+X7VK8IFbeAkEHGYz56Aq5URUZRZawPG6cLgeqIlPV7bkc7Zxi5/c4CHg0Al4NRZYx61UkyyBkVtgxP8Zen0XAs1z6L5fLoxYz9HvaNzzLH7Bl4FK59ceGnZpCsVhEshrO22Erxd86urHKmMFuP/edeomuQhqwoFamu5wm4LU/l6vdXNejC7pZhPMWCDrMYJeXSMBF0Kcx0O3DpamARNDX3lnecOnG4NJUnE4NoziLy8rxPnWeR48+yX3pU1e8JpfLEJg4xoC3PXY9fMcQ9928G4CFdWprgt2pWSqV8F+caIRN7FTeZm6Cxz7+CeKOMo7iLJ7ZM+wcO7H4t+0yIlY4b4Ggwyz98budKpGAi+6we0OVDOtlMObjyL5uXJpC0O8h4FHRcxdQdu0EYMdkYvHvIOGQLeTCGPHUOKqrfbXO4XAYCXgtVeeFo9PrGk0R8jlxpxJ4C2lktwdffNemboKTyQKvqN189c7vpbJrH0UknJXShlrtZ2dnePrppxdVeVqJcN4CQYcZjPkY6vahKjKSZCubD3X7OpYYbybk+6Je+kIStUKSTKPKQ6pWGYz5iIXcqIpEOpOlZHjxRYexnNo1jrxxVLcHNTrMxcAIdcNc12iKul7DmDjJLUef5NZeFw/es2dTjrs5HgMsnC4vuizz7m9+ngf3RdZ93G9962Wee+45isXWj9cQzlsg2AJCPiexkJvb4t2MDoYI+To0EvYyYj0DAFzMNdrAazUmkwUm5grUDZNiIYdhqST33su4r7dtdljdMfSBA1jFPIaxPNF4reqOXDaNND1FD5Ab2rUpOy4/l6y5KfTt5TP3/wgv/Nnfr3vG0fz8PJqm4W1DyEnUea+CEBoQ3Ag0nfdM2m7CkarVZQ6sWMjilyEAnAgM0C5RQGPXHuSuPtRKmVqtAlxydqtVdzSnf87MpMG1E6JjzBy+k/gm7Fh6Lr1uUsdFKRijkEuRy5XXVedtmiYLCyl27x5py1hZsfIWCG5g/IEwXq+f6eQMdUCq1ShcTNL/2gsYpQLVaoWQz48M5DRvW22JOUCu6+iV5d3YK1V3LA1vVCtl6pqHsb33Mm9ursxy6blqdRNFVTFUFVOvIpVtu9Za551OpzEMg1gstimbVkM4b4HgBkaSJPqHdlEzDc4D1KrEPve3dCWO4jr5OgBRv12DHZBa3Vu5nFvkAhIQGnub0IXTi4+vVN2x1IFWKiUwLbzATHFzNi49l2laKIqCJcnIuXnUs2dA19dc551K2fXh7XLeImwiENzgfOSD9/PZhdO8BYxUqxy68DIv9d1EvpzHUfXQPXMRgLjUXmGCQxEPkW89g1rMMDJ5GuU9tzO6e+XqjnxJ5+x0jvlMmWqlTBcgS5dq5TfK0vEYiizhUBVks0rFrGIB6onjeO+9E7hS57MZxqnWDLtdf8EOsWxWNm41hPMWCLaApTmVrcqvxIfDPHzHEJZlEY11cxx4T7lEf3KC4XyewMABdqVn6C/lODh1guijP8PGGs7XhtzTw3BqnGxqnI8A5af6Kf7ux1d8bjO8YRo6hlHHC5iKglPb+OTSJs1qnFjIjabKzE6fI9nVT23qLFIhv+JOYHmVil0pc2qsQNVyE4vF1juyZU0I5y0Q3IAsvWFIksSRO+/ieVnm+fkU77dM3k6NE0uN81G3l9h//CWMXR+m/MHH2mqTGeumB5gDMoBrIbXqc0eHQrx+ep5a1R4p4MNCdqg8dv/OltkT8jk5sCPMa2/6mc9qyMUMd5XGia6wE1gpDl4sFjGVMMFgkPn51pcKCuctEGwRD98xtG3G4B48eBMnVZXX8jnO6DUKwM1A8qO/iPeXf70jNowF+pg+/AjTngCfL+W4X3cQXuW5zVr58+fPgmXRV85xz9xp/C2ulR+M+djZ6yPz7VPsPfokOw5EWenbujwObpom5XIZvz/YNgFjkbAUCASoqsqHPR5652bJGQZ7ge8EdE9nGocmkwW+ERklfeguCoEoM94QT1uxq9ZV3/7iF3n/p34B/wuf44PH/o2R8uor9c0QCEUwHRqzgJRf+UZ7eUVMuVyyw1Gh9lXoCOctEAgAiCoKPwv8lmnww4AG6O7OOO/TExnQNLJH3sV8zzAFQK7Xr1qWt+trXyBTyrP/7FsE63WsFgkjX47PHwK3h4uA1BhZ+9QrEyTGL4kTXx4HLxYbykPD7dMmFc5bIBAAUPjd30MClvZ66p721nY3aYYdHKoDxaGRlSTkev2qZXm1XIYcMFKr4MqlsbT2dKnKskww2sOcLGOUiis+Z+nMGAkwagUCUooDu/vbYhOImLdAIGigP/Be9FtvY3p8nuMDB8h6AkyYQaLJQtvnrvg9DrLFGkgSmstDRZLQ9RrRq4xfXcg3BJObDzjbN2IgFIlhKgqzpSKr3c6aVSoAqTPHKMgVurraU+MNwnkLBIIGZl8/x/73v/L4VxPc9Lm/BCDjCXZE+mt0KLR4nlg0giUrVPMZbvvT34VP/Rl4l7vMx58+TWXnPUy7fFwo5RibOkHo5y/XSd84l5dvhiIxaqrKTKnIbiBTqJLMlNHrJg5FWiaVaFkWc3OzRCJRHI72CWuIsIlAIFjkWydmSRV1jg0e5HTPHkpWZ6S/loYdPB4vdZeD6IXX2POVfyR6y360L/7z4nMnkwWmptPMugMgyUjeEC/uvZdzR97TNvtC4S4sRWGmVF42uGul6YelQo5qtUp3d0/b7AHhvAUCQQO7QzBL3TA5N7SfM6O3osgSuWKtI9JfzbDDrfv6KXS7+caHPkJ9337kbIbgT/4o8sQ4YN9IlGKBHPb4KgdQina39QYTCEZQVJWZWnXV8zQfz6STAMRi7emsbCKct0AgAGzn0xQf1lUNvaHhmMpV2qqreTma5sQfCDOfzTD/zEvod94NgHr8GGAnN+uZFCbg8AYo+EKM3/u+tt1gHr5jiEfu3kG308VcrUa2WF3xefnG4wvztmBxf3/7kpUgnLdAIGjQFCe+nJpudlT6K1OoooZHqbqG+cKzJzj1kX8PgDw7A9jJzUrWnj8u74pz7rt/mJo/2PYbTL/bjaHXsepXDgnw/M9PEPvMpwFIJWeQZZne3r622iOct0AgAC6JE7s0BcO0qNVNCmWd3oi7Yyo/mUKVibkCTk8IJImpmXm+SZSx6DByY0DW6FCIUkNl3gp0sZCrMJcuky5U1y2WsB6GvV4w6lQLGRZyFfIlnYVchVyhilQuc/PzX+S9v/xDOJ57gu7uHjStfcpDIJy3QCBoMDoUIleqUakZKLKEpsr43A4kSWqrU1xKMmOvaj0+PwDZbBazK8axoYN4//gP8P+Hj7Hj479K4PnP4UNiQWuMq/U6kCVpTbJpG2XIH6ASGeLl41PUdPszqhsWqUyJnXPnGUmNU08cpev0UQYGBtpiw1JEqaBAIADshKHP5UBV7DWdIkv0R70EvBqnJzIdWX1XG1P5FEXF4/WTy+WoOlRyLtuZuz7/T5wBvIB7+DDO7iCWstyNtcvWgMeDOXCASiGHOyzjUGWiQTe7wg7S3jDVR7+L88feREom6e8fvPYBN4lw3gKBYBFVkYkEXBRKOh6XSsBrb/07UW0C4NSUxbGqgUCYan6W+fl5+u+7B+v1L5B9/At85Y2THDuVQhm8nWCxjscFLu2SK2uXrUZvH+5SFSolYqffYOfMBcbe/yEwZLKeAJbT4LxhgmEyONh+5y3CJgKBYJHVkn6dqjZ57P6d7O63QyH+YBhJgrm5OUZ+/AdIvX2OY/2jHMs7UWKDKJqTumGSK9ao1Optt7V+080MlnJouQzB09/Gl08TGjsN9TrBUg5ddXDBMOi2TPwN9aF2Ipy3QCBYZLWqkk5Vmyxt1nE4NAZ6oyilcfTSHJY/wLMvH8eyLMLhbjT1kvsqVS4573bZau7YwbunTuDKZWjOL3RMjjNxMcPBqROM6XXqksQeo71ycU2E8xYIBIs052TLsgRIBL0aR/atLEXWThtGB0Mc2hXlI48cwSmV+bd/+ypvvfUm58ancDqdBMIRHKpMwKuhKjKGYbXdVqN/kH2pcQ6/+VVKxQx1yySST7HHVWckNc7JUgEUhb2mCZbVFhuWImLeAoFgGSGfE5/bQXfYzYO3tT92ezV6enq46657+OY3v8ETT3wJhV727DlAqmTLnbk0tfGf0nZbjR07MYMh7m5Ite0FBnYe5Pgj76UOnMjl8Dk0RoBUvQ5tnGsCwnkLBIJtzrvf/QDRaBezsxcJ9+xmPC2RKi0XQ46F3O03xO2m8uEf4ub/+y/4GvAqMFIto+hVTgAV4EgwYIczdH17Ou94PB4E/jcQwJ7Z/suJROIbrTRMIBBsHd1hN/Hh1UTIOoskSRw6dBOHDt0EQHeywNR8EZBwaQqxkJuQr33jYJdy+kd+hrfmnMxVTSZnztKbniJQKfMcIDsc3Oq2byJSXafdgZONrrx/Gfi3RCLx3+PxeBz4e+C21pklEAgEK9OMiY8Ohnj4jiGeemWiI+edTBZ4NWly9js+RD6ZQXk2w1d8ETxH3yQM3DI0TKShtEOt/aWVG3Xefwo0p7Oo2DsGgUDwDuDyWdYCm6XTBB2ak50OF+crReYMJ7cAD95yG9Y3XgC2yco7Ho//JHD5lPOPJRKJV+LxeC92+OQXr3WccNiDqiobsxKIxfwbfu31injPNwbb8T37GmGIdti2lmNe6/xL/95OW5diSDJerxNNU1AUmYjmpKdSZKZ/Bz8OyLuG4C0PANGAE5bY0w7brum8E4nEXwN/ffnj8Xj8JuD/BX41kUh8/VrHSadLGzIQ7DeeTK6s2vxORbznG4Pt+p4LBXtj3Wrb1vp+r3X+pX9vl62Xo1gm2WKNWs3AMEwMRSFgGnRXS8hABo35mSJ7gNRMGtNjiw9v9jtezfFvNGF5APgH4MOJROLNDVslEAi2JVsdOlnP+Ttl61KptmjQTS7ax7zqo/vCBb58+BGGZB8u1XapUr1+tUO1hI3GvP8r4AI+YecrySYSicdaZpVAIBBsM5rNP1PzRbKFGrPRfvZOvECwnCfjDTFddrPHHWEU8P7B72OGGtU6e3fBT/0CSFJL7dmQ8xaOWiAQ3Ig0K11OT2ao7BjmlPogwaCHwT39oKqc7BnlAcD5xS9cepHLhfRDH8UKBFtqi2jSEQgE1x1bHdbJFmoUKzo51UcJjUDNJKDC2IE7+OdPP8m7DsQWnxvZO4Jltl6YQThvgUAgWAeZQpViRadumADUDZPp+SJ02SNtC31DGHuW3FyifmhDMlUMphIIBIJ1kMyU8biuXPcuZCudadNvIFbeAoFAsA6qNWNR/MFW/pFwOhS6gp1r0wfhvAUCgWBdNNV+XJqKx6USDbrZ2RfANC1OT2ao1gwcisToUKito3RF2EQgEAjWwUqhkVyxRqGiU6kZWEC2WGurGDII5y0QCATrIuRzMtTtw6UpNCcb+jwOAp4rK0qWzkNpNSJsIhAIBOugWab41CsTmKbF6GCISrWOuYJ6TjuFm8XKWyAQCDbJVgg3C+ctEAgEm2QrhJtF2EQgEAg2ydK5J9WaQdCrtb3aRDhvgUAg2CDx4fBiDLw59wToiHCzCJsIBALBdYhw3gKBQHAdIpy3QCAQXIeImLdAIBBsgK0eSytW3gKBQHAdIpy3QCAQXIcI5y0QCATXISLmLRAIBC2ik3FwsfIWCASC6xDhvAUCgeA6RDhvgUAguA4RzlsgEAiuQ4TzFggEgusQ4bwFAoHgOkQ4b4FAILgOEc5bIBAIrkOE8xYIBILrEMlaQfFYIBAIBNsbsfIWCASC6xDhvAUCgeA6RDhvgUAguA4RzlsgEAiuQ4TzFggEgusQ4bwFAoHgOkQ4b4FAILgO2dZKOvF4XAY+CdwMVIF/l0gkzmytVe0jHo87gL8BdgBO4D8nEol/2VKjOkQ8Hu8GXgPel0gkTm61Pe0mHo//n8B3AxrwyUQi8ddbbFJbaVzb/wv72jaAf/9O/p7j8fhdwB8kEokH4vH4HuD/ASzgGPBziUTC3Ow5tvvK+3sAVyKRuAf4TeCPt9iedvMjQCqRSLwL+ADw51tsT0do/LD/EihvtS2dIB6PPwDcC9wHvAfonHbW1vEooCYSiXuBjwO/v8X2tI14PP7rwKcBV+OhPwF+u/G7loDHWnGe7e687weeBEgkEi8DR7bWnLbzD8DvLPl3fasM6TB/BHwKmN5qQzrE+4G3gM8DXwT+dWvN6QinALWxmw4A+hbb007OAh9a8u/bga83/v8J4KFWnGS7O+8AkF3ybyMej2/rUM9mSCQShUQikY/H437gH4Hf3mqb2k08Hv8okEwkEl/Zals6SBf2QuQHgJ8G/i4ej0tba1LbKWCHTE4CfwX8jy21po0kEol/YvnNSUokEs05JHkg2IrzbHfnnQP8S/4tJxKJd/RqNB6PDwHPAJ9JJBKf3Wp7OsBPAO+Lx+PPArcAfxuPx3u31qS2kwK+kkgkaolEIgFUgNgW29Rufgn7Pe/FzmH9r3g87rrGa94pLI1v+4FMKw663Z33i9ixMuLx+N3YW813LPF4vAd4CviNRCLxN1ttTydIJBLvTiQS70kkEg8AbwA/lkgkZrbYrHbzAvBIPB6X4vF4P+DFdujvZNJc2kUvAA5A2TpzOsq3G3kOsHNZz7fioNs9BPF57FXZS9iB/o9tsT3t5j8BYeB34vF4M/b9gUQicUMk8m4UEonEv8bj8XcD38JeQP1cIpEwttisdvOnwN/E4/HnsSts/lMikShusU2d4leAv4rH4xrwNnZIdNOIkbACgUBwHbLdwyYCgUAgWAHhvAUCgeA6RDhvgUAguA4RzlsgEAiuQ4TzFggEgusQ4bwFAoHgOkQ4b4FAILgO+f8B7O/JaanP4C8AAAAASUVORK5CYII=\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from sklearn.ensemble import RandomForestRegressor\n", + "forest = RandomForestRegressor(200)\n", + "forest.fit(x[:, None], y)\n", + "\n", + "xfit = np.linspace(0, 10, 1000)\n", + "yfit = forest.predict(xfit[:, None])\n", + "ytrue = model(xfit, sigma=0)\n", + "\n", + "plt.errorbar(x, y, 0.3, fmt='o', alpha=0.5)\n", + "plt.plot(xfit, yfit, '-r');\n", + "plt.plot(xfit, ytrue, '-k', alpha=0.5);" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "Here the true model is shown in the smooth gray curve, while the random forest model is shown by the jagged red curve.\n", + "\n", + "As you can see, the non-parametric random forest model is flexible enough to fit the multi-period data, without us needing to specifying a multi-period model!" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Example: Random Forest for Classifying Digits\n", + "\n", + "Earlier we took a quick look at the hand-written digits data (see [Introducing Scikit-Learn](05.02-Introducing-Scikit-Learn.ipynb)).\n", + "\n", + "Let's use that again here to see how the random forest classifier can be used in this context." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-21T09:33:28.977941Z", + "start_time": "2018-05-21T09:33:28.852002Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "dict_keys(['images', 'data', 'DESCR', 'target_names', 'target'])" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from sklearn.datasets import load_digits\n", + "digits = load_digits()\n", + "digits.keys()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "To remind us what we're looking at, we'll visualize the first few data points:" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-21T09:33:38.130046Z", + "start_time": "2018-05-21T09:33:36.539685Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# set up the figure\n", + "fig = plt.figure(figsize=(6, 6)) # figure size in inches\n", + "fig.subplots_adjust(left=0, right=1, bottom=0, top=1, hspace=0.05, wspace=0.05)\n", + "\n", + "# plot the digits: each image is 8x8 pixels\n", + "for i in range(64):\n", + " ax = fig.add_subplot(8, 8, i + 1, xticks=[], yticks=[])\n", + " ax.imshow(digits.images[i], cmap=plt.cm.binary, interpolation='nearest')\n", + " \n", + " # label the image with the target value\n", + " ax.text(0, 7, str(digits.target[i]))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "We can quickly classify the digits using a random forest as follows:" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-21T09:33:55.884986Z", + "start_time": "2018-05-21T09:33:53.297093Z" + }, + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [], + "source": [ + "from sklearn.cross_validation import train_test_split\n", + "\n", + "Xtrain, Xtest, ytrain, ytest = train_test_split(digits.data, digits.target,\n", + " random_state=0)\n", + "model = RandomForestClassifier(n_estimators=1000)\n", + "model.fit(Xtrain, ytrain)\n", + "ypred = model.predict(Xtest)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "We can take a look at the classification report for this classifier:" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-21T09:34:14.349847Z", + "start_time": "2018-05-21T09:34:14.344599Z" + }, + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " precision recall f1-score support\n", + "\n", + " 0 1.00 0.97 0.99 38\n", + " 1 0.98 0.95 0.97 44\n", + " 2 0.95 1.00 0.98 42\n", + " 3 0.98 0.98 0.98 45\n", + " 4 0.97 1.00 0.99 37\n", + " 5 0.98 0.96 0.97 49\n", + " 6 1.00 1.00 1.00 52\n", + " 7 1.00 0.96 0.98 50\n", + " 8 0.94 0.98 0.96 46\n", + " 9 0.98 0.98 0.98 47\n", + "\n", + "avg / total 0.98 0.98 0.98 450\n", + "\n" + ] + } + ], + "source": [ + "from sklearn import metrics\n", + "print(metrics.classification_report(ypred, ytest))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "And for good measure, plot the confusion matrix:" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-21T09:34:33.359550Z", + "start_time": "2018-05-21T09:34:33.001144Z" + }, + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAQUAAAEFCAYAAADqlvKRAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAH2dJREFUeJzt3Xu8VXP+x/HXPqfaXXX5VSiXCB/MSIzkmhiJcZsplXEnkTvNMNRozMREmQxFyDm5yy0lpEK6MGWYXEKfUkojikIXdTq33x9rn5xlOufszv5+O/tbn+fj0SN7n/Z7f6xOn7P2Wuv7WYnS0lKMMaZMTk0XYIzJLtYUjDEx1hSMMTHWFIwxMdYUjDExtWq6gM1Z+6duzk+JNLlrtutIAGrl5HrJLSop9pJrTJmijV8mNve87SkYY2KsKRhjYqwpGGNirCkYY2KsKRhjYqwpGGNirCkYY2Ky8jqFCiVySHa/jJwWraGkmA3PjqDOiWeT07BJ9OWmLSleOp+CJ4dVLz6RYMTwwRzYbn8KCgq4pO/1LFy42Fn5HTq057bbbuKEE3o5yfNVr4/ckGoNLdd1pvc9BRFx9h65+x0CwPqR/dk4ZQzJUy6k4MlhrH9wIOsfu4PSDevYOGF0tfNPP/1E6tZNclSn0+g/YDBDhwx0VTr9+vVl5MghJJNJZ5m+6vWRG1KtoeW6zvSypyAiewLDgEOAolRj+Ai4TlXnVze3+JN3KJ73LgCJJi0oXfv9pq/V6XImhW+/Quma76pd91FHHMqkyVMBmP3Of/jVwe2qnfVzixYtoVevS8jP/6ezTF/1+sgNqdbQcl1n+tpTeAgYrKq7qGobVd0NGARU/8d4mZISkj2vInn6xRR99C8AEg0ak7vXARS9OzWj6EY7NGT1D2s2PS4uLiE3181lzOPGTaSoqMhJVhlf9frIDanW0HJdZ/pqCnVVNbbYQFVnuQoveGY4Pw69kmT3y6F2ktwDDqdozgwoLckod83qtTRs1HDT45ycHIqLs3cNgq96feSGVGtoua4zfTWFD0QkX0R6ikhXETlDRPKBDzMJrXXQMdTu3A2A0sKCqAmUllBr73YU65yMi37rX//mpBOPA6DjoQczd+6nGWf65KteH7kh1RparutMX2cfLgd+CxwF7ACsBl4CXsgktGjuLJI9r6TepYMgtxYFE/KhqJBEi1aUrPo646LHjZvI8b/uxIxp40kkEvTuc13GmT75qtdHbki1hpbrOjORjYNbbem0LZ02/tnSaWNMWqwpGGNirCkYY2KsKRhjYqwpGGNirCkYY2Ky8pRkrTqtnRe1ZtS5riMBaHrpk15y7ZRkeHycnvb5fWCnJI0xabGmYIyJsaZgjImxpmCMibGmYIyJsaZgjIkJtikkEgnuHXE7M6e/yOtTnqVt2zYZ5a1aV0DX4a/y+bdrmLf8ey58dDq9H5/BZU+9xcq1G5zU3KFDeyZPftpJFrjfBj5zQ6rVZy5k//dBsE3B5bDKwuISBk2cQ7J2tDmGTv6QP3VtR945R/NracXoWdUeK7mJDW4Np1afuSF8HwTbFFwOqxz2+lx6HLwHLRrWA+D23x3KvjtGY+OLSkqpUyvzi1LKBre6tD0PFw01N4Tvg2CbgqthleM/XEKz+nU4Ys8dNz3XomFdAN7/70qefm8h53TYK+N6bXBrOLX6zA3h+yCsm8GU42pY5fgPlpAAZi3+Bl3+A3+e8B539ziM9774lofeUob3PIJmDdzt6rm0PQ8XDTXXhyAGt4rIVBF5+2e//iUib7t6D1fDKvPP7UTeuZ3IO+doZMfG3Hrqr5i9eAVj3l3EQ+cczS5NG7gq2bntebhoqLk+hDK49UZgFPA7wO2+UoqvwZrFpaXcMflDdtqhPv2ej+Y6/mq35lzeaT8n+S5tz8NFQ831IZjBrSJyPfCZqm7xBGdbJWmrJEO0rayS9HZMQVWH+so2xvgT7NkHY4wf1hSMMTHWFIwxMdYUjDEx1hSMMTHbzeBWX3yd6mzU5zEvucaUscGtxpi0WFMwxsRYUzDGxFhTMMbEWFMwxsRYUzDGxFhTMMbEBNsUQpk47HNKdEiTjEOqNbRcm+acEsLEYd9TokOaZBxSraHlBj3NWUScDTsMYeKw7ynRIU0yDqnW0HKDmOYsIqeKyBIR+UxEepX70kRX75HtE4e3xpTokCYZh1RraLmhTHMeABwEJIBnRaSuqj6SeuxEtk8c3hpTokOaZBxSraHlBjHNGdioqqtUdSVwOnCliBwLOFvolO0Th7fGlOiQJhmHVGtouaFMc14sIsOAm1V1jYh0AyYBTVy9QUgTh8HPlOiQJhmHVGtouUFMcxaRWsA5wDOq+mPquR2Bm1T12qpeb0unbem08W+rTnNW1SLg4Z89txyosiEYY2pWsNcpGGP8sKZgjImxpmCMibGmYIyJsaZgjImxac5Zas2z13jJbdTjbi+5Ztu5waztKRhjYqwpGGNirCkYY2KsKRhjYqwpGGNirCkYY2KsKRhjYoJtCiFMxfWZu2rterreNobPV3y/6blX5izkvBEvZpy9vW9bn7kAHTq0Z/Lkp53lBTnNWUTqiUgdl5khTMX1lVtYXMKg598iWfuni2XmLVvJuH+rk9FW2/O29Z3br19fRo4cQjLpbIax81ornKcgIp0qe6GqTq/ktXsAdwFfA88BDwHFInKNqr5UzVpjQpiK6yt32Euz6XHYvuRN/QCA79dt4J5X/s31px7G356fmXX1+soMMXfRoiX06nUJ+fn/dJIH7mutbMjKXyv5WilwXCVfHw38BWhD1BT2ATYQTXN20hQqmmCbycBKH5muc8e/O59mDetyhOxC3tQPKC4p5ZbnZvDHUw+L7TlkS70+M0PMHTduIrvvvktGGT/nutYKm4KqHlutxFSuqk4DponIsaq6AkBEijLIjAlhKq6P3PH/nk+CBLMWLEOXraLHXWNp3bQRt73wFhuLilm0/HuGvDiLG047LCvq9ZkZYq4PW32as4jsLiJTRGSBiOwkIm+ISJsqXqYi8pCI5KjqBamcG4k+TjgRwlRcH7n5l51C3mUnk9f3ZKRVM8b+oTsv3diTvL4nc/tZx7Lnjk0yagiu6/WZGWKuDzUxzfkBYChwB7AceAp4FKjsmEMf4FRVLSn33H+Be6pZ5/8IYSqu71xfbNuG9Xe21ac5i8i7qnqIiMxR1YNSz72vqu0zeudK2NJpWzodou1p6fR6EdmF1I1cROQooMBhbcaYLJLOx4friM4YtBWR94FmQA+vVRljakyVTUFV3xWRDkSnFXOip3Sj98qMMTUinbMPjYHbiQ4ujgJuFpH6vgszxtSMdI4p5AHFwAXApUAj4EGPNRljalA6xxT2UtUzyj2+VkQ+9FWQMaZmpdMUVESOUNW3AUTkQGCB37KMr1OH31/X0Xlmk7tmO88Mkc/Th1tTZQuiPic6DVkPOENE5hF9jNgPawrGbLMq21PovLWKMMZkj8oWRC0BEJEk8BugIZAAcoE9ADcLzI0xWSWdYwpPAU2BvYAZwLFA5ov2jTFZKZ1Tku2IZie8AAwBjiSak2CM2Qal0xRWqGopMA9op6qLAKej1Ywx2SOdjw9zRWQ4MBJ4QkRaER1bMMZsg9JpCpcBR6jqJyIyEDgeOMtvWVVLJBKMGD6YA9vtT0FBAZf0vZ6FCxdnXWYwuYkckt0vI6dFaygpZsOzI6hz4tnkNGwSfblpS4qXzqfgyWE1X6vles2s8OODiHRKDW89Ekik/vsH4HmilZJpEZGW1a6uEjZx2G1u7n6HALB+ZH82ThlD8pQLKXhyGOsfHMj6x+6gdMM6Nk4YnRW1Wq7fTOeDW0Vkn5899aiInAegqvO3rLyK2cRht7nFn7xD8bx3AUg0aUHp2p/uJ1Gny5kUvv0KpWu+y4paLddvpo/Bra8BPwLLiI49CNFIt6omQG8RmzjsIbekhGTPq6j1i45seHwoAIkGjcnd64CM9hK81Gq53jJ93AzmEOATYHCqsbyvqseqqrOGADZx2FduwTPD+XHolSS7Xw61k+QecDhFc2ZAaUnVL97KtVqun0znTSE1zr0ncLKI9HedX8YmDrvNrXXQMdTu3A2A0sKCqAmUllBr73YU65ysqtVy/Wamc/Zhi6lqEdES6wvwdGs6mzjsNrdo7iySPa+k3qWDILcWBRPyoaiQRItWlKzKfDJ/CNsg1NytNs1ZRKZCxbcmdP1xoDyb5uyPLZ02ZSqa5lzZnsItqd/7AOuBR4Ai4PdEy6mNMdugys4+TAMQkTtVtUO5L80SkXe9V2aMqRHpfN6vV/7aAxE5AKjtryRjTE1K50BjP+BNEfmSqIm0JPoIYYzZBqVz34fJqRvKHkB04PHD1NkFY8w2KJ37PjQF7iW6yexi4MHUc8aYbVA6Hx9GAZOBQ4G1wFfA48DJHutyzsfNPyG8Cb4+Th+unV69lZNVadipn5fckPj6vq1MOgca91DVB4ESVd2oqgOAXTzXZYypIek0haLUrePK7jq9N5DZhfDGmKyVzseHvwBvAruJyDjgcOAin0UZY2pOOmcfXk1drNSRaLz7pUD1F9YbY7JalU1BRP6lqocDL6ce5wAfEJ2iNMZsYyq7bdwbpO4SJSIl/LQ4qhh40XtlxpgaUeGBRlU9TlVzgOGqmqOqualfdX52F+oakUgkuHfE7cyc/iKvT3mWtm3bOMvu0KE9kyc/7SzPV62h5K5cvZYTrruTz5d9ww33PUPvwfn0HpzPSX8Yxg33PZNVtYaaC+6+b9M5+/CQiIwBEJH9RGS6iEjG75whX4M1+/Xry8iRQ0gmk07yIKwhoK5zC4uKGTR6Asna0XKZIZf3JO+mi7jr6t/TqH5drj/rpKypNeRcl9+36TSFUUTLplHVT4FBQF66byAiOSLSOnUswhlfgzUXLVpCr16XOMkqE9IQUNe5w8ZMosdxh9CyaaPY8/e98AZnHt+RFk0aVfDKrV9ryLkuv2/T+YfaQFUnlj1Q1SlAg8peICJ5qd87AvOBsUQ3lTksg1pjKhpWmalx4yZSVOR2aYevWrM9d/yMOTRtVJ8jD9g79vzK1WuZ/fEiTj/6oKypNfRcl9+36VynsEJE+hJd2gxwJrC8itfskfr9NuAkVV2QurPUU8Ax1ar0Z3wN1vQhpCGgLnPHTf8PiQTM/mQR+sXXDHhwLPdcexavv/cpvzm8Hbk5me88Zvs22Fq5LqXzt3IhcArRmocviNY8XJxmfrGqLgBQ1WVpvl9afA3W9CGkIaAuc0cP6E1+/97k3XQRsttO3HZJN5o3acSsjxdyVLu9qw7YirWGnutSOhcvfUHUFLZEExF5D2ggIr2BJ4B/AEu2vMTN8zVY04eQhoD6zC2z+Ktvad3CzULb0LZBCN+3lQ1ufUlVTxGRz9nMAFdV3bOyYBFJAgcS3RhmPtGl0XmqWlhVUT4Gt9oqSX9slaQ/PldJbtjwxRYPbu2T+r1zdd5QVQuAd8o9dX91cowxW1dlTaFLFZcjPOq4FmNMFqisKZTdS7ItsBfwCtGI9xOBj7GmYMw2qbIR7xfCppvCtFPVb1OPmwLjtk55xpitLZ1ThK2AVeUerwN29lOOMaampXPx0svAFBEZS3Rr+Z6Au9VCxpisUuEpyfJEpDvRWYhS4DVV9bp02u4laQDWL5vhJbdeq6O95IamontJpnuF4ddEBxevB753VZQxJvukc9+Ha4Bbie4U1QB4QET+6LswY0zNSGdP4QKgK7BOVVcBHbDBrcZss9JpCsWqurHc4w1EI9mMMdugdJrCNBG5k2hx02+J5jO+7rcsY0xNSacpXA8sIJrgfB7RlY12TMGYbVQ61ylMVNWuwAO+izHG1Lx0mkJ9EdlVVZd6r2YLJBIJRgwfzIHt9qegoIBL+l7PwoWLsy7Tcv1knnHBFTRsGE0F3GXnnTil67EMf/BRatWqRbOmjfn7zX+kXt26WVOvz1zXmek0hebAYhFZAawnuqqxtKp5Cr6Vn4rb8dCDGTpkIN26Z3ZSxEem5brPLCiIjns/PGLIpudOOfNiHr5vKM2bNeWukaN5fsIkzulxelbU6zvXdWY6TeHEaqeniEhzYKWqOrtS0cdU3NAm+IaU6zJTP1vEhg0F9Lm2P8XFJVxz6fmMHjGE5s2iaU7FxcUk69TOmnp957rOTKcpLAOuAI4jWjr9ClWMeBeRC4FdgZeAJ4lOY9YXkctV9bWMKk6paCpuJkMwfWRarvvMunWTXHBWd7qfeiJLln5J3z/czEtPPQTAa9Pe4p3/fMhVfc6rdq2u6/Wd6zoznabwEFCP6P4POURnIH4JXFvJay4nWivxInCaqs5PTXMeDzhpCj6m4oY2wTekXJeZbXZtzW67tCKRSNBmt11o0ngHvlm5iilTZzL5zZk8MGwQyWSdrKnXd67rzHROSXZU1Z6qOkFVxwM9gBOqeE2hqq4D1gCLYNM0Z2cfH3xMxQ1tgm9IuS4zx748maHDRwGw4puVrFv3Iy+8PJn3PpjLQ3f/naZNGmdVvb5zXWdWuUpSRCYCV6nqZ6nHOwOPqmqXSl5zI3A4MBf4FTCJ6NjEHFW9saqi0lklWXbEtd0B+22aiqu6sKqXbfVMy61+ZkWrJAsLCxlw2zC+Wr6CBAmuuuQ8+lw7gP33aUud1B7Cib/uxJm/2/wQ8nRWSW7r2xYqXiWZTlN4jegf+HSiYwpHEd0D4muIbkRbweuOIVoz0RxYCcxU1ZerrBRbOm0itnTar4qaQjrHFAb97PGd6byhqk4DpqXzZ40x2SOdm8HYP2xjtiNO7wRtjAmfNQVjTIw1BWNMjDUFY0xMWtOctzY7JemPjxuWhnaT3bXv+JkC0OSwy51n+ty2mU5zNsZsJ6wpGGNirCkYY2KsKRhjYqwpGGNirCkYY2KsKRhjYoJtColEgntH3M7M6S/y+pRnadu2TVZmhpgL0KFDeyZPftpZXkjbYOUPazjh8r/x+ZfLmbf4S84ZcDfnDxzOwJFjKCkpyTg/27etl6YgIjv4yC2v/ATb/gMGM3TIwKzMDDG3X7++jBw5hGQy6SQPwtkGhUXFDBr13KbBr/c/N5lLzziBR/52FYWFRUyfk9lUoxC2ra89ha9FpLenbCCMqbih5i5atIRevS5xklUmlG0w7PEJ9Dj+cFo2jUa67dumNT+s/ZHS0lLWbSigdm5mV4SGsG19NYUPgINE5I3UBCbnKppgm22ZIeaOGzeRoqKijHPKC2EbjH/zHZo2asCR7ffd9NzuOzfnjtEv8Nt+d7Dyh7Ucsn/bjOoNYdumM3mpOtar6pUicghwk4jcSzTFeZGq3uPiDUKYihtqrg8hbINxU/9NIgGz5y5AF3/JgHufQhcv4+k7+rHXrjsxZtJM/vHYi/Tv3T3jul2qiWnO1ZEAUNV3VbU7cCTRnaozm7tdTghTcUPN9SGEbTD6r1eQf8sV5P3lcqRNa2674vfssmMzGtaLPv+3aNqY1evWO6nbJdfb1teewsPlH6jqD8CE1C8nxo2byPG/7sSMaeM3TbDNxswQc30IdRv85dKe/Onux8nNzaF2rVwGXtLTab4LrreBLZ3eztjSaVs6vSnblk4bY9JhTcEYE2NNwRgTY03BGBNjTcEYE2NNwRgTY6cks5SPU4cQ3unDkKyZcJPzzEanDnaeWcZOSRpj0mJNwRgTY03BGBNjTcEYE2NNwRgTY03BGBNjTcEYExNsU7Bpzj/J9unAvjJDy1215ke6DhzN58tX8enSFXS5OZ/e94yl9z1jmfSf+VlTq68hKzEiUgfIVVVnY2vKT7DteOjBDB0ykG7dL8q6TJ+5EE0HPuusbqxb96OTPLBt6yO3sLiYQU9PJVk7+if36dJvOPfY9px33MFZV6uvEe/7iMhzIvKkiBwGzAU+FpFert7DpjlHQpgO7CszpNxh496ix5G/pEXjBgB8unQFMz5ewkV3P88tT77Oug0bs6ZWXx8fRgH3A88DLwHHAgcA17p6A5vmHAlhOrCvzFByx8/+lGYN63HEfrtveu4Xu+/IdacfSf413Wn9fzvwwKvvZEWt4K8p1FLV14CxwEpV/VJV1wGFrt7Apjn7Y9vWbe74WZ8wa94X9L5nLPrlN/z5sSkctf/u7L9bSwCOa9eWef/9JitqBX9NYbGIjAGeBdaKyG0icgPwlas3sGnO/ti2dZubf0138q7pTt7V3ZDWLbj13C5cO+plPlryNQDvzF/Kfru2zIpawd+BxvOB3wDzgbXAdcCPgJuja9g0Z59s2/r/OxvQszODn51G7Vq5NN+hPjf3Oq7aWTbNeTthS6fDY0unjTHbJGsKxpgYawrGmBhrCsaYGGsKxpgYawrGmBg7JWkyZqdP/VkzeZC37HqdL7JTksaYqllTMMbEWFMwxsRYUzDGxFhTMMbEWFMwxsQE2xRsuGh4uRDGkNmQcletXkfXG+/j869Xsmr1Oq6973kuGvoE5w95nKXffFetzGCbQvlhlf0HDGbokIFZmWm5P+nXry8jRw4hmUw6yYPwtoHL3MLiYgY9MWnTMNi7xr7JSYfuT/71Z3Pl6Ufz+derqpXrvSmIyGYvkMiUDRcNLzeUIbOh5A57bio9OrWnRZNoFNv7C79kxXdruPSuMbwy+xM67LNrtXJ9TXNuKyKvisgSYKOIzEpNdt7J1XvYcNHwckMZMhtC7vi3P6JZw/oc8Ys9Nz331bc/0Kh+XR647kx2arYDoyfNrlaNvvYU7gWuVtXdgaOBKcA/gDxXb2DDRcPL9SG0beAqd/xbHzLr08X0/seT6NIV/Hn0y+TkJOh84N4AHNNuLz5OzYDcUr6aQmNVnQ+gqrOAI1X1PaCpqzew4aLh5foQ2jZwlZt//dnk/fEs8v5wFrJrS2698GQ6tWvLzLkLAXhvwVLa7ty8Wtm+BrcuEpH7gYnAKcD7ItINWOfqDWy4aHi5PoS2DXxu235nHMdfH5vIM9Pm0KheksG9T6tWjpdVkqnbxPUB9gfeB/KBDsACVV1Z1ettlWRYbJWkPzWxStLLnoKqbiQ6rlDeLB/vZYxxK9jrFIwxflhTMMbEWFMwxsRYUzDGxFhTMMbEWFMwxsRk5TRnY0zNsT0FY0yMNQVjTIw1BWNMjDUFY0yMNQVjTIw1BWNMjDUFY0yMryEr3olIDnAfcCBQAFysqp85yu4I3KGqnR3l1SaaKdEGSAK3quqLDnJzgVGAAMXAhaq6MNPcVHZL4D2gi6rOc5GZyp0D/JB6+LmqXugg8ybgNKAOcJ+qZjz2T0QuAC5IPawLtAd2UtXvM8ytDTxC9L1QDPTJdPuKSBIYDewJrAauUNUF1c0LeU/ht0BdVT0cuJFoBmTGROQG4CGibwRXzgFWqurRwEnACEe5pwKo6pHAQGCYi9DUN+4DwHoXeeVy6wKoaufULxcNoTNwBHAkcAxQvRHGP6OqD5fVSdQcr860IaT8BqilqkcAfwNuc5DZB1irqocBV5Hh91fITeEo4FXYNAfyEEe5C4FujrLKPAvcXO6xk5HGqjoOKJuZvjuw3EUucCdwP7DMUV6ZA4H6IjJZRN4QkcMcZHYFPgJeACYALznI3EREDgF+oaoPOoqcD9RK7enuABQ6yNyfaPQhqqrAfpmEhdwUduCn3VCAYhHJ+OOQqj6Pm7+o8plrVXWNiDQCngP+7DC7SEQeAYansjOS2m3+RlUnZZq1GT8SNZyuQF/gCQd/Z82JfiD0KJfp8l4j/YG/OsxbS/TRYR7RR797HGS+D5wiIolUo22d+mhZLSE3hdVAo3KPc1TV7U0FHBKRXYGpwGOq+qTLbFU9H9gHGCUiDTKMuwjoIiJvEn2OftTh/TrmA4+ramlq2vdKYOcMM1cCk1R1Y+qn5AagRYaZAIhIE2BfVZ3qIi/lOqJ69yHac3qk7GNVBvKJ/j1MJfpI+Z6qVnvAZchN4S2iz2ekuuNHNVtOxURkR2Ay8CdVzXeYe27qIBtEP4VLiA5eVZuqdlLVY1Kfpd8HzlPV6t1A4H9dROrYj4i0Itrb+yrDzJnAiamfkq2ABkSNwoVOwGuOssp8x097uKuA2kCmk287ADNTf2cvAIsyCQv27APR/3wXEXkbSAAZH7TyqD/RPS9uFpGyYwsnqWqmB/LGAqNFZDrRN9e1qrohw0yf8oCHRWQmUApclOnenaq+JCKdgHeIfshdkclPyZ8RMvwHthl3AfkiMoPobEl/Vc301gcLgEEi8kfge6B3JmG2dNoYExPyxwdjjAfWFIwxMdYUjDEx1hSMMTHWFIwxMdYUtiMi0lhEXvCQ20ZEFlfxZ24RkVtcZho/rClsX5oCB9V0ESa7hXzxktly9wCtUnsL1xEtKPuWaDXkE0BnVb0AIHWZ8y2q+qaI3Aj0JLrybhLRlZmbvcBFRH5JtA6jIdASGKyq96e+fKiIzE597UFVvTv1mv/Jd/z/bbaA7SlsX64Glqnq71KPBThHVbtU9AIRORH4FdGltAcBrYGzK3mPi4nmRXQAjgWGlvvazsBxwOHAlSLSvhr5xjPbU9i+rVDVxVX8meOBjkQzBQDqAV9U8uf/QLQW4SbgAKK9gjJjyi7pFZEJ/DT/YHP5M9P/3zAuWVPYvpVfe1FKtIakTO3U77nAP1V1GGxaOVjZeoVniBb9TADGAL8v97Xyr8shWqJeUX7zLf2fMW7Yx4ftSxEV/yD4FtgvtdpwD6Bd6vk3gHNFpGFq9sE44IxK3qMLMFBVxxNNmSobGwdwhogkRaQpcArRUt8tzTeeWVPYviwHvhCRzc0HeA1YCihwN6ndd1WdADwPzAbmEi2nfqSS97gFmCkinwBHA4uBPVJfW0K05H0m8HdV/bQa+cYzWyVpjImxPQVjTIw1BWNMjDUFY0yMNQVjTIw1BWNMjDUFY0yMNQVjTMz/A2721T1JQo71AAAAAElFTkSuQmCC\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from sklearn.metrics import confusion_matrix\n", + "mat = confusion_matrix(ytest, ypred)\n", + "sns.heatmap(mat.T, square=True, annot=True, fmt='d', cbar=False)\n", + "plt.xlabel('true label')\n", + "plt.ylabel('predicted label');" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "We find that a simple, untuned random forest results in a very accurate classification of the digits data." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Summary of Random Forests\n", + "\n", + "This section contained a brief introduction to the concept of *ensemble estimators*, and in particular the random forest – an ensemble of randomized decision trees.\n", + "Random forests are a powerful method with several advantages:\n", + "\n", + "- Both training and prediction are very fast, because of the simplicity of the underlying decision trees. \n", + " - In addition, both tasks can be straightforwardly parallelized, because the individual trees are entirely independent entities.\n", + "- The multiple trees allow for a probabilistic classification: \n", + " - a majority vote among estimators gives an estimate of the probability (accessed in Scikit-Learn with the ``predict_proba()`` method).\n", + "- The nonparametric model is extremely flexible, and can thus perform well on tasks that are under-fit by other estimators.\n", + "\n", + "A primary disadvantage of random forests is that the results are not easily interpretable: \n", + "- if you would like to draw conclusions about the *meaning* of the classification model, random forests may not be the best choice." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "\n", + "< [In-Depth: Support Vector Machines](05.07-Support-Vector-Machines.ipynb) | [Contents](Index.ipynb) | [In Depth: Principal Component Analysis](05.09-Principal-Component-Analysis.ipynb) >" + ] + } + ], + "metadata": { + "anaconda-cloud": {}, + "celltoolbar": "Slideshow", + "kernelspec": { + "display_name": "Python [default]", + "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.4" + }, + "latex_envs": { + "LaTeX_envs_menu_present": true, + "autoclose": false, + "autocomplete": true, + "bibliofile": "biblio.bib", + "cite_by": "apalike", + "current_citInitial": 1, + "eqLabelWithNumbers": true, + "eqNumInitial": 1, + "hotkeys": { + "equation": "Ctrl-E", + "itemize": "Ctrl-I" + }, + "labels_anchors": false, + "latex_user_defs": false, + "report_style_numbering": false, + "user_envs_cfg": false + }, + "toc": { + "base_numbering": 1, + "nav_menu": {}, + "number_sections": false, + "sideBar": true, + "skip_h1_title": false, + "title_cell": "Table of Contents", + "title_sidebar": "Contents", + "toc_cell": false, + "toc_position": {}, + "toc_section_display": true, + "toc_window_display": false + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/code/.ipynb_checkpoints/09.09-machine-learning-summary-checkpoint.ipynb b/code/.ipynb_checkpoints/09.09-machine-learning-summary-checkpoint.ipynb new file mode 100644 index 0000000..285bad0 --- /dev/null +++ b/code/.ipynb_checkpoints/09.09-machine-learning-summary-checkpoint.ipynb @@ -0,0 +1,3055 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "***\n", + "***\n", + "# 计算传播与机器学习\n", + "\n", + "***\n", + "***\n", + "\n", + "王成军\n", + "\n", + "wangchengjun@nju.edu.cn\n", + "\n", + "计算传播网 http://computational-communication.com" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "![](./img/machine.jpg)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "## 1、 监督式学习\n", + "\n", + "工作机制:\n", + "- 这个算法由一个目标变量或结果变量(或因变量)组成。\n", + "- 这些变量由已知的一系列预示变量(自变量)预测而来。\n", + "- 利用这一系列变量,我们生成一个将输入值映射到期望输出值的函数。\n", + "- 这个训练过程会一直持续,直到模型在训练数据上获得期望的精确度。\n", + "- 监督式学习的例子有:回归、决策树、随机森林、K – 近邻算法、逻辑回归等。" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "## 2、非监督式学习\n", + "\n", + "工作机制:\n", + "- 在这个算法中,没有任何目标变量或结果变量要预测或估计。\n", + "- 这个算法用在不同的组内聚类分析。\n", + "- 这种分析方式被广泛地用来细分客户,根据干预的方式分为不同的用户组。\n", + "- 非监督式学习的例子有:关联算法和 K–均值算法。" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "## 3、强化学习\n", + "\n", + "工作机制:\n", + "- 这个算法训练机器进行决策。\n", + "- 它是这样工作的:机器被放在一个能让它通过反复试错来训练自己的环境中。\n", + "- 机器从过去的经验中进行学习,并且尝试利用了解最透彻的知识作出精确的商业判断。 \n", + "- 强化学习的例子有马尔可夫决策过程。alphago\n", + "\n", + "> Chess. Here, the agent decides upon a series of moves depending on the state of the board (the environment), and the\n", + "reward can be defined as win or lose at the end of the game:" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "- 线性回归\n", + "- 逻辑回归\n", + "- 决策树\n", + "- SVM\n", + "- 朴素贝叶斯\n", + "---\n", + "- K最近邻算法\n", + "- K均值算法\n", + "- 随机森林算法\n", + "- 降维算法\n", + "- Gradient Boost 和 Adaboost 算法\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "> # 使用sklearn做线性回归\n", + "***\n", + "\n", + "王成军\n", + "\n", + "wangchengjun@nju.edu.cn\n", + "\n", + "计算传播网 http://computational-communication.com" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "# 线性回归\n", + "- 通常用于估计连续性变量的实际数值(房价、呼叫次数、总销售额等)。\n", + "- 通过拟合最佳直线来建立自变量X和因变量Y的关系。\n", + "- 这条最佳直线叫做回归线,并且用 $Y= \\beta *X + C$ 这条线性等式来表示。\n", + "- 系数 $\\beta$ 和 C 可以通过最小二乘法获得" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "ExecuteTime": { + "end_time": "2019-04-22T08:22:22.109042Z", + "start_time": "2019-04-22T08:22:20.811040Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "import sklearn\n", + "from sklearn import datasets\n", + "from sklearn import linear_model\n", + "import matplotlib.pyplot as plt\n", + "from sklearn.metrics import classification_report\n", + "from sklearn.preprocessing import scale" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "ExecuteTime": { + "end_time": "2019-04-22T08:22:24.400103Z", + "start_time": "2019-04-22T08:22:24.390296Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [], + "source": [ + "# boston data\n", + "boston = datasets.load_boston()\n", + "y = boston.target\n", + "X = boston.data" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "ExecuteTime": { + "end_time": "2019-04-22T08:22:25.362696Z", + "start_time": "2019-04-22T08:22:25.356162Z" + }, + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array(['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD',\n", + " 'TAX', 'PTRATIO', 'B', 'LSTAT'], dtype='|t| [0.025 0.975]\n", + "-----------------------------------------------------------------------------------\n", + "Intercept 36.4595 5.103 7.144 0.000 26.432 46.487\n", + "boston.data[0] -0.1080 0.033 -3.287 0.001 -0.173 -0.043\n", + "boston.data[1] 0.0464 0.014 3.382 0.001 0.019 0.073\n", + "boston.data[2] 0.0206 0.061 0.334 0.738 -0.100 0.141\n", + "boston.data[3] 2.6867 0.862 3.118 0.002 0.994 4.380\n", + "boston.data[4] -17.7666 3.820 -4.651 0.000 -25.272 -10.262\n", + "boston.data[5] 3.8099 0.418 9.116 0.000 2.989 4.631\n", + "boston.data[6] 0.0007 0.013 0.052 0.958 -0.025 0.027\n", + "boston.data[7] -1.4756 0.199 -7.398 0.000 -1.867 -1.084\n", + "boston.data[8] 0.3060 0.066 4.613 0.000 0.176 0.436\n", + "boston.data[9] -0.0123 0.004 -3.280 0.001 -0.020 -0.005\n", + "boston.data[10] -0.9527 0.131 -7.283 0.000 -1.210 -0.696\n", + "boston.data[11] 0.0093 0.003 3.467 0.001 0.004 0.015\n", + "boston.data[12] -0.5248 0.051 -10.347 0.000 -0.624 -0.425\n", + "==============================================================================\n", + "Omnibus: 178.041 Durbin-Watson: 1.078\n", + "Prob(Omnibus): 0.000 Jarque-Bera (JB): 783.126\n", + "Skew: 1.521 Prob(JB): 8.84e-171\n", + "Kurtosis: 8.281 Cond. No. 1.51e+04\n", + "==============================================================================\n", + "\n", + "Warnings:\n", + "[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.\n", + "[2] The condition number is large, 1.51e+04. This might indicate that there are\n", + "strong multicollinearity or other numerical problems.\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "import statsmodels.api as sm\n", + "import statsmodels.formula.api as smf\n", + "\n", + "# Fit regression model (using the natural log of one of the regressors)\n", + "results = smf.ols('boston.target ~ boston.data', data=boston).fit()\n", + "\n", + "print(results.summary())" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "ExecuteTime": { + "end_time": "2019-04-22T08:22:29.198868Z", + "start_time": "2019-04-22T08:22:29.179869Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [], + "source": [ + "regr = linear_model.LinearRegression()\n", + "lm = regr.fit(boston.data, y)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "ExecuteTime": { + "end_time": "2019-04-22T08:22:30.210025Z", + "start_time": "2019-04-22T08:22:30.203639Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(36.45948838508965,\n", + " array([-1.08011358e-01, 4.64204584e-02, 2.05586264e-02, 2.68673382e+00,\n", + " -1.77666112e+01, 3.80986521e+00, 6.92224640e-04, -1.47556685e+00,\n", + " 3.06049479e-01, -1.23345939e-02, -9.52747232e-01, 9.31168327e-03,\n", + " -5.24758378e-01]),\n", + " 0.7406426641094095)" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "lm.intercept_, lm.coef_, lm.score(boston.data, y)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "ExecuteTime": { + "end_time": "2019-04-22T08:22:31.110418Z", + "start_time": "2019-04-22T08:22:31.107129Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [], + "source": [ + "predicted = regr.predict(boston.data)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "ExecuteTime": { + "end_time": "2019-04-22T08:22:32.479326Z", + "start_time": "2019-04-22T08:22:31.916490Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig, ax = plt.subplots()\n", + "ax.scatter(y, predicted)\n", + "ax.plot([y.min(), y.max()], [y.min(), y.max()], 'k--', lw=4)\n", + "ax.set_xlabel('$Measured$', fontsize = 20)\n", + "ax.set_ylabel('$Predicted$', fontsize = 20)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## 训练集和测试集" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "ExecuteTime": { + "end_time": "2019-04-22T08:22:36.365683Z", + "start_time": "2019-04-22T08:22:36.360788Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[6.3200e-03, 1.8000e+01, 2.3100e+00, ..., 1.5300e+01, 3.9690e+02,\n", + " 4.9800e+00],\n", + " [2.7310e-02, 0.0000e+00, 7.0700e+00, ..., 1.7800e+01, 3.9690e+02,\n", + " 9.1400e+00],\n", + " [2.7290e-02, 0.0000e+00, 7.0700e+00, ..., 1.7800e+01, 3.9283e+02,\n", + " 4.0300e+00],\n", + " ...,\n", + " [6.0760e-02, 0.0000e+00, 1.1930e+01, ..., 2.1000e+01, 3.9690e+02,\n", + " 5.6400e+00],\n", + " [1.0959e-01, 0.0000e+00, 1.1930e+01, ..., 2.1000e+01, 3.9345e+02,\n", + " 6.4800e+00],\n", + " [4.7410e-02, 0.0000e+00, 1.1930e+01, ..., 2.1000e+01, 3.9690e+02,\n", + " 7.8800e+00]])" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "boston.data" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "ExecuteTime": { + "end_time": "2019-04-22T08:22:48.265456Z", + "start_time": "2019-04-22T08:22:48.261247Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [], + "source": [ + "from sklearn.model_selection import train_test_split\n", + "Xs_train, Xs_test, y_train, y_test = train_test_split(boston.data,\n", + " boston.target, \n", + " test_size=0.2, \n", + " random_state=42)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "ExecuteTime": { + "end_time": "2019-04-22T08:22:51.873960Z", + "start_time": "2019-04-22T08:22:51.869286Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [], + "source": [ + "regr = linear_model.LinearRegression()\n", + "lm = regr.fit(Xs_train, y_train)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "ExecuteTime": { + "end_time": "2019-04-22T08:22:52.561738Z", + "start_time": "2019-04-22T08:22:52.555669Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(30.24675099392396,\n", + " array([-1.13055924e-01, 3.01104641e-02, 4.03807204e-02, 2.78443820e+00,\n", + " -1.72026334e+01, 4.43883520e+00, -6.29636221e-03, -1.44786537e+00,\n", + " 2.62429736e-01, -1.06467863e-02, -9.15456240e-01, 1.23513347e-02,\n", + " -5.08571424e-01]),\n", + " 0.7508856358979673)" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "lm.intercept_, lm.coef_, lm.score(Xs_train, y_train)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "ExecuteTime": { + "end_time": "2019-04-22T08:22:53.518402Z", + "start_time": "2019-04-22T08:22:53.515220Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [], + "source": [ + "predicted = regr.predict(Xs_test)" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "ExecuteTime": { + "end_time": "2019-04-22T08:22:54.585839Z", + "start_time": "2019-04-22T08:22:54.380438Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig, ax = plt.subplots()\n", + "ax.scatter(y_test, predicted)\n", + "ax.plot([y.min(), y.max()], [y.min(), y.max()], 'k--', lw=4)\n", + "ax.set_xlabel('$Measured$', fontsize = 20)\n", + "ax.set_ylabel('$Predicted$', fontsize = 20)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "# 交叉验证" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "# cross-validation \n", + " \n", + "k-fold CV, the training set is split into k smaller sets (other approaches are described below, but generally follow the same principles). The following procedure is followed for each of the k “folds”:\n", + "- A model is trained using k-1 of the folds as training data;\n", + "- the resulting model is validated on the remaining part of the data (i.e., it is used as a test set to compute a performance measure such as accuracy)." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "ExecuteTime": { + "end_time": "2019-04-22T08:23:06.421218Z", + "start_time": "2019-04-22T08:23:06.407755Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "-1.5841985220997412" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from sklearn.model_selection import cross_val_score\n", + "\n", + "regr = linear_model.LinearRegression()\n", + "scores = cross_val_score(regr, boston.data , boston.target, cv = 3)\n", + "scores.mean() " + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "ExecuteTime": { + "end_time": "2019-04-22T08:24:03.323654Z", + "start_time": "2019-04-22T08:24:01.612164Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "scores = [cross_val_score(regr, boston.data,\\\n", + " boston.target,\\\n", + " cv = int(i)).mean() \\\n", + " for i in range(3, 50)]\n", + "plt.plot(range(3, 50), scores,'r-o')\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "ExecuteTime": { + "end_time": "2019-04-22T08:24:34.174960Z", + "start_time": "2019-04-22T08:24:34.155764Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0.45059442471362826" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data_X_scale = scale(boston.data)\n", + "scores = cross_val_score(regr,data_X_scale, boston.target,\\\n", + " cv = 7)\n", + "scores.mean() " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "# 使用天涯bbs数据" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "ExecuteTime": { + "end_time": "2019-04-22T08:24:46.198546Z", + "start_time": "2019-04-22T08:24:46.171912Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
titlelinkauthorauthor_pageclickreplytime
0【民间语文第161期】宁波px启示:船进港湾人应上岸/post-free-2849477-1.shtml贾也http://www.tianya.cn/5049945019467527032012-10-29 07:59
1宁波镇海PX项目引发群体上访 当地政府发布说明(转载)/post-free-2839539-1.shtml无上卫士ABChttp://www.tianya.cn/743418358824410412012-10-24 12:41
\n", + "
" + ], + "text/plain": [ + " title link author \\\n", + "0 【民间语文第161期】宁波px启示:船进港湾人应上岸 /post-free-2849477-1.shtml 贾也 \n", + "1 宁波镇海PX项目引发群体上访 当地政府发布说明(转载) /post-free-2839539-1.shtml 无上卫士ABC \n", + "\n", + " author_page click reply time \n", + "0 http://www.tianya.cn/50499450 194675 2703 2012-10-29 07:59 \n", + "1 http://www.tianya.cn/74341835 88244 1041 2012-10-24 12:41 " + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import pandas as pd\n", + "\n", + "df = pd.read_csv('../data/tianya_bbs_threads_list.txt', sep = \"\\t\", header=None)\n", + "df=df.rename(columns = {0:'title', 1:'link', 2:'author',3:'author_page', 4:'click', 5:'reply', 6:'time'})\n", + "df[:2]" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "ExecuteTime": { + "end_time": "2019-04-22T08:24:47.185301Z", + "start_time": "2019-04-22T08:24:47.169337Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [], + "source": [ + "# 定义这个函数的目的是让读者感受到:\n", + "# 抽取不同的样本,得到的结果完全不同。\n", + "def randomSplit(dataX, dataY, num):\n", + " dataX_train = []\n", + " dataX_test = []\n", + " dataY_train = []\n", + " dataY_test = []\n", + " import random\n", + " test_index = random.sample(range(len(df)), num)\n", + " for k in range(len(dataX)):\n", + " if k in test_index:\n", + " dataX_test.append([dataX[k]])\n", + " dataY_test.append(dataY[k])\n", + " else:\n", + " dataX_train.append([dataX[k]])\n", + " dataY_train.append(dataY[k])\n", + " return dataX_train, dataX_test, dataY_train, dataY_test, " + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "ExecuteTime": { + "end_time": "2019-04-22T08:24:48.122580Z", + "start_time": "2019-04-22T08:24:48.081523Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Variance score: 0.42\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "\n", + "# Use only one feature\n", + "data_X = df.reply\n", + "# Split the data into training/testing sets\n", + "data_X_train, data_X_test, data_y_train, data_y_test = randomSplit(np.log(df.click+1), \n", + " np.log(df.reply+1), 20)\n", + "# Create linear regression object\n", + "regr = linear_model.LinearRegression()\n", + "# Train the model using the training sets\n", + "regr.fit(data_X_train, data_y_train)\n", + "# Explained variance score: 1 is perfect prediction\n", + "print('Variance score: %.2f' % regr.score(data_X_test, data_y_test))" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "ExecuteTime": { + "end_time": "2019-04-22T08:24:49.133689Z", + "start_time": "2019-04-22T08:24:49.129343Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[[12.179091917198399], [11.387872315966666], [11.323941765302724]]" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data_X_train[:3]\n" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "ExecuteTime": { + "end_time": "2019-04-22T08:24:50.276495Z", + "start_time": "2019-04-22T08:24:50.273286Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [], + "source": [ + "y_true, y_pred = data_y_test, regr.predict(data_X_test)" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "ExecuteTime": { + "end_time": "2019-04-22T08:24:51.151351Z", + "start_time": "2019-04-22T08:24:50.992991Z" + }, + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.scatter(y_pred, y_true, color='black')\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "ExecuteTime": { + "end_time": "2019-04-22T08:24:52.301659Z", + "start_time": "2019-04-22T08:24:52.130224Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Plot outputs\n", + "plt.scatter(data_X_test, data_y_test, color='black')\n", + "plt.plot(data_X_test, regr.predict(data_X_test), color='blue', linewidth=3)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "ExecuteTime": { + "end_time": "2019-04-22T08:24:53.326537Z", + "start_time": "2019-04-22T08:24:53.321437Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "('Coefficients: \\n', array([0.68623605]))" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# The coefficients\n", + "'Coefficients: \\n', regr.coef_" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "ExecuteTime": { + "end_time": "2019-04-22T08:24:55.007412Z", + "start_time": "2019-04-22T08:24:55.002637Z" + }, + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "'Residual sum of squares: 0.98'" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# The mean square error\n", + "\"Residual sum of squares: %.2f\" % np.mean((regr.predict(data_X_test) - data_y_test) ** 2)" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": { + "ExecuteTime": { + "end_time": "2019-04-22T08:24:55.875656Z", + "start_time": "2019-04-22T08:24:55.846855Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/datalab/Applications/anaconda/lib/python3.5/site-packages/ipykernel/__main__.py:1: UserWarning: Pandas doesn't allow columns to be created via a new attribute name - see https://pandas.pydata.org/pandas-docs/stable/indexing.html#attribute-access\n", + " if __name__ == '__main__':\n", + "/Users/datalab/Applications/anaconda/lib/python3.5/site-packages/ipykernel/__main__.py:2: UserWarning: Pandas doesn't allow columns to be created via a new attribute name - see https://pandas.pydata.org/pandas-docs/stable/indexing.html#attribute-access\n", + " from ipykernel import kernelapp as app\n" + ] + } + ], + "source": [ + "df.click_log = [[np.log(df.click[i]+1)] for i in range(len(df))]\n", + "df.reply_log = [[np.log(df.reply[i]+1)] for i in range(len(df))]" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": { + "ExecuteTime": { + "end_time": "2019-04-22T08:25:13.823742Z", + "start_time": "2019-04-22T08:25:13.811227Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "'Variance score: 0.62'" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from sklearn.model_selection import train_test_split\n", + "Xs_train, Xs_test, y_train, y_test = train_test_split(df.click_log, df.reply_log,test_size=0.2, random_state=0)\n", + "\n", + "# Create linear regression object\n", + "regr = linear_model.LinearRegression()\n", + "# Train the model using the training sets\n", + "regr.fit(Xs_train, y_train)\n", + "# Explained variance score: 1 is perfect prediction\n", + "'Variance score: %.2f' % regr.score(Xs_test, y_test)" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": { + "ExecuteTime": { + "end_time": "2019-04-22T08:25:18.210290Z", + "start_time": "2019-04-22T08:25:18.010690Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Plot outputs\n", + "plt.scatter(Xs_test, y_test, color='black')\n", + "plt.plot(Xs_test, regr.predict(Xs_test), color='blue', linewidth=3)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": { + "ExecuteTime": { + "end_time": "2019-04-22T08:25:26.241798Z", + "start_time": "2019-04-22T08:25:26.227633Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "-0.6837007391943056" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from sklearn.model_selection import cross_val_score\n", + "\n", + "regr = linear_model.LinearRegression()\n", + "scores = cross_val_score(regr, df.click_log, \\\n", + " df.reply_log, cv = 3)\n", + "scores.mean() " + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": { + "ExecuteTime": { + "end_time": "2019-04-22T08:25:30.245410Z", + "start_time": "2019-04-22T08:25:30.227128Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "-0.7188149722820985" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "regr = linear_model.LinearRegression()\n", + "scores = cross_val_score(regr, df.click_log, \n", + " df.reply_log, cv =5)\n", + "scores.mean() " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "> # 使用sklearn做logistic回归\n", + "***\n", + "\n", + "王成军\n", + "\n", + "wangchengjun@nju.edu.cn\n", + "\n", + "计算传播网 http://computational-communication.com" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "- logistic回归是一个分类算法而不是一个回归算法。\n", + "- 可根据已知的一系列因变量估计离散数值(比方说二进制数值 0 或 1 ,是或否,真或假)。\n", + "- 简单来说,它通过将数据拟合进一个逻辑函数(logistic function)来预估一个事件出现的概率。\n", + "- 因此,它也被叫做逻辑回归。因为它预估的是概率,所以它的输出值大小在 0 和 1 之间(正如所预计的一样)。" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "$$odds= \\frac{p}{1-p} = \\frac{probability\\: of\\: event\\: occurrence} {probability \\:of \\:not\\: event\\: occurrence}$$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "$$ln(odds)= ln(\\frac{p}{1-p})$$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "$$logit(x) = ln(\\frac{p}{1-p}) = b_0+b_1X_1+b_2X_2+b_3X_3....+b_kX_k$$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "![](./img/logistic.jpg)" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": { + "ExecuteTime": { + "end_time": "2018-04-29T07:46:50.277195Z", + "start_time": "2018-04-29T07:46:50.272229Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [], + "source": [ + "repost = []\n", + "for i in df.title:\n", + " if u'转载' in i:\n", + " repost.append(1)\n", + " else:\n", + " repost.append(0)" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": { + "ExecuteTime": { + "end_time": "2018-04-29T07:47:06.292994Z", + "start_time": "2018-04-29T07:47:06.270715Z" + }, + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[[194675, 2703], [88244, 1041], [82779, 625]]" + ] + }, + "execution_count": 51, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data_X = [[df.click[i], df.reply[i]] for i in range(len(df))]\n", + "data_X[:3]" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": { + "ExecuteTime": { + "end_time": "2018-04-29T07:47:45.269303Z", + "start_time": "2018-04-29T07:47:45.259792Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0.61241970021413272" + ] + }, + "execution_count": 52, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from sklearn.linear_model import LogisticRegression\n", + "df['repost'] = repost\n", + "model = LogisticRegression()\n", + "model.fit(data_X,df.repost)\n", + "model.score(data_X,df.repost)" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": { + "ExecuteTime": { + "end_time": "2018-04-29T07:47:59.648431Z", + "start_time": "2018-04-29T07:47:59.633936Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [], + "source": [ + "def randomSplitLogistic(dataX, dataY, num):\n", + " dataX_train = []\n", + " dataX_test = []\n", + " dataY_train = []\n", + " dataY_test = []\n", + " import random\n", + " test_index = random.sample(range(len(df)), num)\n", + " for k in range(len(dataX)):\n", + " if k in test_index:\n", + " dataX_test.append(dataX[k])\n", + " dataY_test.append(dataY[k])\n", + " else:\n", + " dataX_train.append(dataX[k])\n", + " dataY_train.append(dataY[k])\n", + " return dataX_train, dataX_test, dataY_train, dataY_test, " + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": { + "ExecuteTime": { + "end_time": "2018-04-29T07:48:27.726443Z", + "start_time": "2018-04-29T07:48:27.710922Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "'Variance score: 0.45'" + ] + }, + "execution_count": 54, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Split the data into training/testing sets\n", + "data_X_train, data_X_test, data_y_train, data_y_test = randomSplitLogistic(data_X, df.repost, 20)\n", + "# Create logistic regression object\n", + "log_regr = LogisticRegression()\n", + "# Train the model using the training sets\n", + "log_regr.fit(data_X_train, data_y_train)\n", + "# Explained variance score: 1 is perfect prediction\n", + "'Variance score: %.2f' % log_regr.score(data_X_test, data_y_test)" + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "metadata": { + "ExecuteTime": { + "end_time": "2018-04-29T07:48:56.873331Z", + "start_time": "2018-04-29T07:48:56.870219Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [], + "source": [ + "y_true, y_pred = data_y_test, log_regr.predict(data_X_test)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": { + "ExecuteTime": { + "end_time": "2018-04-29T07:39:12.344043Z", + "start_time": "2018-04-29T07:39:12.338223Z" + }, + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "([1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],\n", + " array([0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]))" + ] + }, + "execution_count": 43, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "y_true, y_pred" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": { + "ExecuteTime": { + "end_time": "2018-04-29T07:39:13.175680Z", + "start_time": "2018-04-29T07:39:13.171386Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " precision recall f1-score support\n", + "\n", + " 0 0.50 0.17 0.25 6\n", + " 1 0.72 0.93 0.81 14\n", + "\n", + "avg / total 0.66 0.70 0.64 20\n", + "\n" + ] + } + ], + "source": [ + "print(classification_report(y_true, y_pred))" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "metadata": { + "ExecuteTime": { + "end_time": "2018-04-29T07:51:43.039620Z", + "start_time": "2018-04-29T07:51:43.034812Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [], + "source": [ + "from sklearn.cross_validation import train_test_split\n", + "Xs_train, Xs_test, y_train, y_test = train_test_split(data_X, df.repost, test_size=0.2, random_state=42)" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": { + "ExecuteTime": { + "end_time": "2018-04-29T07:51:47.690742Z", + "start_time": "2018-04-29T07:51:47.683127Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "'Variance score: 0.60'" + ] + }, + "execution_count": 57, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Create logistic regression object\n", + "log_regr = LogisticRegression()\n", + "# Train the model using the training sets\n", + "log_regr.fit(Xs_train, y_train)\n", + "# Explained variance score: 1 is perfect prediction\n", + "'Variance score: %.2f' % log_regr.score(Xs_test, y_test)" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": { + "ExecuteTime": { + "end_time": "2018-04-29T07:51:55.780061Z", + "start_time": "2018-04-29T07:51:55.771924Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Logistic score for test set: 0.595745\n", + "Logistic score for training set: 0.613941\n", + " precision recall f1-score support\n", + "\n", + " 0 1.00 0.03 0.05 39\n", + " 1 0.59 1.00 0.74 55\n", + "\n", + "avg / total 0.76 0.60 0.46 94\n", + "\n" + ] + } + ], + "source": [ + "print('Logistic score for test set: %f' % log_regr.score(Xs_test, y_test))\n", + "print('Logistic score for training set: %f' % log_regr.score(Xs_train, y_train))\n", + "y_true, y_pred = y_test, log_regr.predict(Xs_test)\n", + "print(classification_report(y_true, y_pred))" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": { + "ExecuteTime": { + "end_time": "2018-04-29T07:52:53.880925Z", + "start_time": "2018-04-29T07:52:53.866672Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0.53333333333333333" + ] + }, + "execution_count": 59, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "logre = LogisticRegression()\n", + "scores = cross_val_score(logre, data_X, df.repost, cv = 3)\n", + "scores.mean() " + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "metadata": { + "ExecuteTime": { + "end_time": "2018-04-29T07:53:26.825100Z", + "start_time": "2018-04-29T07:53:26.810871Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0.62948717948717947" + ] + }, + "execution_count": 60, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "logre = LogisticRegression()\n", + "data_X_scale = scale(data_X)\n", + "# The importance of preprocessing in data science and the machine learning pipeline I: \n", + "scores = cross_val_score(logre, data_X_scale, df.repost, cv = 3)\n", + "scores.mean() " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "> # 使用sklearn实现贝叶斯预测\n", + "***\n", + "\n", + "王成军\n", + "\n", + "wangchengjun@nju.edu.cn\n", + "\n", + "计算传播网 http://computational-communication.com" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "# Naive Bayes algorithm\n", + "\n", + "It is a classification technique based on Bayes’ Theorem with an assumption of independence among predictors. \n", + "\n", + "In simple terms, a Naive Bayes classifier assumes that the presence of a particular feature in a class is unrelated to the presence of any other feature. \n", + "\n", + "why it is known as ‘Naive’? For example, a fruit may be considered to be an apple if it is red, round, and about 3 inches in diameter. Even if these features depend on each other or upon the existence of the other features, all of these properties independently contribute to the probability that this fruit is an apple." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "贝叶斯定理为使用$p(c)$, $p(x)$, $p(x|c)$ 计算后验概率$P(c|x)$提供了方法:" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "$$\n", + "p(c|x) = \\frac{p(x|c) p(c)}{p(x)}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- P(c|x) is the posterior probability of class (c, target) given predictor (x, attributes).\n", + "- P(c) is the prior probability of class.\n", + "- P(x|c) is the likelihood which is the probability of predictor given class.\n", + "- P(x) is the prior probability of predictor." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "![](./img/Bayes_41.png)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "Step 1: Convert the data set into a frequency table\n", + "\n", + "Step 2: Create Likelihood table by finding the probabilities like:\n", + "- p(Overcast) = 0.29, p(rainy) = 0.36, p(sunny) = 0.36\n", + "- p(playing) = 0.64, p(rest) = 0.36\n", + "\n", + "Step 3: Now, use Naive Bayesian equation to calculate the posterior probability for each class. The class with the highest posterior probability is the outcome of prediction." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "## Problem: Players will play if weather is sunny. Is this statement is correct?\n", + "\n", + "We can solve it using above discussed method of posterior probability.\n", + "\n", + "$P(Yes | Sunny) = \\frac{P( Sunny | Yes) * P(Yes) } {P (Sunny)}$\n", + "\n", + "Here we have P (Sunny |Yes) = 3/9 = 0.33, P(Sunny) = 5/14 = 0.36, P( Yes)= 9/14 = 0.64\n", + "\n", + "Now, $P (No | Sunny) = \\frac{0.33 * 0.64}{0.36} = 0.60$, which has higher probability.\n", + "\n", + "$P(No | Sunny) = \\frac{P( Sunny | No) * P(No) } {P (Sunny)}$\n", + "\n", + "Here we have P (Sunny |No) = 2/5 = 0.4, P(Sunny) = 5/14 = 0.36, P( No)= 5/14 = 0.36\n", + "\n", + "Now, $P (Yes | Sunny) = \\frac{0.4 * 0.36}{0.36} = 0.4$, which has lower probability.\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "'ABCMeta BaseDiscreteNB BaseEstimator BaseNB BernoulliNB ClassifierMixin GaussianNB LabelBinarizer MultinomialNB __all__ __builtins__ __doc__ __file__ __name__ __package__ _check_partial_fit_first_call abstractmethod binarize check_X_y check_array check_is_fitted in1d issparse label_binarize logsumexp np safe_sparse_dot six'" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from sklearn import naive_bayes\n", + "' '.join(dir(naive_bayes)) " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- naive_bayes.GaussianNB\tGaussian Naive Bayes (GaussianNB)\n", + "- naive_bayes.MultinomialNB([alpha, ...])\tNaive Bayes classifier for multinomial models\n", + "- naive_bayes.BernoulliNB([alpha, binarize, ...])\tNaive Bayes classifier for multivariate Bernoulli models." + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "metadata": { + "ExecuteTime": { + "end_time": "2018-04-29T08:02:37.644606Z", + "start_time": "2018-04-29T08:02:37.635952Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [], + "source": [ + "#Import Library of Gaussian Naive Bayes model\n", + "from sklearn.naive_bayes import GaussianNB\n", + "import numpy as np\n", + "\n", + "#assigning predictor and target variables\n", + "x= np.array([[-3,7],[1,5], [1,2], [-2,0], [2,3], [-4,0], [-1,1], [1,1], [-2,2], [2,7], [-4,1], [-2,7]])\n", + "Y = np.array([3, 3, 3, 3, 4, 3, 3, 4, 3, 4, 4, 4])" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": { + "ExecuteTime": { + "end_time": "2018-04-29T08:02:52.828101Z", + "start_time": "2018-04-29T08:02:52.818463Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([4, 3])" + ] + }, + "execution_count": 62, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#Create a Gaussian Classifier\n", + "model = GaussianNB()\n", + "\n", + "# Train the model using the training sets \n", + "model.fit(x[:8], Y[:8])\n", + "\n", + "#Predict Output \n", + "predicted= model.predict([[1,2],[3,4]])\n", + "predicted" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "# cross-validation \n", + " \n", + "k-fold CV, the training set is split into k smaller sets (other approaches are described below, but generally follow the same principles). The following procedure is followed for each of the k “folds”:\n", + "- A model is trained using k-1 of the folds as training data;\n", + "- the resulting model is validated on the remaining part of the data (i.e., it is used as a test set to compute a performance measure such as accuracy)." + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": { + "ExecuteTime": { + "end_time": "2018-04-29T08:04:04.297675Z", + "start_time": "2018-04-29T08:04:04.273413Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([41, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 0])" + ] + }, + "execution_count": 63, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data_X_train, data_X_test, data_y_train, data_y_test = randomSplit(df.click, df.reply, 20)\n", + "# Train the model using the training sets \n", + "model.fit(data_X_train, data_y_train)\n", + "\n", + "#Predict Output \n", + "predicted= model.predict(data_X_test)\n", + "predicted" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": { + "ExecuteTime": { + "end_time": "2018-04-29T08:04:34.184513Z", + "start_time": "2018-04-29T08:04:34.178511Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0.65000000000000002" + ] + }, + "execution_count": 64, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model.score(data_X_test, data_y_test)" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "metadata": { + "ExecuteTime": { + "end_time": "2018-04-29T08:05:04.297453Z", + "start_time": "2018-04-29T08:05:04.249311Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/datalab/Applications/anaconda/lib/python3.5/site-packages/sklearn/cross_validation.py:516: Warning: The least populated class in y has only 1 members, which is too few. The minimum number of labels for any class cannot be less than n_folds=7.\n", + " % (min_labels, self.n_folds)), Warning)\n" + ] + }, + { + "data": { + "text/plain": [ + "0.53413410073295453" + ] + }, + "execution_count": 66, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from sklearn.cross_validation import cross_val_score\n", + "\n", + "model = GaussianNB()\n", + "scores = cross_val_score(model, [[c] for c in df.click],\\\n", + " df.reply, cv = 7)\n", + "scores.mean() " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "> # 使用sklearn实现决策树\n", + "***\n", + "\n", + "王成军\n", + "\n", + "wangchengjun@nju.edu.cn\n", + "\n", + "计算传播网 http://computational-communication.com" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "# 决策树\n", + "- 这个监督式学习算法通常被用于分类问题。\n", + "- 它同时适用于分类变量和连续因变量。\n", + "- 在这个算法中,我们将总体分成两个或更多的同类群。\n", + "- 这是根据最重要的属性或者自变量来分成尽可能不同的组别。\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "![](./img/tree.png)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "![](./img/playtree.jpg)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "## 在上图中你可以看到,根据多种属性,人群被分成了不同的四个小组,来判断 “他们会不会去玩”。\n", + "### 为了把总体分成不同组别,需要用到许多技术,比如说 Gini、Information Gain、Chi-square、entropy。" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "metadata": { + "ExecuteTime": { + "end_time": "2018-04-29T08:10:20.871345Z", + "start_time": "2018-04-29T08:10:20.855125Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [], + "source": [ + "from sklearn import tree\n", + "model = tree.DecisionTreeClassifier(criterion='gini')" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "metadata": { + "ExecuteTime": { + "end_time": "2018-04-29T08:10:49.988277Z", + "start_time": "2018-04-29T08:10:49.973060Z" + }, + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0.91275167785234901" + ] + }, + "execution_count": 68, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data_X_train, data_X_test, data_y_train, data_y_test = randomSplitLogistic(data_X, df.repost, 20)\n", + "model.fit(data_X_train,data_y_train)\n", + "model.score(data_X_train,data_y_train)" + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "metadata": { + "ExecuteTime": { + "end_time": "2018-04-29T08:11:12.730866Z", + "start_time": "2018-04-29T08:11:12.725782Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0])" + ] + }, + "execution_count": 69, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Predict\n", + "model.predict(data_X_test)" + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "metadata": { + "ExecuteTime": { + "end_time": "2018-04-29T08:11:28.411441Z", + "start_time": "2018-04-29T08:11:28.397481Z" + }, + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0.33461538461538459" + ] + }, + "execution_count": 70, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# crossvalidation\n", + "scores = cross_val_score(model, data_X, df.repost, cv = 3)\n", + "scores.mean() " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "> # 使用sklearn实现SVM支持向量机\n", + "***\n", + "\n", + "王成军\n", + "\n", + "wangchengjun@nju.edu.cn\n", + "\n", + "计算传播网 http://computational-communication.com" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "![](./img/svm.jpg)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "- 将每个数据在N维空间中用点标出(N是你所有的特征总数),每个特征的值是一个坐标的值。\n", + " - 举个例子,如果我们只有身高和头发长度两个特征,我们会在二维空间中标出这两个变量,每个点有两个坐标(这些坐标叫做支持向量)。" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "![](./img/xyplot.png)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "- 现在,我们会找到将两组不同数据分开的一条直线。\n", + " - 两个分组中距离最近的两个点到这条线的距离同时最优化。" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "![](./img/sumintro.png)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "## 上面示例中的黑线将数据分类优化成两个小组\n", + "- 两组中距离最近的点(图中A、B点)到达黑线的距离满足最优条件。\n", + " - 这条直线就是我们的分割线。接下来,测试数据落到直线的哪一边,我们就将它分到哪一类去。" + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "metadata": { + "ExecuteTime": { + "end_time": "2018-04-29T08:17:29.788250Z", + "start_time": "2018-04-29T08:17:29.785022Z" + } + }, + "outputs": [], + "source": [ + "from sklearn import svm\n", + "# Create SVM classification object \n", + "model=svm.SVC() " + ] + }, + { + "cell_type": "code", + "execution_count": 72, + "metadata": { + "ExecuteTime": { + "end_time": "2018-04-29T08:17:31.035310Z", + "start_time": "2018-04-29T08:17:31.030713Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "'LinearSVC LinearSVR NuSVC NuSVR OneClassSVM SVC SVR __all__ __builtins__ __cached__ __doc__ __file__ __loader__ __name__ __package__ __path__ __spec__ base bounds classes l1_min_c liblinear libsvm libsvm_sparse'" + ] + }, + "execution_count": 72, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "' '.join(dir(svm))" + ] + }, + { + "cell_type": "code", + "execution_count": 73, + "metadata": { + "ExecuteTime": { + "end_time": "2018-04-29T08:17:41.872379Z", + "start_time": "2018-04-29T08:17:41.849759Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0.90380313199105144" + ] + }, + "execution_count": 73, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data_X_train, data_X_test, data_y_train, data_y_test = randomSplitLogistic(data_X, df.repost, 20)\n", + "model.fit(data_X_train,data_y_train)\n", + "model.score(data_X_train,data_y_train)" + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "metadata": { + "ExecuteTime": { + "end_time": "2018-04-29T08:17:47.661313Z", + "start_time": "2018-04-29T08:17:47.655841Z" + }, + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1])" + ] + }, + "execution_count": 74, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Predict\n", + "model.predict(data_X_test)" + ] + }, + { + "cell_type": "code", + "execution_count": 75, + "metadata": { + "ExecuteTime": { + "end_time": "2018-04-29T08:18:00.419986Z", + "start_time": "2018-04-29T08:17:58.671257Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [], + "source": [ + "# crossvalidation\n", + "scores = []\n", + "cvs = [3, 5, 10, 25, 50, 75, 100]\n", + "for i in cvs:\n", + " score = cross_val_score(model, data_X, df.repost,\n", + " cv = i)\n", + " scores.append(score.mean() ) # Try to tune cv\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 76, + "metadata": { + "ExecuteTime": { + "end_time": "2018-04-29T08:18:05.493658Z", + "start_time": "2018-04-29T08:18:05.359658Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(cvs, scores, 'b-o')\n", + "plt.xlabel('$cv$', fontsize = 20)\n", + "plt.ylabel('$Score$', fontsize = 20)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "\n", + "\n", + "> # 泰坦尼克号数据分析\n", + "\n", + "王成军\n", + "\n", + "wangchengjun@nju.edu.cn\n", + "\n", + "计算传播网 http://computational-communication.com" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-29T07:31:28.492497Z", + "start_time": "2018-05-29T07:31:28.488728Z" + }, + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "from sklearn import tree\n", + "import warnings \n", + "warnings.filterwarnings(\"ignore\") \n" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": { + "ExecuteTime": { + "end_time": "2018-06-06T07:02:49.855926Z", + "start_time": "2018-06-06T07:02:49.705773Z" + }, + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [], + "source": [ + "import pandas as pd\n", + "train = pd.read_csv('../data/tatanic_train.csv', \n", + " sep = \",\")" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": { + "ExecuteTime": { + "end_time": "2018-06-06T07:02:52.803564Z", + "start_time": "2018-06-06T07:02:52.759733Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Unnamed: 0PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
00103Braund, Mr. Owen Harrismale22.010A/5 211717.2500NaNS
11211Cumings, Mrs. John Bradley (Florence Briggs Th...female38.010PC 1759971.2833C85C
22313Heikkinen, Miss. Lainafemale26.000STON/O2. 31012827.9250NaNS
33411Futrelle, Mrs. Jacques Heath (Lily May Peel)female35.01011380353.1000C123S
44503Allen, Mr. William Henrymale35.0003734508.0500NaNS
\n", + "
" + ], + "text/plain": [ + " Unnamed: 0 PassengerId Survived Pclass \\\n", + "0 0 1 0 3 \n", + "1 1 2 1 1 \n", + "2 2 3 1 3 \n", + "3 3 4 1 1 \n", + "4 4 5 0 3 \n", + "\n", + " Name Sex Age SibSp \\\n", + "0 Braund, Mr. Owen Harris male 22.0 1 \n", + "1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 \n", + "2 Heikkinen, Miss. Laina female 26.0 0 \n", + "3 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 \n", + "4 Allen, Mr. William Henry male 35.0 0 \n", + "\n", + " Parch Ticket Fare Cabin Embarked \n", + "0 0 A/5 21171 7.2500 NaN S \n", + "1 0 PC 17599 71.2833 C85 C \n", + "2 0 STON/O2. 3101282 7.9250 NaN S \n", + "3 0 113803 53.1000 C123 S \n", + "4 0 373450 8.0500 NaN S " + ] + }, + "execution_count": 44, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train.head() " + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-29T07:28:58.070575Z", + "start_time": "2018-05-29T07:28:57.897862Z" + }, + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [], + "source": [ + "train[\"Age\"] = train[\"Age\"].fillna(train[\"Age\"].median())\n", + "train[\"Fare\"] = train[\"Fare\"].fillna(train[\"Fare\"].median())\n", + "#Convert the male and female groups to integer form\n", + "train[\"Sex\"][train[\"Sex\"] == \"male\"] = 0\n", + "train[\"Sex\"][train[\"Sex\"] == \"female\"] = 1\n", + "#Impute the Embarked variable\n", + "train[\"Embarked\"] = train[\"Embarked\"].fillna('S')\n", + "#Convert the Embarked classes to integer form\n", + "train[\"Embarked\"][train[\"Embarked\"] == \"S\"] = 0\n", + "train[\"Embarked\"][train[\"Embarked\"] == \"C\"] = 1\n", + "train[\"Embarked\"][train[\"Embarked\"] == \"Q\"] = 2" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-29T07:28:08.358884Z", + "start_time": "2018-05-29T07:28:08.346226Z" + }, + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ 0.12294397 0.31274009 0.23680307 0.32751287]\n", + "0.977553310887\n" + ] + } + ], + "source": [ + "#Create the target and features numpy arrays: target, features_one\n", + "target = train['Survived'].values\n", + "features_one = train[[\"Pclass\", \"Sex\", \"Age\", \"Fare\"]].values\n", + "\n", + "#Fit your first decision tree: my_tree_one\n", + "my_tree_one = tree.DecisionTreeClassifier()\n", + "my_tree_one = my_tree_one.fit(features_one, target)\n", + "#Look at the importance of the included features and print the score\n", + "print(my_tree_one.feature_importances_)\n", + "print(my_tree_one.score(features_one, target))" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-29T07:28:15.915998Z", + "start_time": "2018-05-29T07:28:15.705994Z" + }, + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [], + "source": [ + "test = pd.read_csv('../data/tatanic_test.csv', sep = \",\")\n", + "# Impute the missing value with the median\n", + "test.Fare[152] = test.Fare.median()\n", + "test[\"Age\"] = test[\"Age\"].fillna(test[\"Age\"].median())\n", + "#Convert the male and female groups to integer form\n", + "test[\"Sex\"][test[\"Sex\"] == \"male\"] = 0\n", + "test[\"Sex\"][test[\"Sex\"] == \"female\"] = 1\n", + "\n", + "#Impute the Embarked variable\n", + "test[\"Embarked\"] = test[\"Embarked\"].fillna('S')\n", + "#Convert the Embarked classes to integer form\n", + "test[\"Embarked\"][test[\"Embarked\"] == \"S\"] = 0\n", + "test[\"Embarked\"][test[\"Embarked\"] == \"C\"] = 1\n", + "test[\"Embarked\"][test[\"Embarked\"] == \"Q\"] = 2\n", + "\n", + "# Extract the features from the test set: Pclass, Sex, Age, and Fare.\n", + "test_features = test[[\"Pclass\",\"Sex\", \"Age\", \"Fare\"]].values\n", + "\n", + "# Make your prediction using the test set\n", + "my_prediction = my_tree_one.predict(test_features)\n", + "\n", + "# Create a data frame with two columns: PassengerId & Survived. Survived contains your predictions\n", + "PassengerId =np.array(test['PassengerId']).astype(int)\n", + "my_solution = pd.DataFrame(my_prediction, PassengerId, columns = [\"Survived\"])\n" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-29T07:28:18.081288Z", + "start_time": "2018-05-29T07:28:18.074414Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Survived
8920
8930
8941
\n", + "
" + ], + "text/plain": [ + " Survived\n", + "892 0\n", + "893 0\n", + "894 1" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "my_solution[:3]" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-29T07:25:44.488717Z", + "start_time": "2018-05-29T07:25:44.484381Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(418, 1)" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Check that your data frame has 418 entries\n", + "my_solution.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [], + "source": [ + "# Write your solution to a csv file with the name my_solution.csv \n", + "my_solution.to_csv(\"../data/tatanic_solution_one.csv\", \n", + " index_label = [\"PassengerId\"])" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-29T07:28:26.996353Z", + "start_time": "2018-05-29T07:28:26.982601Z" + }, + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.905723905724\n" + ] + } + ], + "source": [ + "# Create a new array with the added features: features_two\n", + "features_two = train[[\"Pclass\",\"Age\",\"Sex\",\"Fare\",\\\n", + " \"SibSp\", \"Parch\", \"Embarked\"]].values\n", + "\n", + "#Control overfitting by setting \"max_depth\" to 10 and \"min_samples_split\" to 5 : my_tree_two\n", + "max_depth = 10\n", + "min_samples_split = 5\n", + "my_tree_two = tree.DecisionTreeClassifier(max_depth = max_depth, \n", + " min_samples_split = min_samples_split, \n", + " random_state = 1)\n", + "my_tree_two = my_tree_two.fit(features_two, target)\n", + "\n", + "#Print the score of the new decison tree\n", + "print(my_tree_two.score(features_two, target))" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-29T07:28:28.033226Z", + "start_time": "2018-05-29T07:28:28.018293Z" + }, + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.979797979798\n" + ] + } + ], + "source": [ + "# create a new train set with the new variable\n", + "train_two = train\n", + "train_two['family_size'] = train.SibSp + train.Parch + 1\n", + "\n", + "# Create a new decision tree my_tree_three\n", + "features_three = train[[\"Pclass\", \"Sex\", \"Age\", \\\n", + " \"Fare\", \"SibSp\", \"Parch\", \"family_size\"]].values\n", + "\n", + "my_tree_three = tree.DecisionTreeClassifier()\n", + "my_tree_three = my_tree_three.fit(features_three, target)\n", + "\n", + "# Print the score of this decision tree\n", + "print(my_tree_three.score(features_three, target))\n" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-29T07:28:32.678968Z", + "start_time": "2018-05-29T07:28:32.465958Z" + }, + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.939393939394\n", + "418\n", + "[0 0 0]\n" + ] + } + ], + "source": [ + "#Import the `RandomForestClassifier`\n", + "from sklearn.ensemble import RandomForestClassifier\n", + "\n", + "#We want the Pclass, Age, Sex, Fare,SibSp, Parch, and Embarked variables\n", + "features_forest = train[[\"Pclass\", \"Age\", \"Sex\", \"Fare\", \"SibSp\", \"Parch\", \"Embarked\"]].values\n", + "\n", + "#Building the Forest: my_forest\n", + "n_estimators = 100\n", + "forest = RandomForestClassifier(max_depth = 10, min_samples_split=2, \n", + " n_estimators = n_estimators, random_state = 1)\n", + "my_forest = forest.fit(features_forest, target)\n", + "\n", + "#Print the score of the random forest\n", + "print(my_forest.score(features_forest, target))\n", + "\n", + "#Compute predictions and print the length of the prediction vector:test_features, pred_forest\n", + "test_features = test[[\"Pclass\", \"Age\", \"Sex\", \"Fare\", \"SibSp\", \"Parch\", \"Embarked\"]].values\n", + "pred_forest = my_forest.predict(test_features)\n", + "print(len(test_features))\n", + "print(pred_forest[:3])" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-29T07:26:25.602062Z", + "start_time": "2018-05-29T07:26:25.572689Z" + }, + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ 0.14130255 0.17906027 0.41616727 0.17938711 0.05039699 0.01923751\n", + " 0.0144483 ]\n", + "[ 0.10384741 0.20139027 0.31989322 0.24602858 0.05272693 0.04159232\n", + " 0.03452128]\n", + "0.905723905724\n", + "0.939393939394\n" + ] + } + ], + "source": [ + "#Request and print the `.feature_importances_` attribute\n", + "print(my_tree_two.feature_importances_)\n", + "print(my_forest.feature_importances_)\n", + "\n", + "#Compute and print the mean accuracy score for both models\n", + "print(my_tree_two.score(features_two, target))\n", + "print(my_forest.score(features_two, target))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true, + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "# 阅读材料\n", + "机器学习算法的要点(附 Python 和 R 代码)http://blog.csdn.net/a6225301/article/details/50479672\n", + "\n", + "The \"Python Machine Learning\" book code repository and info resource https://github.com/rasbt/python-machine-learning-book\n", + "\n", + "An Introduction to Statistical Learning (James, Witten, Hastie, Tibshirani, 2013) : Python code https://github.com/JWarmenhoven/ISLR-python\n", + "\n", + "BuildingMachineLearningSystemsWithPython https://github.com/luispedro/BuildingMachineLearningSystemsWithPython" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "# 作业\n", + "https://www.datacamp.com/community/tutorials/the-importance-of-preprocessing-in-data-science-and-the-machine-learning-pipeline-i-centering-scaling-and-k-nearest-neighbours" + ] + } + ], + "metadata": { + "celltoolbar": "Slideshow", + "kernelspec": { + "display_name": "Python [conda env:anaconda]", + "language": "python", + "name": "conda-env-anaconda-py" + }, + "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.4" + }, + "latex_envs": { + "LaTeX_envs_menu_present": true, + "autoclose": false, + "autocomplete": true, + "bibliofile": "biblio.bib", + "cite_by": "apalike", + "current_citInitial": 1, + "eqLabelWithNumbers": true, + "eqNumInitial": 0, + "hotkeys": { + "equation": "Ctrl-E", + "itemize": "Ctrl-I" + }, + "labels_anchors": false, + "latex_user_defs": false, + "report_style_numbering": false, + "user_envs_cfg": false + }, + "toc": { + "base_numbering": 1, + "nav_menu": {}, + "number_sections": false, + "sideBar": false, + "skip_h1_title": false, + "title_cell": "Table of Contents", + "title_sidebar": "Contents", + "toc_cell": false, + "toc_position": { + "height": "780px", + "left": "1279px", + "top": "168.667px", + "width": "341px" + }, + "toc_section_display": true, + "toc_window_display": false + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/code/.ipynb_checkpoints/09.machine_learning_with_sklearn-checkpoint.ipynb b/code/.ipynb_checkpoints/09.machine_learning_with_sklearn-checkpoint.ipynb deleted file mode 100644 index a03a9b0..0000000 --- a/code/.ipynb_checkpoints/09.machine_learning_with_sklearn-checkpoint.ipynb +++ /dev/null @@ -1,3015 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "source": [ - "***\n", - "***\n", - "# 计算传播与机器学习\n", - "\n", - "***\n", - "***\n", - "\n", - "王成军\n", - "\n", - "wangchengjun@nju.edu.cn\n", - "\n", - "计算传播网 http://computational-communication.com" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "source": [ - "![](./img/machine.jpg)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "subslide" - } - }, - "source": [ - "## 1、 监督式学习\n", - "\n", - "工作机制:\n", - "- 这个算法由一个目标变量或结果变量(或因变量)组成。\n", - "- 这些变量由已知的一系列预示变量(自变量)预测而来。\n", - "- 利用这一系列变量,我们生成一个将输入值映射到期望输出值的函数。\n", - "- 这个训练过程会一直持续,直到模型在训练数据上获得期望的精确度。\n", - "- 监督式学习的例子有:回归、决策树、随机森林、K – 近邻算法、逻辑回归等。" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "subslide" - } - }, - "source": [ - "## 2、非监督式学习\n", - "\n", - "工作机制:\n", - "- 在这个算法中,没有任何目标变量或结果变量要预测或估计。\n", - "- 这个算法用在不同的组内聚类分析。\n", - "- 这种分析方式被广泛地用来细分客户,根据干预的方式分为不同的用户组。\n", - "- 非监督式学习的例子有:关联算法和 K–均值算法。" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "subslide" - } - }, - "source": [ - "## 3、强化学习\n", - "\n", - "工作机制:\n", - "- 这个算法训练机器进行决策。\n", - "- 它是这样工作的:机器被放在一个能让它通过反复试错来训练自己的环境中。\n", - "- 机器从过去的经验中进行学习,并且尝试利用了解最透彻的知识作出精确的商业判断。 \n", - "- 强化学习的例子有马尔可夫决策过程。alphago\n", - "\n", - "> Chess. Here, the agent decides upon a series of moves depending on the state of the board (the environment), and the\n", - "reward can be defined as win or lose at the end of the game:" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "source": [ - "" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "source": [ - "- 线性回归\n", - "- 逻辑回归\n", - "- 决策树\n", - "- SVM\n", - "- 朴素贝叶斯\n", - "---\n", - "- K最近邻算法\n", - "- K均值算法\n", - "- 随机森林算法\n", - "- 降维算法\n", - "- Gradient Boost 和 Adaboost 算法\n" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "source": [ - "> # 使用sklearn做线性回归\n", - "***\n", - "\n", - "王成军\n", - "\n", - "wangchengjun@nju.edu.cn\n", - "\n", - "计算传播网 http://computational-communication.com" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "subslide" - } - }, - "source": [ - "# 线性回归\n", - "- 通常用于估计连续性变量的实际数值(房价、呼叫次数、总销售额等)。\n", - "- 通过拟合最佳直线来建立自变量X和因变量Y的关系。\n", - "- 这条最佳直线叫做回归线,并且用 $Y= \\beta *X + C$ 这条线性等式来表示。\n", - "- 系数 $\\beta$ 和 C 可以通过最小二乘法获得" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T07:10:39.010055Z", - "start_time": "2018-04-29T07:10:39.002664Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [], - "source": [ - "%matplotlib inline\n", - "import sklearn\n", - "from sklearn import datasets\n", - "from sklearn import linear_model\n", - "import matplotlib.pyplot as plt\n", - "from sklearn.metrics import classification_report\n", - "from sklearn.preprocessing import scale" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T07:11:24.244682Z", - "start_time": "2018-04-29T07:11:24.234905Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [], - "source": [ - "# boston data\n", - "boston = datasets.load_boston()\n", - "y = boston.target\n", - "X = boston.data" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T07:11:45.142201Z", - "start_time": "2018-04-29T07:11:45.137656Z" - }, - "slideshow": { - "slide_type": "fragment" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "array(['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD',\n", - " 'TAX', 'PTRATIO', 'B', 'LSTAT'], \n", - " dtype='|t| [95.0% Conf. Int.]\n", - "-----------------------------------------------------------------------------------\n", - "Intercept 36.4911 5.104 7.149 0.000 26.462 46.520\n", - "boston.data[0] -0.1072 0.033 -3.276 0.001 -0.171 -0.043\n", - "boston.data[1] 0.0464 0.014 3.380 0.001 0.019 0.073\n", - "boston.data[2] 0.0209 0.061 0.339 0.735 -0.100 0.142\n", - "boston.data[3] 2.6886 0.862 3.120 0.002 0.996 4.381\n", - "boston.data[4] -17.7958 3.821 -4.658 0.000 -25.302 -10.289\n", - "boston.data[5] 3.8048 0.418 9.102 0.000 2.983 4.626\n", - "boston.data[6] 0.0008 0.013 0.057 0.955 -0.025 0.027\n", - "boston.data[7] -1.4758 0.199 -7.398 0.000 -1.868 -1.084\n", - "boston.data[8] 0.3057 0.066 4.608 0.000 0.175 0.436\n", - "boston.data[9] -0.0123 0.004 -3.278 0.001 -0.020 -0.005\n", - "boston.data[10] -0.9535 0.131 -7.287 0.000 -1.211 -0.696\n", - "boston.data[11] 0.0094 0.003 3.500 0.001 0.004 0.015\n", - "boston.data[12] -0.5255 0.051 -10.366 0.000 -0.625 -0.426\n", - "==============================================================================\n", - "Omnibus: 178.029 Durbin-Watson: 1.078\n", - "Prob(Omnibus): 0.000 Jarque-Bera (JB): 782.015\n", - "Skew: 1.521 Prob(JB): 1.54e-170\n", - "Kurtosis: 8.276 Cond. No. 1.51e+04\n", - "==============================================================================\n", - "\n", - "Warnings:\n", - "[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.\n", - "[2] The condition number is large, 1.51e+04. This might indicate that there are\n", - "strong multicollinearity or other numerical problems.\n" - ] - } - ], - "source": [ - "import numpy as np\n", - "import statsmodels.api as sm\n", - "import statsmodels.formula.api as smf\n", - "\n", - "# Fit regression model (using the natural log of one of the regressors)\n", - "results = smf.ols('boston.target ~ boston.data', data=boston).fit()\n", - "\n", - "print(results.summary())" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T07:13:21.823618Z", - "start_time": "2018-04-29T07:13:21.812795Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [], - "source": [ - "regr = linear_model.LinearRegression()\n", - "lm = regr.fit(boston.data, y)" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T07:13:29.286705Z", - "start_time": "2018-04-29T07:13:29.280511Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "(36.491103280363603,\n", - " array([ -1.07170557e-01, 4.63952195e-02, 2.08602395e-02,\n", - " 2.68856140e+00, -1.77957587e+01, 3.80475246e+00,\n", - " 7.51061703e-04, -1.47575880e+00, 3.05655038e-01,\n", - " -1.23293463e-02, -9.53463555e-01, 9.39251272e-03,\n", - " -5.25466633e-01]),\n", - " 0.74060774286494269)" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "lm.intercept_, lm.coef_, lm.score(boston.data, y)" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T07:14:24.251725Z", - "start_time": "2018-04-29T07:14:24.248401Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [], - "source": [ - "predicted = regr.predict(boston.data)" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T07:14:33.380349Z", - "start_time": "2018-04-29T07:14:32.952670Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "fig, ax = plt.subplots()\n", - "ax.scatter(y, predicted)\n", - "ax.plot([y.min(), y.max()], [y.min(), y.max()], 'k--', lw=4)\n", - "ax.set_xlabel('$Measured$', fontsize = 20)\n", - "ax.set_ylabel('$Predicted$', fontsize = 20)\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "source": [ - "## 训练集和测试集" - ] - }, - { - "cell_type": "code", - "execution_count": 190, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[ 6.32000000e-03, 1.80000000e+01, 2.31000000e+00, ...,\n", - " 1.53000000e+01, 3.96900000e+02, 4.98000000e+00],\n", - " [ 2.73100000e-02, 0.00000000e+00, 7.07000000e+00, ...,\n", - " 1.78000000e+01, 3.96900000e+02, 9.14000000e+00],\n", - " [ 2.72900000e-02, 0.00000000e+00, 7.07000000e+00, ...,\n", - " 1.78000000e+01, 3.92830000e+02, 4.03000000e+00],\n", - " ..., \n", - " [ 6.07600000e-02, 0.00000000e+00, 1.19300000e+01, ...,\n", - " 2.10000000e+01, 3.96900000e+02, 5.64000000e+00],\n", - " [ 1.09590000e-01, 0.00000000e+00, 1.19300000e+01, ...,\n", - " 2.10000000e+01, 3.93450000e+02, 6.48000000e+00],\n", - " [ 4.74100000e-02, 0.00000000e+00, 1.19300000e+01, ...,\n", - " 2.10000000e+01, 3.96900000e+02, 7.88000000e+00]])" - ] - }, - "execution_count": 190, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "boston.data" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T07:16:27.403480Z", - "start_time": "2018-04-29T07:16:27.398197Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [], - "source": [ - "from sklearn.cross_validation import train_test_split\n", - "Xs_train, Xs_test, y_train, y_test = train_test_split(boston.data,\n", - " boston.target, \n", - " test_size=0.2, \n", - " random_state=42)" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T07:16:43.427978Z", - "start_time": "2018-04-29T07:16:43.423656Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [], - "source": [ - "regr = linear_model.LinearRegression()\n", - "lm = regr.fit(Xs_train, y_train)" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T07:16:47.859814Z", - "start_time": "2018-04-29T07:16:47.854257Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "(30.288948339369036,\n", - " array([ -1.12463481e-01, 3.00810168e-02, 4.07309919e-02,\n", - " 2.78676719e+00, -1.72406347e+01, 4.43248784e+00,\n", - " -6.23998173e-03, -1.44848504e+00, 2.62113793e-01,\n", - " -1.06390978e-02, -9.16398679e-01, 1.24516469e-02,\n", - " -5.09349120e-01]),\n", - " 0.75088377867329148)" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "lm.intercept_, lm.coef_, lm.score(Xs_train, y_train)" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T07:17:35.601265Z", - "start_time": "2018-04-29T07:17:35.598315Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [], - "source": [ - "predicted = regr.predict(Xs_test)" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T07:17:43.752187Z", - "start_time": "2018-04-29T07:17:43.605493Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "fig, ax = plt.subplots()\n", - "ax.scatter(y_test, predicted)\n", - "ax.plot([y.min(), y.max()], [y.min(), y.max()], 'k--', lw=4)\n", - "ax.set_xlabel('$Measured$', fontsize = 20)\n", - "ax.set_ylabel('$Predicted$', fontsize = 20)\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "source": [ - "# 交叉验证" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "subslide" - } - }, - "source": [ - "# cross-validation \n", - " \n", - "k-fold CV, the training set is split into k smaller sets (other approaches are described below, but generally follow the same principles). The following procedure is followed for each of the k “folds”:\n", - "- A model is trained using k-1 of the folds as training data;\n", - "- the resulting model is validated on the remaining part of the data (i.e., it is used as a test set to compute a performance measure such as accuracy)." - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T07:21:10.344979Z", - "start_time": "2018-04-29T07:21:10.333153Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "-1.5787701857180245" - ] - }, - "execution_count": 17, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "from sklearn.cross_validation import cross_val_score\n", - "\n", - "regr = linear_model.LinearRegression()\n", - "scores = cross_val_score(regr, boston.data , boston.target, cv = 3)\n", - "scores.mean() " - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T07:25:40.617010Z", - "start_time": "2018-04-29T07:25:39.304291Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYMAAAD+CAYAAADYr2m5AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzt3XmUXHWZ//H3kw4haQjDksaErEBkC2BCOpgwKtEggcBhwJ8IGNCwBUTFYYAZNc64Rn8/BwHDIBBEkpA+hEUUIWwOSwSVgQ6LCrI0kA0J0xBBSCeQpJ/fH98qu7qrbu1r38/rnDpVfW/dut+6J7lPfZ/vZu6OiIjE24BaF0BERGpPwUBERBQMREREwUBERFAwEBERFAxERAQFAxERQcFARERQMBAREWBgrQuQr2HDhvm4ceNqXQwRkYaxcuXKN9y9JZ/3NkwwGDduHO3t7bUuhohIwzCz1fm+V2kiEREpPRiY2WfM7BUz6zCzM/rsW2Rmryb2dZjZmMT2w83shcRx80otg4iIlKakNJGZDQV+BEwFtgFPmdkd7t6Z8rbZ7v5QyjEG/BT4P8BLwJNmttzdnyqlLCIiUrxSawYzgRXu/qq7rwceAGbkOGYy8Lq7/8HdNwK3AkeVWA4RESlBqcFgNJDaQLEOGJHy9xZgsZk9Y2YX5nnM35nZXDNrN7P2zs7OTG8REZEyKDUYDAK6U/7uJqSLAHD3s919LOGX/9lmdkSuY1K5+0J3b3X31paWvHpH1UZbG4wbBwMGhOe2tlqXSESkIKUGg9eAkSl/jwLW9n2Tu68F7gQOzPeYhtHWBnPnwurV4B6e585VQBCRhlJqMLgXmGlmu5vZcOAw4L7kTjMbn3jejVA7eBx4FNjXzPY1sx2ATwG3lViO2pk3D7q6em/r6grbRUQaREm9idz99UTX0N8nNl0IHGlme7v7JcACMzsAeA+4wt1/C2BmZwJ3EFJG/8/d8x4YUXfWrClsu4hIHSp5BLK7LwIWReybFbH9HmCfUs9dc93dsNNO8Pbb6fvGjKl+eUREiqQRyMX629/ghBNCIGhq6r2vqQnmz69NuUREiqBgUIjUXkO77QZ33AE//jEsXgxjx4IZ7LILbNsGW7fWurT5UU8oEUHBIH99ew1t3QqDBoWgMHs2rFoV0kZvvAEf+xicfz6szdJJqh5uwuoJJSIJ5u61LkNeWltbvaazlo4dm7lReOzYEAhSvfwyHHwwHHYY3HtvqDGkSt6EU3shNTfDwoUhsFTLuHEhAPSV6TuJSMMxs5Xu3prPe1UzyMdzzxXWa2ivveCSS+DXv4ZrrknfXy/dUdUTSkQSFAz6Sk3fjB0LZ5wBhxwS/s4kqtfQOefAJz8JX/kKjBzZOx1ULzfhPfbIvF09oURiR8EgVd8c+po1cP31sPfesGBBSOWkam6O7jVkBsceC++/D3/5S09O/rTTwutMqn0TPvDA9G3ZvpOI9FsKBqkypW8gdCP94hdDTj/Za2js2Nw5/ksvTd/mDjvsAEOG9N4+ZEh1b8Lr18OKFaGxe5ddwraRI6vfbiEidUHBIFVUmibZKyi119CqVblvmlGf19UF117bE1gAjjuuujfhSy4JtZbrroPly8O2K69UIBCJKQWDVFFpmmLTN9k+LzWwHHYYPP10dPqo3Do74aqr4JRTYPx4mDgRBg6Exx6rzvlFpO4oGKSaPz+MHUhVSg59/vz82hlOPz30WPqf/ynuPIW67DLYtKmn99KQIXDQQfD449U5v4jUHQWDVLNnh1/JTU35twvk+rx82hk+85lwQ77++tK/Qy4bNsB//ReceCLsv3/P9ilToL29erWTUtXDoD2RfkTBINXWrfD88zBnTv7tArnk086w007w6U/DsmXhF3slLVgA77wD3/hG7+1TpsBf/wovvVTZ85eDRk6LlJ2CQapHHw0Tzx1VgyWZ58wJvZZ+8YvKnePtt+Hyy8MEewcd1HvflCnhOZ92g1r/Kq+XQXsi/YiCQap77gkpoiOOqP65p08PN9ZKpIqSN++ddw4BYfLk9PdMmBBSVbnaDerhV3m9DNoT6UdKDgZm9hkze8XMOszsjD77vmJmfzazVWZ2g5kNTGx/KLGtI/FoyvzpVXbPPTBtWrhpVtuAAfD5z8P995f3ppZ68076/vfTb94DB8KkSbmDQT38Ki93ry8RKS0YmNlQ4EfARxKP75tZ6sr17wAfAsYDHwBOStk33d3HJx7bSilHWbz+OqxcWZsUUdLnPx9+bS9ZUr7PLOTmfeih8MQT2affrodf5fPnp68hoZHTIiUptWYwE1jh7q+6+3rgAWBGcqe7/8zd33f3rcAfgF1LPF/l3JdYuvnoo2tXhj33DOmiRYvK16unkJv3lCmhAfvZZ6M/L+rXd9Q8R5Vw/PEhGOy4Y/i7qSlMCKgBcyJFKzUYjAZS50BeB4zo+yYzawaOIax7DGFN5AfN7EkzOzXqw81srpm1m1l7Z2dniUXN4e67YffdQ9fSWjr99NCj5+GHCzuub6Pu1VfDl75U2DxI+TQiz5+fPiU3hMbvb3wjumG5nI3Ot98eRk8vXx4+Z9u26gYjkf7I3Yt+AP8GfDfl7/8LnN/nPQOAW4HzMhx/APAasG+uc02ePNkrZutW9912cz/ttMqdI1/vvus+dKj7nDn5H7N0qXtzs3u49fc8zNyPOMJ9yJDe25ubwzF9dXe777yz+9y50ef605/CZ+yyS/j8sWPd//M/3UeMSD9/8jyZyhdVhnwcfbT7mDHu27a5d3WFMp9ySnGfJdKPAe2e5/281JrBa8DIlL9HAX9f3svMDPgp8Ky7/yRDIHoW+C2wf999VbVyJbz5Zm1TREk77BCmzF68OP9f0VET7A0fHtZUSJ0HKdtAOjNobc3eiHzLLeF9zz7bM3biootCA3RfXV1w5pmh22y5Gp1ffz2k9E49NVyfIUPC69tuCwPqRKQopQaDe4GZZra7mQ0HDgPuS9n/E2C9u/9H6kFmNj7xPBb4MPBUieUozd13hxvcJz9Z02IA4cb/6KM9v6Hz6boZ1S6wfn14LmSCvUMPhT/+ETZvTt/nDjffDIcfHgJNqnXrMn/ee+9FN0ivWRPKVEgK6aabQloo9TuceWY4jwadiRQv3ypE1AOYA7yUeJyQeFxE6F3UDXSkPE5JHPNH4BXgGeDEfM5T0TTR1Knuhx5auc8vxNix6ekWCNvLeUyUX/wiHPv736fv+8Mfwr6f/KSwMkTtA/fRo9233z7/FNKUKe6HHJK+ffJk94MPDqkuEXH3wtJEJQeDaj0qFgzeeMN9wAD3b36zMp9fKLPMN02z6GOWLnXfbrvy5OTXrQvH//jH6fu+8Y1wrdavz1yGqHaBqH3nnec+cGD+gey558K+Sy9N33fVVWHf448X/p1F+qlCgoFGIP/61yFVUcvxBamKGVD12c+GnlCDBpU+wd7IkTBiRHq7gSdSRNOnwwc+kH5ctkn5ovZdeWVI+WSSKfXV1hZSSSefnL7vlFNC+8FPf1rwVy5araflECmnfKNGrR8Vqxl8/vPuu+4aehTVg0y/oocMyf4r/3e/C+9buLA8ZTjuOPd99+297amnwjmuvro850jKN8XV3e2+557uRx4Z/Vmf+1zoifXuu+UtYybl7iElUgGoZpCn7u4wBcWRR6aPaK2Vvr+iIZQv26/8a68NvZAy/WIuxpQpYfbWt9/u2XbzzeEafepT5TlHUqY1HwYNSh9N/PvfwyuvhJ5DUc46K8zIeuut5S1jJvUwLYdIGcU7GDz9dOiqWC8poqTU3j/HHx8GoGXqOgphsNdNN4U0ydCh5Tn/oYeG5/b28JxMEX3iE9DSEn1cMfoGv+23D9+776yqS5eGoHHCCdGf9ZGPwD77VCdVVA/TcoiUUbyDwT33hOeZM2tbjmwuuCD0n7/hhsz7b7wxBIqzzy7fOVtbw3Oy3eCpp6CjIyzCUwmpwW/1ahg2LCy+8847Yf/774eAd/zxPVNQZGIWupk+8kho+6hkLl+T5Uk/E89gkGz4+/rXYbvtwkyh9eqjHw2D0C6/PNws+7r22vArOjmVRDnsuivsvXdPMEimiLL9Ki+XD3wgLPLT0RHGV7iHcSAbNmRPESUlg8Vf/lLZKba/+930aTmGDMk9WZ4anaVe5du4UOtH2RqQG7Hhb+nSUM7ly3tvf+KJsH3BgvKf8+STwxiA7m73vfZynzmz/OfI5vvf979PewGhS+uSJbmPK3bMxdKl4T3JKTZy/Xu4/vrwuS0tPd2Bjz469zka7d+eNDQ0ziCLcg7Qqpb33nPfY48wz1CqL3zBffBg9w0byn/OH/0oXJc77wzP111X/nNkc8MNIQAUeuMsdpxGITfpLVvc9947DH5LDnI788ww1uOFF6LP04j/9qShKRhkU8zNoh784AehnE8/Hf5+9133nXZyP/XUypzv4YfD+Q48MAwMe/PNypwnSrE3zmqM4E7WCn71q55tr73mvuOO7scfH32eRv23Jw2rkGAQvzaDRm34mzs39Ka5/PLw9623hp5EZ51VmfO98EJ4/tOfwiR0d99dmfNEKba3TqauqrkWvinkXFu3wve+F9pxjj22Z/vw4fC1r8EvfwkPPpj58/rO55Q0enR02USqJd+oUetHrNsMks47z33QoDAdxD/+o/s++1RmLp56uEalpFSWLg3tHfmWe8yY/M+1aFHYd/vt6fu6usJnTZyYPojxhRdCTS5T7eCQQ9w3b879vUQKhNJEOSxd6v4P/xC+/pgxjREI3N2ff77nBgdhHv9KlL0ectvlCEgXXBBSXOvWZX/fWWelf1cz9yuv7P2+ZFvBpEnRQfjGGz2tjWX16vDvbNgw9x/+sHdD9ec+539vfO7qyv+7ieRBwSAfF18cGl8bydKl7k1Npd0g81Evue1Ce/j09fLLoRH661+Pfs+WLe7jx7uPGxdu2Gbuw4eHxuBp09w3bep57+LF4Tr88pfRn9fdHY7baadQOzELAWnIkND7K5NrrgnvmzCh55hivq9IHwoG+fjiF8OcRI2kWr/Y66FmUC4nnBBWsdu4MfP+5C/5n/+89/ZbbgnbTzst3OCTQWPixNypuW99K/3abb999pv73LnpxzRK+rLUoC0Vo2CQj9NPdx81qryfWWnV+sVeD20G5bJiRSh/pkn8tm1zP+gg9/33D6/7+s53/O/puOR1+Od/zn3OWq9JUU396d9KP1RIMCi5N5GZfcbMXjGzDjM7o8++A83saTNbbWZXmNmAxPbDzeyFxHG1mdlr48YwuVsjqVZPqGzTUTeaj34UJk0KvbDce++7886wqtvXvhZGBPe1115h5PVbb/VsW7gw96jhYnpCNepcR5qwr//IN2pkegBDCWsejwSGA+uBlpT9vwGOBpqAFcDxgAEvAgcDOwAvABNznavsNYNjjw0NgY1Ev8KKk8z133tvz7bu7rC63Z57hhRQJvU81qFe1Ev7kmREFWsGM4EV7v6qu68HHgBmAJhZC7Cnu9/t7tuANuAoYDLwurv/wd03ArcmtldXV1d6f/R6159+sVfTSSeFOY+SYzQgzEf12GPwb/8WxlFkUs2xDsUcUw8addyOpCk1GIwGVqf8vQ4YkXg9CliTYV+2Y3oxs7lm1m5m7Z2dnSUWtY9GTBNBYYvbS7D99nDeeWHg3HPPhW3f/35Y0W3OnOjjir3RFRO0k8ckB6YNG9YYgX7+/HB9UzVCEJM0pQaDQYRF75O6gW059mU7phd3X+jure7e2lLuefQbsWYgxTv33LBozoIFYaGcBx+Eiy5Kv5GlKuXXejFBe/ZsePnl0E5x7rn1HwgglPHjH+/5e8cdGyOISZpSg8FrhPaCpFGENoRs+7IdUz0KBvGy++4wdSpcfTUcdlhoMN555+zH1CItN2QI7LdfWEOiUaxaFdYEOeqoMC23AkFDKjUY3AvMNLPdzWw4cBhwH4C7rwE2mtl0M2sCTgNuAR4F9jWzfc1sB+BTwG0llqNwXV2NmSaS4rS1hTaCZI+i7m748pdz9wyqRVpu4sTGCQYvvxxSb7NmwbRp8MwzvZdLlYZRUjBw99eBecDvgd8CFwJHmtlFibd8HrgCWAX8xt0fcff3gTOBO4BngCvcfXXfz664jRtVM4iTefNg8+be2+q1C+TEibBuHbzxRmU+v5wL7CQnMJw1K9S83HsWRZKGEtGNIn/uvghYFLHvCeCgDNvvAfYp9dwlUZooXhqpH//EieH56adhxozyfnZbW5gBNzk2ILkSHBRX67nrLhg/PjyGDQvbHn0UjjiiPOWVqonfFNYAW7aEqYiVJoqPRuoC+aEPhedKpIrKOUhs0yZ44IFQK4DQBnPAAaGBXhpOPIPBxo3hWTWD+GikfvwtLTByZGWCQTlrSA89FFJvyWAAIVX06KPpo72l7sUzGCR/GSkYxEejDdirVCPyiIxDeoqrId11V+j9dPjhPdumTYMNG6Cjo7jySc3EOxgoTRQvjTRgb+JE+POf0xu9S/HMM/Duu+nbi6khuYdgMGMGDB7cs33q1PCsVFHDiWcwUJpI6t3EibBtW7iBZ5Nvz6A//CEMDmtuhh/+MNSMIBx3zTWFB8YXXwzdSlNTRAD77w9Dh4ZUkTSUeAYDpYmk3iV7FGVLFSV7Bq1eHX6pJ3sGJQNCaqCYNCl0nFixAi6+ONSMrr8+1JIOPrjw8t11V3g++uje25ua4MMfVjBoQAoGIvVor73C1A7ZgkFUz6AvfjHMxXTWWT2Bors7pJxSxwAku63ef3/h5bvrrlALGDcufd/UqaEmkqyBS0OIZzBI/iNVm4HUqwEDQhfTbMEgqgfQ22/DVVeltzds3ty7C+no0bDPPoUHg3ffDTWMvimipKlTQ4qrvb2wz5WaimcwUM1AGsHEiWHgWXd35v3Zxk6YZd7XN4DMmBFu7Fu25F+uBx6A99/PHgxAqaIGo2AgUq8mToR33oFXXsm8f/78kKNP1dwcpufOd5DdjBnhl/5jj+VfrrvuCimsj3wk8/7ddoMPflA9ihpMPIOB0kTSCHI1Ih91VKg17LRT+tiJfAfZffzj4dh8U0XuYT6iT34yTAkeRYPPGk48g4FqBtIIJkwIv/yjgsFtt4Wb7YMPpo+dyHeQ3a67wiGH5B8Mnn02pJqiUkRJ06bB66+HMklDiHcwSB0sI1Jvcq1tcOONoQF40qTM+/MdZDdjRkjp5Or909bWkxr61reyz3aqdoOGE89gkJy+ekA8v740kKhpKV57LcwNdPLJ0Y3F+ZoxIzQgP/xw9HuSYxreeiv8/eqrvcc09HXQQeH/mIJBw4jn3VDTV0ujiFrb4OabQ4ro5JNLP8dHPhLy/9lSRYXOdjpwIEyZEt2IXM41FaQsFAxE6lnq2gapli0L4xD237/0czQ3h6VAswWDYmY7nToVnnwyTHWdKtfIaamJooOBmY00s0fMbK2ZLTOzwX32TzKzh82sw8yeNLMPJbbPMbMNie0dZnZiqV+iYFryUhpFprUNXnklpF9OOaV855kxI5wjanW1PfbIvD3bbKfTpoV1Q558svf2cq6pIGVTSs3gB0Cbu48GtgLn9tm/O3Cau48HLgMuSdm3wN3HJx63lFCG4mjJS2kUmdY2WLYsPJ90UvnOM2NGT8+kTEaOTN+Wa7bTD384PPdNFTXSqnMxUkowOBZYnHi9BDgqdae73+vuqxJ/PgHsWsK5yktpImkkfRuRly0Lv7ozzQtUrClTwmyjmVJF998fBqV9+tOFrQcxfHgoY99G5F0jbgX1uOpcjBQVDMxsF2CTuyfreuuAiFUzADgNuDXxuhuYa2Yvmtk1ZhaZrzGzuWbWbmbtnZ2dxRQ1M6WJpJGkrm3w7LNhErhypoggNPhOn54eDLZsgS9/OUycd8MNha8HMWIE/OIXoaF4zJhwjjffzNyT79hjS/8ehVAjdi85g0Hiht2e+gAOJtzUk7qBbRHHnwBMI5Emcvcl7r4HMBHYGfha1LndfaG7t7p7a0tLS95fKieliaSRpK5tsGxZuHmdWIGmthkzwgplq1f3bLviihCILr+88HE5bW1hsrpt20IKau3aMA/S8cfDokU9tYzRo2HffcO6CsmpsStNjdjp3L3gByGIvAMMSvx9BHB7hvfNBP4H2CXic44FfpnPOSdPnuxls+ee7qeeWr7PE6mkF190B/drr3UfP959xozKnOePfwznue668Pdf/uI+dKj7rFnu3d2Ff97YseHz+j7Gjk1/79tvux9yiPvgwe6/+U0p36L8ZWtgQLvneV8vKk3k7t3AQ8BnE5vmAL0ags3sE8B3gGPc/a8p2/e2YCBwElDADFllojSRNJLk2gY/+1n45V6OsQWZTJgAH/hAT6roq1+F994LtYJiBrYV0lC8005wzz0hXXPkkSG9VMn0jRqx05TSgHw+cK6ZrQM2Azea2VAzW25mTcBCYCzwaKILaTJYnAKsAZ4HuoAflVCG4ihNJI3kxhtD7j7ZKydqSutSmYXAk0xFLVkSJsP74AeL+7x8Z05NamkJi/K89x6sX1/Z9E2hZYuDfKsQtX6ULU3U3e0+YID7vHnl+TyRSlq61L25uXcqo7k5bK/EuQYN6n2uIUOKP1cxZa9W+ubSS9PPUanrWkNUOk3U0N5/P/yyUs1AGkE1B2jNmxf+f6TatKn4c+U7c2qqaqRv3END9fbb94yf2G673GXr5+IXDLSWgTSSaua2K3GufGdOTapG+mbRIvjv/4bLLgvzPl18cUiLVaotpkHELxhoLQNpJNXMbddDHj3fRXmKtX49/Mu/wEc/CuecE7YdcEBop3jppfKco0EpGIjUs0rfHGt1riipqSUIv9ivvrp86Zsvfzmkvq69tmfg24QJ4fmZZ8pzjgYVv2CgNJE0kmLy7o1wrlzlWLUq9KLq7i6+N1NS6kjjW2+F444Lg9ySkjO/xjwYDKx1AapONQNpNLNnV++GXM1z5XLkkeEGvnx5z8pphUqONE5thF++PGxPfs8ddwzB4tlnSy5yI4tfzUDBQKQx7LprWGehlCkq8u2NNWFC7GsG8QsGShOJNI5Zs+CJJ8Iyn8XIt4fUhAnw3HNh/YWYil8wUM1ApHHMmhWe7767uOMzrcMA6T2kDjggjLGIcY8iBQMRqV8HHxxu6MWmivbcM31bph5S6lEU42CgNJFI/TMLtYP77gvzMxXi9tvh4YfDlNm5ekipR1EMg0GyzUA1A5HGcMwx8M478Mgj+R/T2Rl6EU2aBDfdlHsU9A47hFpEjHsUxS8YdHWFXwjbb1/rkohIPmbMCHMH5ZsqcocvfAHeegsWL4ZBg/I7LuY9iuIZDHbYobj52UWk+nbcEQ4/PIwPyMeyZfDzn8N3vgMHHZT/eSZMgOefj22PovgFA61lINJ4jjkmLL/5yiuZ96eOMj71VNh7b7joosLOkexR1NFRcnEbUdHBwMxGmtkjZrbWzJaZ2eA++6eb2d8SC9t0mNkFie1DzexOM1tnZveZ2W6lfomCdHUpGIg0mmxdTPuuZ9zdDa++GmoIhYh5j6JSagY/ANrcfTSwFTg3w3tuc/fxicdliW0XA8+4+yjgceDfSyhD4bTkpUjj2WcfGD8+c6oo0yjjzZsLX4dh//1D+ljBoGDHAosTr5cAR+V53KeAaxOvFxdwXHkoTSTSmGbNggceCLOOpirXOgzNzaFHkYJB/sxsF2CTuyfD8TpgRJ+3OTDLzF5KpJF2T2wfRVgDOeq41PPMNbN2M2vv7OwspqjplCYSaUyzZoVf/A8+2LNtzRoYGDHfZjHrMEyYENvupTmDgZldk7whJx/AwUDqqtzdwLbU49x9hbvvDuwHvAZcmtg1KOXYtOP6fMZCd29199aWlpa8v1RWCgYijenww0MX05NOCg3Fw4fDgQeG1327ihe7DkOyR1GhA9z6gZzBwN3PSd6Qkw/gYWBnM0t24B0FrI04fgtwHXBgYtN6YI9cx1XMxo1qMxBpRD//eWgcfvfd0FD8+uvh9Xe/C9ddV551GA44IASCavYoSu0JNW5c+LsGikoTuXs38BDw2cSmOcAtqe8xs3FmNtDMDJgNPJbYtRw4I/H69L7HVZxqBiKNad482NYnkeAOV15Z+FrLUardo6hvT6jVq8PfbW1VDxKlNCCfD5xrZuuAzcCNiW6jy82sCZgOrAI6gL2AryaO+yYwLXHcgcBlfT+4ohQMRBpTuRqKs9lvv+r2KIpab+H886ODRIUUvdKZu78C9F1+6B3gmMTrRYlH3+M2ADOLPW/JlCYSaUxjxoSbYqbt5dLcDHvtVb1gEBXINmxI35ZclKdCK9HFawSyu2oGIo1q/vz0/7vFNhRnU80eRaNGFfb+ctaC+ohXMNi8OTwrGIg0ntmzQ8NwORqKs5kwAV54oTo9ij72sfRtzc2wW8TEDOWsBfURr2CgJS9FGlu5GoqzSfYoevHFwo4rtMF369aw3sK++6YHuB//uDq1oBRFtxk0JK1yJiK5pPYoOuCA/I5J9gpK3mOSDb4QHbBuvTWkfW6/HY47LvN75s0L7xkzJgSCCrUXQNxqBgoGIpLLfvuFX/eFNCJH9QqKmh/JHS65JMy5dOyxmd9TjVpQinjVDJQmEpFchgwpvEdRod1ef/MbWLkSrrkmBJ46UB+lqBbVDEQkH4X2KIrqFRTV4HvJJdDSAqedVnjZKkTBQESkr2SPovffz/1edxg9OvO+009P3/bnP8Odd8KXvhRqIXUinsFAaSIRyeaAA0Jvn3x6FC1YAL/7HXz60z29gkaNgmHDwpxJb7zR+/2XXgqDB8N551Wm7EWKVzBIthmoZiAi2SRHOh90UPZuoitWwIUXwj/9E9x0U0+D79q1cM89YTK92bN75lRavx6WLIE5c0KwqCPxCgZKE4lILm1tPf35M80LlDqe4BOfCLn/JUvSG4InT4YrroD77gszq0KYVG/LFrjggqp9nXzFqzeR0kQikkuubqKp4wnc4a234I47Mnf9PPts+O1v4dvfDoHgjTdCO8Hjj4dupXUkXjUDpYlEJJeo7qCrV8NZZxW23rIZTJ8enpNtB5s2VXwG0mLEKxh0dUFTU1gtSUQkk6juoEOG9Mxv1le2CeS+/e1Qg0iVbUBajcQECmBdAAALVUlEQVQvGDQ3hygtIpJJ1Oyo114begtlkm0CuWqsw1AGRQcDMxtpZo+Y2drEgveD++x/zMw6Eo81Zva/ie1zzGxDyr4TS/0SedNaBiKSS7bZUYuZRjsqUFRwBtJilFIz+AHQ5u6jga3Auak73f1Qdx/v7uOB7wI3pOxekNzn7tVb9lJrGYhIPqLmBSpmGu1qrcNQolKCwbHA4sTrJcBRWd57FvCzEs5VHgoGIlKqQieQq9Y6DCUqKhiY2S7AJndPNquvA0ZEvPdgoNvdk7M+dQNzzexFM7vGzCLzNmY218zazay9s7OzmKL2pjSRiNRClWcgLUbOYJC4YbenPoCDCTf1pG5gW8RHnE1KrcDdl7j7HsBEYGfga1HndveF7t7q7q0tLS15fJ0cVDMQEcko56Azdz+n7zYzGwDsbGaD3P19YBSwNsP7BgMnAF/P8LkbzewGQgqpOrq6YETGCoyISKwVlSZy927gIeCziU1zgEwNwScCv3b3d5IbzGxvCwYCJwGPFVOGoihNJCKSUSkNyOcD55rZOmAzcKOZDTWz5WbWlHhPrxRRwinAGuB5oAv4UQllKIzSRCIiGRU9N5G7vwJM7bP5HeCYlPd8LMNx3wO+V+x5S6JgICKSUbxGICtNJCKSUXyCQXd3mFdENQMRkTTxCQabNoVnBQMRkTTxCQZay0BEJFJ8goHWMhARiRSfYKAlL0VEIsUvGChNJCKSJj7BQGkiEZFI8QkGShOJiERSMBARkRgFg2SaSG0GIiJp4hMMVDMQEYmkYCAiIjEKBupNJCISqeRgYGYfKkdBKq6rC7bbLjxERKSXooOBmV1oZi8BKyP2DzSzRWb2qpk9amZ7JrYPNbM7zWydmd1nZrsVW4aCaC0DEZFIpdQM2oFDs+z/HDCYsD7ydcBlie0XA8+4+yjgceDfSyhD/rSWgYhIpKKDgbuvcPc3s7zlU8BP3d2BNuCIlO3XJl4vBo4qtgwFUc1ARCRSJRuQRwOrAdy9C+gys10INYU1ifesA0ZUsAw9FAxERCLlXAPZzK4BJvfZfKa7P53j0EFAd8rf3cC2PtuT26LOPReYCzBmzJhcRc1OaSIRkUg5g4G7n1PkZ78GjAReMrMhwEB3/5uZrQf2INQORgFrs5x7IbAQoLW11YssR6CagYhIpEqmiZYDpydenwr8MmX7GYnXpwO3VLAMPRQMREQildK19Coz6wCazKzDzK5IdBtdbmZNwJXAYDNbSwgG30gc+k1gmpmtAw6kp5dRZXV1KU0kIhIhZ5ooirt/IWLXMYnnbcApGY7bAMws9rxF27hRNQMRkQjxmY5CaSIRkUjxCgZKE4mIZBSPYLBtG7z3nmoGIiIR4hEMNH21iEhWCgYiIhKTYKAlL0VEsopHMFDNQEQkKwUDERGJSTBQmkhEJKt4BAPVDEREslIwEBGRmAQDpYlERLKKRzBQzUBEJCsFAxERiUkwSKaJFAxERDIqORiY2YfKUZCK6uqC7beHpqZal0REpC6VstLZhWb2ErAyYv8kM3s4sQrak8mgYWZzzGxDYnuHmZ1YbBnyprUMRESyKqVm0A4cmmX/7sBp7j6esLTlJSn7Frj7+MSj8msgay0DEZGsig4G7r7C3d/Msv9ed1+V+PMJYNdiz1UyLXkpIpJVtRqQTwNuTbzuBuaa2Ytmdo2ZRf5kN7O5ZtZuZu2dnZ3Fn11pIhGRrHIGg8QNu73PI+9GYzM7AZhGIk3k7kvcfQ9gIrAz8LWoY919obu3untrS0tLvqdMpzSRiEhWA3O9wd3PKfbDzWwm8FXgKHff0udzN5rZDcBZxX5+3jZuhKFDK34aEZFGVbE0kZl9AvgOcIy7/zVl+94WDAROAh6rVBn+TmkiEZGsSulaepWZdQBNiS6iV5jZUDNbbmZNwEJgLPBoYn+y19ApwBrgeaAL+FGJ3yE3BQMRkaxypomiuPsXInYdk3geH3Hc94DvFXveomzcqDYDEZEs4jEdhWoGIiJZKRiIiEgMgsGWLeGhNJGISKT+Hww0fbWISE4KBiIiEoNgoCUvRURy6v/BQDUDEZGcFAxERCQGwUBpIhGRnPp/MFDNQEQkJwUDERGJQTBQmkhEJKf+HwxUMxARyUnBQERESg8GhSyBWRPJYDBkSG3LISJSx0pZ3OZCM3sJWBmxf7qZ/S2xsE2HmV2Q2D7UzO40s3Vmdp+Z7VZsGfKycWMIBAP6fyVIRKRYpdwh24FDc7znNncfn3hclth2MfCMu48CHgf+vYQy5Kbpq0VEciplpbMVAGZW6KGfAo5PvF4M/KrYMuRFwUBEJKdK5k4cmGVmL5nZMjPbPbF9FGENZIB1wIioDzCzuWbWbmbtnZ2dxZVCS16KiOSUMxiY2TXJG3LKI2ejsbuvcPfdgf2A14BLE7sGAd2J193AtiyfsdDdW929taWlJeeXyUg1AxGRnHKmidz9nFJO4O5bzOw6YGli03pgD0LtYBSwtpTPz0nBQEQkp4qlicxsnJkNtNCoMBt4LLFrOXBG4vXpwC2VKgOgNJGISB5K6Vp6lZl1AE2JrqNXJLqNLjezJmA6sAroAPYCvpo49JvANDNbBxwIXJb+6WWkmoGISE7m7rUuQ15aW1u9vb29sIPa2mDOHNi6FcaOhfnzYfbsipRPRKTemNlKd2/N5739dyRWWxvMnRsCAcDq1eHvtrbalktEpA7132Awb17PVBRJXV1hu4iI9NJ/g8GaNYVtFxGJsf4bDMaMKWy7iEiM9d9gMH9+ei+i5uawXUREeum/wWD2bFi4MPQiMgvPCxeqN5GISAZFT1TXEGbP1s1fRCQP/bdmICIieVMwEBERBQMREVEwEBERFAxERIQGmqjOzDqB1bUuR5UNA96odSHqgK5DoOvQQ9ciyHUdxrp7XiuDNUwwiCMza893xsH+TNch0HXooWsRlPM6KE0kIiIKBiIiomBQ7xbWugB1Qtch0HXooWsRlO06qM1ARERUMxAREQWDumNmQ8xsn1qXQ0TiRcGgTpjZTmb2S+B14F9Ttn/FzNaY2fNmdnTtSlgdZjbYzBYmvu9qM7sgsT1u12GAmf3azF5IfOeZie2xug5JZjbIzJ41s58m/o7rdVhlZh2Jx8OJbWW5Fv17CuvG0g1cAdwJTAUws72BLwITgNHAf5vZWHffUrNSVt4OwL3AOcBuwDNm9gTxuw4OfM7dXzOzo4D5ZtZB/K5D0teBVRDb/xd/5+7jk6/LeS1UM6gT7v6uu98PbE3ZfAJws7u/4+7PEv4zTK5F+arF3d9095978AawFvgY8bsO7u6vJf4cCzxNDP89AJjZ/sAU4ObEplhehwhluxYKBvVtNL2n4FgHjKhRWarOzA4EBhOG3MfuOpjZv5rZm8AFwHeI4b8HMzNgAfCVlM2xuw4pNpnZS2b2aCJ1WLZroWBQ3wYR0kdJ3cC2GpWlqsxsGHADcDoxvQ7u/kN3342QIrmXeF6Hc4GH3L0jZVscrwMA7r6/u+8NXAy0UcZroWBQ314DRqb8PYqQNunXzGwX4A7g6+7+ODG9DknufhuwI/G8DqcBJ5vZU4Ta0QnAeuJ3HXpx94cJKaGy/ZtQMKhvywn/EZoTedNdgadqXKaKMrOdgF8B89397sTmOF6HvcxseOL1NGAzMbwO7n6Yux/k7hOB/wB+QehkEavrAGBmO5jZiMTrSYR00P2U6VqoN1GdMLOhwJPAUGCwmU0HzgaWAs8QbgZnef8fMn4+cAhwuZldnth2JPG7DjsD95hZE/C/wEnuvtLM4nYd0sT4OjQDKxL/Jt4GTnX335brWmg6ChERUZpIREQUDEREBAUDERFBwUBERFAwEBERFAxERAQFAxERQcFARERQMBAREeD/A8fJdsiAXvJGAAAAAElFTkSuQmCC\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "scores = [cross_val_score(regr, data_X_scale,\\\n", - " boston.target,\\\n", - " cv = int(i)).mean() \\\n", - " for i in range(3, 50)]\n", - "plt.plot(range(3, 50), scores,'r-o')\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T07:25:34.856887Z", - "start_time": "2018-04-29T07:25:34.840623Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "0.45384871359695633" - ] - }, - "execution_count": 20, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "data_X_scale = scale(boston.data)\n", - "scores = cross_val_score(regr,data_X_scale, boston.target,\\\n", - " cv = 7)\n", - "scores.mean() " - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "source": [ - "# 使用天涯bbs数据" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": { - "ExecuteTime": { - "end_time": "2018-05-29T07:23:08.949140Z", - "start_time": "2018-05-29T07:23:08.554345Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
titlelinkauthorauthor_pageclickreplytime
0【民间语文第161期】宁波px启示:船进港湾人应上岸/post-free-2849477-1.shtml贾也http://www.tianya.cn/5049945019467527032012-10-29 07:59
1宁波镇海PX项目引发群体上访 当地政府发布说明(转载)/post-free-2839539-1.shtml无上卫士ABChttp://www.tianya.cn/743418358824410412012-10-24 12:41
\n", - "
" - ], - "text/plain": [ - " title link author \\\n", - "0 【民间语文第161期】宁波px启示:船进港湾人应上岸 /post-free-2849477-1.shtml 贾也 \n", - "1 宁波镇海PX项目引发群体上访 当地政府发布说明(转载) /post-free-2839539-1.shtml 无上卫士ABC \n", - "\n", - " author_page click reply time \n", - "0 http://www.tianya.cn/50499450 194675 2703 2012-10-29 07:59 \n", - "1 http://www.tianya.cn/74341835 88244 1041 2012-10-24 12:41 " - ] - }, - "execution_count": 1, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import pandas as pd\n", - "\n", - "df = pd.read_csv('../data/tianya_bbs_threads_list.txt', sep = \"\\t\", header=None)\n", - "df=df.rename(columns = {0:'title', 1:'link', 2:'author',3:'author_page', 4:'click', 5:'reply', 6:'time'})\n", - "df[:2]" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": { - "ExecuteTime": { - "end_time": "2018-05-29T07:23:27.984100Z", - "start_time": "2018-05-29T07:23:27.969145Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [], - "source": [ - "# 定义这个函数的目的是让读者感受到:\n", - "# 抽取不同的样本,得到的结果完全不同。\n", - "def randomSplit(dataX, dataY, num):\n", - " dataX_train = []\n", - " dataX_test = []\n", - " dataY_train = []\n", - " dataY_test = []\n", - " import random\n", - " test_index = random.sample(range(len(df)), num)\n", - " for k in range(len(dataX)):\n", - " if k in test_index:\n", - " dataX_test.append([dataX[k]])\n", - " dataY_test.append(dataY[k])\n", - " else:\n", - " dataX_train.append([dataX[k]])\n", - " dataY_train.append(dataY[k])\n", - " return dataX_train, dataX_test, dataY_train, dataY_test, " - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": { - "ExecuteTime": { - "end_time": "2018-05-29T07:23:28.537926Z", - "start_time": "2018-05-29T07:23:28.509765Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [ - { - "ename": "NameError", - "evalue": "name 'linear_model' is not defined", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 7\u001b[0m np.log(df.reply+1), 20)\n\u001b[1;32m 8\u001b[0m \u001b[0;31m# Create linear regression object\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 9\u001b[0;31m \u001b[0mregr\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mlinear_model\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mLinearRegression\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 10\u001b[0m \u001b[0;31m# Train the model using the training sets\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 11\u001b[0m \u001b[0mregr\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfit\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdata_X_train\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdata_y_train\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mNameError\u001b[0m: name 'linear_model' is not defined" - ] - } - ], - "source": [ - "import numpy as np\n", - "\n", - "# Use only one feature\n", - "data_X = df.reply\n", - "# Split the data into training/testing sets\n", - "data_X_train, data_X_test, data_y_train, data_y_test = randomSplit(np.log(df.click+1), \n", - " np.log(df.reply+1), 20)\n", - "# Create linear regression object\n", - "regr = linear_model.LinearRegression()\n", - "# Train the model using the training sets\n", - "regr.fit(data_X_train, data_y_train)\n", - "# Explained variance score: 1 is perfect prediction\n", - "print('Variance score: %.2f' % regr.score(data_X_test, data_y_test))" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": { - "ExecuteTime": { - "end_time": "2018-05-29T07:23:16.208659Z", - "start_time": "2018-05-29T07:23:16.054583Z" - } - }, - "outputs": [ - { - "ename": "NameError", - "evalue": "name 'data_X_train' is not defined", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mdata_X_train\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;36m3\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[0;31mNameError\u001b[0m: name 'data_X_train' is not defined" - ] - } - ], - "source": [ - "data_X_train[:3]\n" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T07:26:38.754002Z", - "start_time": "2018-04-29T07:26:38.751117Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [], - "source": [ - "y_true, y_pred = data_y_test, regr.predict(data_X_test)" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T07:26:41.635527Z", - "start_time": "2018-04-29T07:26:41.541620Z" - }, - "slideshow": { - "slide_type": "fragment" - } - }, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "plt.scatter(y_pred, y_true, color='black')\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T07:27:00.422795Z", - "start_time": "2018-04-29T07:27:00.326748Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# Plot outputs\n", - "plt.scatter(data_X_test, data_y_test, color='black')\n", - "plt.plot(data_X_test, regr.predict(data_X_test), color='blue', linewidth=3)\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T07:27:36.147084Z", - "start_time": "2018-04-29T07:27:36.142088Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "('Coefficients: \\n', array([ 0.68334304]))" - ] - }, - "execution_count": 29, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# The coefficients\n", - "'Coefficients: \\n', regr.coef_" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T07:27:48.770254Z", - "start_time": "2018-04-29T07:27:48.765411Z" - }, - "slideshow": { - "slide_type": "fragment" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "'Residual sum of squares: 0.40'" - ] - }, - "execution_count": 30, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# The mean square error\n", - "\"Residual sum of squares: %.2f\" % np.mean((regr.predict(data_X_test) - data_y_test) ** 2)" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T07:27:56.521151Z", - "start_time": "2018-04-29T07:27:56.496715Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [], - "source": [ - "df.click_log = [[np.log(df.click[i]+1)] for i in range(len(df))]\n", - "df.reply_log = [[np.log(df.reply[i]+1)] for i in range(len(df))]" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T07:28:02.712616Z", - "start_time": "2018-04-29T07:28:02.701169Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "'Variance score: 0.62'" - ] - }, - "execution_count": 32, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "from sklearn.cross_validation import train_test_split\n", - "Xs_train, Xs_test, y_train, y_test = train_test_split(df.click_log, df.reply_log,test_size=0.2, random_state=0)\n", - "\n", - "# Create linear regression object\n", - "regr = linear_model.LinearRegression()\n", - "# Train the model using the training sets\n", - "regr.fit(Xs_train, y_train)\n", - "# Explained variance score: 1 is perfect prediction\n", - "'Variance score: %.2f' % regr.score(Xs_test, y_test)" - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T07:28:16.645996Z", - "start_time": "2018-04-29T07:28:16.549017Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# Plot outputs\n", - "plt.scatter(Xs_test, y_test, color='black')\n", - "plt.plot(Xs_test, regr.predict(Xs_test), color='blue', linewidth=3)\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T07:28:41.441426Z", - "start_time": "2018-04-29T07:28:41.428476Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "-0.68370073919430563" - ] - }, - "execution_count": 34, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "from sklearn.cross_validation import cross_val_score\n", - "\n", - "regr = linear_model.LinearRegression()\n", - "scores = cross_val_score(regr, df.click_log, \\\n", - " df.reply_log, cv = 3)\n", - "scores.mean() " - ] - }, - { - "cell_type": "code", - "execution_count": 35, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T07:29:00.237224Z", - "start_time": "2018-04-29T07:29:00.220565Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "-0.71881497228209845" - ] - }, - "execution_count": 35, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "regr = linear_model.LinearRegression()\n", - "scores = cross_val_score(regr, df.click_log, \n", - " df.reply_log, cv =5)\n", - "scores.mean() " - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "source": [ - "> # 使用sklearn做logistic回归\n", - "***\n", - "\n", - "王成军\n", - "\n", - "wangchengjun@nju.edu.cn\n", - "\n", - "计算传播网 http://computational-communication.com" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "subslide" - } - }, - "source": [ - "- logistic回归是一个分类算法而不是一个回归算法。\n", - "- 可根据已知的一系列因变量估计离散数值(比方说二进制数值 0 或 1 ,是或否,真或假)。\n", - "- 简单来说,它通过将数据拟合进一个逻辑函数(logistic function)来预估一个事件出现的概率。\n", - "- 因此,它也被叫做逻辑回归。因为它预估的是概率,所以它的输出值大小在 0 和 1 之间(正如所预计的一样)。" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "subslide" - } - }, - "source": [ - "$$odds= \\frac{p}{1-p} = \\frac{probability\\: of\\: event\\: occurrence} {probability \\:of \\:not\\: event\\: occurrence}$$" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "fragment" - } - }, - "source": [ - "$$ln(odds)= ln(\\frac{p}{1-p})$$" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "fragment" - } - }, - "source": [ - "$$logit(x) = ln(\\frac{p}{1-p}) = b_0+b_1X_1+b_2X_2+b_3X_3....+b_kX_k$$" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "subslide" - } - }, - "source": [ - "![](./img/logistic.jpg)" - ] - }, - { - "cell_type": "code", - "execution_count": 50, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T07:46:50.277195Z", - "start_time": "2018-04-29T07:46:50.272229Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [], - "source": [ - "repost = []\n", - "for i in df.title:\n", - " if u'转载' in i:\n", - " repost.append(1)\n", - " else:\n", - " repost.append(0)" - ] - }, - { - "cell_type": "code", - "execution_count": 51, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T07:47:06.292994Z", - "start_time": "2018-04-29T07:47:06.270715Z" - }, - "slideshow": { - "slide_type": "fragment" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "[[194675, 2703], [88244, 1041], [82779, 625]]" - ] - }, - "execution_count": 51, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "data_X = [[df.click[i], df.reply[i]] for i in range(len(df))]\n", - "data_X[:3]" - ] - }, - { - "cell_type": "code", - "execution_count": 52, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T07:47:45.269303Z", - "start_time": "2018-04-29T07:47:45.259792Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "0.61241970021413272" - ] - }, - "execution_count": 52, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "from sklearn.linear_model import LogisticRegression\n", - "df['repost'] = repost\n", - "model = LogisticRegression()\n", - "model.fit(data_X,df.repost)\n", - "model.score(data_X,df.repost)" - ] - }, - { - "cell_type": "code", - "execution_count": 53, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T07:47:59.648431Z", - "start_time": "2018-04-29T07:47:59.633936Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [], - "source": [ - "def randomSplitLogistic(dataX, dataY, num):\n", - " dataX_train = []\n", - " dataX_test = []\n", - " dataY_train = []\n", - " dataY_test = []\n", - " import random\n", - " test_index = random.sample(range(len(df)), num)\n", - " for k in range(len(dataX)):\n", - " if k in test_index:\n", - " dataX_test.append(dataX[k])\n", - " dataY_test.append(dataY[k])\n", - " else:\n", - " dataX_train.append(dataX[k])\n", - " dataY_train.append(dataY[k])\n", - " return dataX_train, dataX_test, dataY_train, dataY_test, " - ] - }, - { - "cell_type": "code", - "execution_count": 54, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T07:48:27.726443Z", - "start_time": "2018-04-29T07:48:27.710922Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "'Variance score: 0.45'" - ] - }, - "execution_count": 54, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Split the data into training/testing sets\n", - "data_X_train, data_X_test, data_y_train, data_y_test = randomSplitLogistic(data_X, df.repost, 20)\n", - "# Create logistic regression object\n", - "log_regr = LogisticRegression()\n", - "# Train the model using the training sets\n", - "log_regr.fit(data_X_train, data_y_train)\n", - "# Explained variance score: 1 is perfect prediction\n", - "'Variance score: %.2f' % log_regr.score(data_X_test, data_y_test)" - ] - }, - { - "cell_type": "code", - "execution_count": 55, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T07:48:56.873331Z", - "start_time": "2018-04-29T07:48:56.870219Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [], - "source": [ - "y_true, y_pred = data_y_test, log_regr.predict(data_X_test)\n" - ] - }, - { - "cell_type": "code", - "execution_count": 43, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T07:39:12.344043Z", - "start_time": "2018-04-29T07:39:12.338223Z" - }, - "slideshow": { - "slide_type": "fragment" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "([1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],\n", - " array([0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]))" - ] - }, - "execution_count": 43, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "y_true, y_pred" - ] - }, - { - "cell_type": "code", - "execution_count": 44, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T07:39:13.175680Z", - "start_time": "2018-04-29T07:39:13.171386Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " precision recall f1-score support\n", - "\n", - " 0 0.50 0.17 0.25 6\n", - " 1 0.72 0.93 0.81 14\n", - "\n", - "avg / total 0.66 0.70 0.64 20\n", - "\n" - ] - } - ], - "source": [ - "print(classification_report(y_true, y_pred))" - ] - }, - { - "cell_type": "code", - "execution_count": 56, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T07:51:43.039620Z", - "start_time": "2018-04-29T07:51:43.034812Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [], - "source": [ - "from sklearn.cross_validation import train_test_split\n", - "Xs_train, Xs_test, y_train, y_test = train_test_split(data_X, df.repost, test_size=0.2, random_state=42)" - ] - }, - { - "cell_type": "code", - "execution_count": 57, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T07:51:47.690742Z", - "start_time": "2018-04-29T07:51:47.683127Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "'Variance score: 0.60'" - ] - }, - "execution_count": 57, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Create logistic regression object\n", - "log_regr = LogisticRegression()\n", - "# Train the model using the training sets\n", - "log_regr.fit(Xs_train, y_train)\n", - "# Explained variance score: 1 is perfect prediction\n", - "'Variance score: %.2f' % log_regr.score(Xs_test, y_test)" - ] - }, - { - "cell_type": "code", - "execution_count": 58, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T07:51:55.780061Z", - "start_time": "2018-04-29T07:51:55.771924Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Logistic score for test set: 0.595745\n", - "Logistic score for training set: 0.613941\n", - " precision recall f1-score support\n", - "\n", - " 0 1.00 0.03 0.05 39\n", - " 1 0.59 1.00 0.74 55\n", - "\n", - "avg / total 0.76 0.60 0.46 94\n", - "\n" - ] - } - ], - "source": [ - "print('Logistic score for test set: %f' % log_regr.score(Xs_test, y_test))\n", - "print('Logistic score for training set: %f' % log_regr.score(Xs_train, y_train))\n", - "y_true, y_pred = y_test, log_regr.predict(Xs_test)\n", - "print(classification_report(y_true, y_pred))" - ] - }, - { - "cell_type": "code", - "execution_count": 59, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T07:52:53.880925Z", - "start_time": "2018-04-29T07:52:53.866672Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "0.53333333333333333" - ] - }, - "execution_count": 59, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "logre = LogisticRegression()\n", - "scores = cross_val_score(logre, data_X, df.repost, cv = 3)\n", - "scores.mean() " - ] - }, - { - "cell_type": "code", - "execution_count": 60, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T07:53:26.825100Z", - "start_time": "2018-04-29T07:53:26.810871Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "0.62948717948717947" - ] - }, - "execution_count": 60, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "logre = LogisticRegression()\n", - "data_X_scale = scale(data_X)\n", - "# The importance of preprocessing in data science and the machine learning pipeline I: \n", - "scores = cross_val_score(logre, data_X_scale, df.repost, cv = 3)\n", - "scores.mean() " - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "source": [ - "> # 使用sklearn实现贝叶斯预测\n", - "***\n", - "\n", - "王成军\n", - "\n", - "wangchengjun@nju.edu.cn\n", - "\n", - "计算传播网 http://computational-communication.com" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "subslide" - } - }, - "source": [ - "# Naive Bayes algorithm\n", - "\n", - "It is a classification technique based on Bayes’ Theorem with an assumption of independence among predictors. \n", - "\n", - "In simple terms, a Naive Bayes classifier assumes that the presence of a particular feature in a class is unrelated to the presence of any other feature. \n", - "\n", - "why it is known as ‘Naive’? For example, a fruit may be considered to be an apple if it is red, round, and about 3 inches in diameter. Even if these features depend on each other or upon the existence of the other features, all of these properties independently contribute to the probability that this fruit is an apple." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "subslide" - } - }, - "source": [ - "贝叶斯定理为使用$p(c)$, $p(x)$, $p(x|c)$ 计算后验概率$P(c|x)$提供了方法:" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "fragment" - } - }, - "source": [ - "$$\n", - "p(c|x) = \\frac{p(x|c) p(c)}{p(x)}\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "fragment" - } - }, - "source": [ - "- P(c|x) is the posterior probability of class (c, target) given predictor (x, attributes).\n", - "- P(c) is the prior probability of class.\n", - "- P(x|c) is the likelihood which is the probability of predictor given class.\n", - "- P(x) is the prior probability of predictor." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "subslide" - } - }, - "source": [ - "![](./img/Bayes_41.png)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "subslide" - } - }, - "source": [ - "Step 1: Convert the data set into a frequency table\n", - "\n", - "Step 2: Create Likelihood table by finding the probabilities like:\n", - "- p(Overcast) = 0.29, p(rainy) = 0.36, p(sunny) = 0.36\n", - "- p(playing) = 0.64, p(rest) = 0.36\n", - "\n", - "Step 3: Now, use Naive Bayesian equation to calculate the posterior probability for each class. The class with the highest posterior probability is the outcome of prediction." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "subslide" - } - }, - "source": [ - "## Problem: Players will play if weather is sunny. Is this statement is correct?\n", - "\n", - "We can solve it using above discussed method of posterior probability.\n", - "\n", - "$P(Yes | Sunny) = \\frac{P( Sunny | Yes) * P(Yes) } {P (Sunny)}$\n", - "\n", - "Here we have P (Sunny |Yes) = 3/9 = 0.33, P(Sunny) = 5/14 = 0.36, P( Yes)= 9/14 = 0.64\n", - "\n", - "Now, $P (Yes | Sunny) = \\frac{0.33 * 0.64}{0.36} = 0.60$, which has higher probability." - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": { - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "'ABCMeta BaseDiscreteNB BaseEstimator BaseNB BernoulliNB ClassifierMixin GaussianNB LabelBinarizer MultinomialNB __all__ __builtins__ __doc__ __file__ __name__ __package__ _check_partial_fit_first_call abstractmethod binarize check_X_y check_array check_is_fitted in1d issparse label_binarize logsumexp np safe_sparse_dot six'" - ] - }, - "execution_count": 17, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "from sklearn import naive_bayes\n", - "' '.join(dir(naive_bayes)) " - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "fragment" - } - }, - "source": [ - "- naive_bayes.GaussianNB\tGaussian Naive Bayes (GaussianNB)\n", - "- naive_bayes.MultinomialNB([alpha, ...])\tNaive Bayes classifier for multinomial models\n", - "- naive_bayes.BernoulliNB([alpha, binarize, ...])\tNaive Bayes classifier for multivariate Bernoulli models." - ] - }, - { - "cell_type": "code", - "execution_count": 61, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T08:02:37.644606Z", - "start_time": "2018-04-29T08:02:37.635952Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [], - "source": [ - "#Import Library of Gaussian Naive Bayes model\n", - "from sklearn.naive_bayes import GaussianNB\n", - "import numpy as np\n", - "\n", - "#assigning predictor and target variables\n", - "x= np.array([[-3,7],[1,5], [1,2], [-2,0], [2,3], [-4,0], [-1,1], [1,1], [-2,2], [2,7], [-4,1], [-2,7]])\n", - "Y = np.array([3, 3, 3, 3, 4, 3, 3, 4, 3, 4, 4, 4])" - ] - }, - { - "cell_type": "code", - "execution_count": 62, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T08:02:52.828101Z", - "start_time": "2018-04-29T08:02:52.818463Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "array([4, 3])" - ] - }, - "execution_count": 62, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "#Create a Gaussian Classifier\n", - "model = GaussianNB()\n", - "\n", - "# Train the model using the training sets \n", - "model.fit(x[:8], Y[:8])\n", - "\n", - "#Predict Output \n", - "predicted= model.predict([[1,2],[3,4]])\n", - "predicted" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "subslide" - } - }, - "source": [ - "# cross-validation \n", - " \n", - "k-fold CV, the training set is split into k smaller sets (other approaches are described below, but generally follow the same principles). The following procedure is followed for each of the k “folds”:\n", - "- A model is trained using k-1 of the folds as training data;\n", - "- the resulting model is validated on the remaining part of the data (i.e., it is used as a test set to compute a performance measure such as accuracy)." - ] - }, - { - "cell_type": "code", - "execution_count": 63, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T08:04:04.297675Z", - "start_time": "2018-04-29T08:04:04.273413Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "array([41, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", - " 0, 0, 0])" - ] - }, - "execution_count": 63, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "data_X_train, data_X_test, data_y_train, data_y_test = randomSplit(df.click, df.reply, 20)\n", - "# Train the model using the training sets \n", - "model.fit(data_X_train, data_y_train)\n", - "\n", - "#Predict Output \n", - "predicted= model.predict(data_X_test)\n", - "predicted" - ] - }, - { - "cell_type": "code", - "execution_count": 64, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T08:04:34.184513Z", - "start_time": "2018-04-29T08:04:34.178511Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "0.65000000000000002" - ] - }, - "execution_count": 64, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "model.score(data_X_test, data_y_test)" - ] - }, - { - "cell_type": "code", - "execution_count": 66, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T08:05:04.297453Z", - "start_time": "2018-04-29T08:05:04.249311Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/Users/datalab/Applications/anaconda/lib/python3.5/site-packages/sklearn/cross_validation.py:516: Warning: The least populated class in y has only 1 members, which is too few. The minimum number of labels for any class cannot be less than n_folds=7.\n", - " % (min_labels, self.n_folds)), Warning)\n" - ] - }, - { - "data": { - "text/plain": [ - "0.53413410073295453" - ] - }, - "execution_count": 66, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "from sklearn.cross_validation import cross_val_score\n", - "\n", - "model = GaussianNB()\n", - "scores = cross_val_score(model, [[c] for c in df.click],\\\n", - " df.reply, cv = 7)\n", - "scores.mean() " - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "source": [ - "> # 使用sklearn实现决策树\n", - "***\n", - "\n", - "王成军\n", - "\n", - "wangchengjun@nju.edu.cn\n", - "\n", - "计算传播网 http://computational-communication.com" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "subslide" - } - }, - "source": [ - "# 决策树\n", - "- 这个监督式学习算法通常被用于分类问题。\n", - "- 它同时适用于分类变量和连续因变量。\n", - "- 在这个算法中,我们将总体分成两个或更多的同类群。\n", - "- 这是根据最重要的属性或者自变量来分成尽可能不同的组别。\n" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "subslide" - } - }, - "source": [ - "![](./img/tree.png)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "subslide" - } - }, - "source": [ - "![](./img/playtree.jpg)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "subslide" - } - }, - "source": [ - "## 在上图中你可以看到,根据多种属性,人群被分成了不同的四个小组,来判断 “他们会不会去玩”。\n", - "### 为了把总体分成不同组别,需要用到许多技术,比如说 Gini、Information Gain、Chi-square、entropy。" - ] - }, - { - "cell_type": "code", - "execution_count": 67, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T08:10:20.871345Z", - "start_time": "2018-04-29T08:10:20.855125Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [], - "source": [ - "from sklearn import tree\n", - "model = tree.DecisionTreeClassifier(criterion='gini')" - ] - }, - { - "cell_type": "code", - "execution_count": 68, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T08:10:49.988277Z", - "start_time": "2018-04-29T08:10:49.973060Z" - }, - "slideshow": { - "slide_type": "fragment" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "0.91275167785234901" - ] - }, - "execution_count": 68, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "data_X_train, data_X_test, data_y_train, data_y_test = randomSplitLogistic(data_X, df.repost, 20)\n", - "model.fit(data_X_train,data_y_train)\n", - "model.score(data_X_train,data_y_train)" - ] - }, - { - "cell_type": "code", - "execution_count": 69, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T08:11:12.730866Z", - "start_time": "2018-04-29T08:11:12.725782Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "array([0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0])" - ] - }, - "execution_count": 69, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Predict\n", - "model.predict(data_X_test)" - ] - }, - { - "cell_type": "code", - "execution_count": 70, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T08:11:28.411441Z", - "start_time": "2018-04-29T08:11:28.397481Z" - }, - "slideshow": { - "slide_type": "fragment" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "0.33461538461538459" - ] - }, - "execution_count": 70, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# crossvalidation\n", - "scores = cross_val_score(model, data_X, df.repost, cv = 3)\n", - "scores.mean() " - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "source": [ - "> # 使用sklearn实现SVM支持向量机\n", - "***\n", - "\n", - "王成军\n", - "\n", - "wangchengjun@nju.edu.cn\n", - "\n", - "计算传播网 http://computational-communication.com" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "subslide" - } - }, - "source": [ - "![](./img/svm.jpg)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "subslide" - } - }, - "source": [ - "- 将每个数据在N维空间中用点标出(N是你所有的特征总数),每个特征的值是一个坐标的值。\n", - " - 举个例子,如果我们只有身高和头发长度两个特征,我们会在二维空间中标出这两个变量,每个点有两个坐标(这些坐标叫做支持向量)。" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "subslide" - } - }, - "source": [ - "![](./img/xyplot.png)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "subslide" - } - }, - "source": [ - "- 现在,我们会找到将两组不同数据分开的一条直线。\n", - " - 两个分组中距离最近的两个点到这条线的距离同时最优化。" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "subslide" - } - }, - "source": [ - "![](./img/sumintro.png)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "subslide" - } - }, - "source": [ - "## 上面示例中的黑线将数据分类优化成两个小组\n", - "- 两组中距离最近的点(图中A、B点)到达黑线的距离满足最优条件。\n", - " - 这条直线就是我们的分割线。接下来,测试数据落到直线的哪一边,我们就将它分到哪一类去。" - ] - }, - { - "cell_type": "code", - "execution_count": 71, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T08:17:29.788250Z", - "start_time": "2018-04-29T08:17:29.785022Z" - } - }, - "outputs": [], - "source": [ - "from sklearn import svm\n", - "# Create SVM classification object \n", - "model=svm.SVC() " - ] - }, - { - "cell_type": "code", - "execution_count": 72, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T08:17:31.035310Z", - "start_time": "2018-04-29T08:17:31.030713Z" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "'LinearSVC LinearSVR NuSVC NuSVR OneClassSVM SVC SVR __all__ __builtins__ __cached__ __doc__ __file__ __loader__ __name__ __package__ __path__ __spec__ base bounds classes l1_min_c liblinear libsvm libsvm_sparse'" - ] - }, - "execution_count": 72, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "' '.join(dir(svm))" - ] - }, - { - "cell_type": "code", - "execution_count": 73, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T08:17:41.872379Z", - "start_time": "2018-04-29T08:17:41.849759Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "0.90380313199105144" - ] - }, - "execution_count": 73, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "data_X_train, data_X_test, data_y_train, data_y_test = randomSplitLogistic(data_X, df.repost, 20)\n", - "model.fit(data_X_train,data_y_train)\n", - "model.score(data_X_train,data_y_train)" - ] - }, - { - "cell_type": "code", - "execution_count": 74, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T08:17:47.661313Z", - "start_time": "2018-04-29T08:17:47.655841Z" - }, - "slideshow": { - "slide_type": "fragment" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1])" - ] - }, - "execution_count": 74, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Predict\n", - "model.predict(data_X_test)" - ] - }, - { - "cell_type": "code", - "execution_count": 75, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T08:18:00.419986Z", - "start_time": "2018-04-29T08:17:58.671257Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [], - "source": [ - "# crossvalidation\n", - "scores = []\n", - "cvs = [3, 5, 10, 25, 50, 75, 100]\n", - "for i in cvs:\n", - " score = cross_val_score(model, data_X, df.repost,\n", - " cv = i)\n", - " scores.append(score.mean() ) # Try to tune cv\n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": 76, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T08:18:05.493658Z", - "start_time": "2018-04-29T08:18:05.359658Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "plt.plot(cvs, scores, 'b-o')\n", - "plt.xlabel('$cv$', fontsize = 20)\n", - "plt.ylabel('$Score$', fontsize = 20)\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "source": [ - "\n", - "\n", - "> # 泰坦尼克号数据分析\n", - "\n", - "王成军\n", - "\n", - "wangchengjun@nju.edu.cn\n", - "\n", - "计算传播网 http://computational-communication.com" - ] - }, - { - "cell_type": "code", - "execution_count": 40, - "metadata": { - "ExecuteTime": { - "end_time": "2018-05-29T07:31:28.492497Z", - "start_time": "2018-05-29T07:31:28.488728Z" - }, - "slideshow": { - "slide_type": "slide" - } - }, - "outputs": [], - "source": [ - "import numpy as np\n", - "from sklearn import tree\n", - "import warnings \n", - "warnings.filterwarnings(\"ignore\") \n" - ] - }, - { - "cell_type": "code", - "execution_count": 41, - "metadata": { - "ExecuteTime": { - "end_time": "2018-05-29T07:31:48.879245Z", - "start_time": "2018-05-29T07:31:48.872163Z" - }, - "slideshow": { - "slide_type": "slide" - } - }, - "outputs": [], - "source": [ - "import pandas as pd\n", - "train = pd.read_csv('../data/tatanic_train.csv', sep = \",\")" - ] - }, - { - "cell_type": "code", - "execution_count": 42, - "metadata": { - "ExecuteTime": { - "end_time": "2018-05-29T07:31:52.234171Z", - "start_time": "2018-05-29T07:31:52.216747Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Unnamed: 0PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
00103Braund, Mr. Owen Harrismale22.010A/5 211717.2500NaNS
11211Cumings, Mrs. John Bradley (Florence Briggs Th...female38.010PC 1759971.2833C85C
22313Heikkinen, Miss. Lainafemale26.000STON/O2. 31012827.9250NaNS
33411Futrelle, Mrs. Jacques Heath (Lily May Peel)female35.01011380353.1000C123S
44503Allen, Mr. William Henrymale35.0003734508.0500NaNS
\n", - "
" - ], - "text/plain": [ - " Unnamed: 0 PassengerId Survived Pclass \\\n", - "0 0 1 0 3 \n", - "1 1 2 1 1 \n", - "2 2 3 1 3 \n", - "3 3 4 1 1 \n", - "4 4 5 0 3 \n", - "\n", - " Name Sex Age SibSp \\\n", - "0 Braund, Mr. Owen Harris male 22.0 1 \n", - "1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 \n", - "2 Heikkinen, Miss. Laina female 26.0 0 \n", - "3 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 \n", - "4 Allen, Mr. William Henry male 35.0 0 \n", - "\n", - " Parch Ticket Fare Cabin Embarked \n", - "0 0 A/5 21171 7.2500 NaN S \n", - "1 0 PC 17599 71.2833 C85 C \n", - "2 0 STON/O2. 3101282 7.9250 NaN S \n", - "3 0 113803 53.1000 C123 S \n", - "4 0 373450 8.0500 NaN S " - ] - }, - "execution_count": 42, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "train.head() " - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "metadata": { - "ExecuteTime": { - "end_time": "2018-05-29T07:28:58.070575Z", - "start_time": "2018-05-29T07:28:57.897862Z" - }, - "slideshow": { - "slide_type": "slide" - } - }, - "outputs": [], - "source": [ - "train[\"Age\"] = train[\"Age\"].fillna(train[\"Age\"].median())\n", - "train[\"Fare\"] = train[\"Fare\"].fillna(train[\"Fare\"].median())\n", - "#Convert the male and female groups to integer form\n", - "train[\"Sex\"][train[\"Sex\"] == \"male\"] = 0\n", - "train[\"Sex\"][train[\"Sex\"] == \"female\"] = 1\n", - "#Impute the Embarked variable\n", - "train[\"Embarked\"] = train[\"Embarked\"].fillna('S')\n", - "#Convert the Embarked classes to integer form\n", - "train[\"Embarked\"][train[\"Embarked\"] == \"S\"] = 0\n", - "train[\"Embarked\"][train[\"Embarked\"] == \"C\"] = 1\n", - "train[\"Embarked\"][train[\"Embarked\"] == \"Q\"] = 2" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "metadata": { - "ExecuteTime": { - "end_time": "2018-05-29T07:28:08.358884Z", - "start_time": "2018-05-29T07:28:08.346226Z" - }, - "slideshow": { - "slide_type": "slide" - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[ 0.12294397 0.31274009 0.23680307 0.32751287]\n", - "0.977553310887\n" - ] - } - ], - "source": [ - "#Create the target and features numpy arrays: target, features_one\n", - "target = train['Survived'].values\n", - "features_one = train[[\"Pclass\", \"Sex\", \"Age\", \"Fare\"]].values\n", - "\n", - "#Fit your first decision tree: my_tree_one\n", - "my_tree_one = tree.DecisionTreeClassifier()\n", - "my_tree_one = my_tree_one.fit(features_one, target)\n", - "#Look at the importance of the included features and print the score\n", - "print(my_tree_one.feature_importances_)\n", - "print(my_tree_one.score(features_one, target))" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "metadata": { - "ExecuteTime": { - "end_time": "2018-05-29T07:28:15.915998Z", - "start_time": "2018-05-29T07:28:15.705994Z" - }, - "slideshow": { - "slide_type": "slide" - } - }, - "outputs": [], - "source": [ - "test = pd.read_csv('../data/tatanic_test.csv', sep = \",\")\n", - "# Impute the missing value with the median\n", - "test.Fare[152] = test.Fare.median()\n", - "test[\"Age\"] = test[\"Age\"].fillna(test[\"Age\"].median())\n", - "#Convert the male and female groups to integer form\n", - "test[\"Sex\"][test[\"Sex\"] == \"male\"] = 0\n", - "test[\"Sex\"][test[\"Sex\"] == \"female\"] = 1\n", - "\n", - "#Impute the Embarked variable\n", - "test[\"Embarked\"] = test[\"Embarked\"].fillna('S')\n", - "#Convert the Embarked classes to integer form\n", - "test[\"Embarked\"][test[\"Embarked\"] == \"S\"] = 0\n", - "test[\"Embarked\"][test[\"Embarked\"] == \"C\"] = 1\n", - "test[\"Embarked\"][test[\"Embarked\"] == \"Q\"] = 2\n", - "\n", - "# Extract the features from the test set: Pclass, Sex, Age, and Fare.\n", - "test_features = test[[\"Pclass\",\"Sex\", \"Age\", \"Fare\"]].values\n", - "\n", - "# Make your prediction using the test set\n", - "my_prediction = my_tree_one.predict(test_features)\n", - "\n", - "# Create a data frame with two columns: PassengerId & Survived. Survived contains your predictions\n", - "PassengerId =np.array(test['PassengerId']).astype(int)\n", - "my_solution = pd.DataFrame(my_prediction, PassengerId, columns = [\"Survived\"])\n" - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "metadata": { - "ExecuteTime": { - "end_time": "2018-05-29T07:28:18.081288Z", - "start_time": "2018-05-29T07:28:18.074414Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Survived
8920
8930
8941
\n", - "
" - ], - "text/plain": [ - " Survived\n", - "892 0\n", - "893 0\n", - "894 1" - ] - }, - "execution_count": 33, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "my_solution[:3]" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": { - "ExecuteTime": { - "end_time": "2018-05-29T07:25:44.488717Z", - "start_time": "2018-05-29T07:25:44.484381Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "(418, 1)" - ] - }, - "execution_count": 17, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Check that your data frame has 418 entries\n", - "my_solution.shape" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "metadata": { - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [], - "source": [ - "# Write your solution to a csv file with the name my_solution.csv \n", - "my_solution.to_csv(\"../data/tatanic_solution_one.csv\", \n", - " index_label = [\"PassengerId\"])" - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "metadata": { - "ExecuteTime": { - "end_time": "2018-05-29T07:28:26.996353Z", - "start_time": "2018-05-29T07:28:26.982601Z" - }, - "slideshow": { - "slide_type": "slide" - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.905723905724\n" - ] - } - ], - "source": [ - "# Create a new array with the added features: features_two\n", - "features_two = train[[\"Pclass\",\"Age\",\"Sex\",\"Fare\",\\\n", - " \"SibSp\", \"Parch\", \"Embarked\"]].values\n", - "\n", - "#Control overfitting by setting \"max_depth\" to 10 and \"min_samples_split\" to 5 : my_tree_two\n", - "max_depth = 10\n", - "min_samples_split = 5\n", - "my_tree_two = tree.DecisionTreeClassifier(max_depth = max_depth, \n", - " min_samples_split = min_samples_split, \n", - " random_state = 1)\n", - "my_tree_two = my_tree_two.fit(features_two, target)\n", - "\n", - "#Print the score of the new decison tree\n", - "print(my_tree_two.score(features_two, target))" - ] - }, - { - "cell_type": "code", - "execution_count": 35, - "metadata": { - "ExecuteTime": { - "end_time": "2018-05-29T07:28:28.033226Z", - "start_time": "2018-05-29T07:28:28.018293Z" - }, - "slideshow": { - "slide_type": "slide" - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.979797979798\n" - ] - } - ], - "source": [ - "# create a new train set with the new variable\n", - "train_two = train\n", - "train_two['family_size'] = train.SibSp + train.Parch + 1\n", - "\n", - "# Create a new decision tree my_tree_three\n", - "features_three = train[[\"Pclass\", \"Sex\", \"Age\", \\\n", - " \"Fare\", \"SibSp\", \"Parch\", \"family_size\"]].values\n", - "\n", - "my_tree_three = tree.DecisionTreeClassifier()\n", - "my_tree_three = my_tree_three.fit(features_three, target)\n", - "\n", - "# Print the score of this decision tree\n", - "print(my_tree_three.score(features_three, target))\n" - ] - }, - { - "cell_type": "code", - "execution_count": 36, - "metadata": { - "ExecuteTime": { - "end_time": "2018-05-29T07:28:32.678968Z", - "start_time": "2018-05-29T07:28:32.465958Z" - }, - "slideshow": { - "slide_type": "slide" - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.939393939394\n", - "418\n", - "[0 0 0]\n" - ] - } - ], - "source": [ - "#Import the `RandomForestClassifier`\n", - "from sklearn.ensemble import RandomForestClassifier\n", - "\n", - "#We want the Pclass, Age, Sex, Fare,SibSp, Parch, and Embarked variables\n", - "features_forest = train[[\"Pclass\", \"Age\", \"Sex\", \"Fare\", \"SibSp\", \"Parch\", \"Embarked\"]].values\n", - "\n", - "#Building the Forest: my_forest\n", - "n_estimators = 100\n", - "forest = RandomForestClassifier(max_depth = 10, min_samples_split=2, \n", - " n_estimators = n_estimators, random_state = 1)\n", - "my_forest = forest.fit(features_forest, target)\n", - "\n", - "#Print the score of the random forest\n", - "print(my_forest.score(features_forest, target))\n", - "\n", - "#Compute predictions and print the length of the prediction vector:test_features, pred_forest\n", - "test_features = test[[\"Pclass\", \"Age\", \"Sex\", \"Fare\", \"SibSp\", \"Parch\", \"Embarked\"]].values\n", - "pred_forest = my_forest.predict(test_features)\n", - "print(len(test_features))\n", - "print(pred_forest[:3])" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "metadata": { - "ExecuteTime": { - "end_time": "2018-05-29T07:26:25.602062Z", - "start_time": "2018-05-29T07:26:25.572689Z" - }, - "slideshow": { - "slide_type": "slide" - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[ 0.14130255 0.17906027 0.41616727 0.17938711 0.05039699 0.01923751\n", - " 0.0144483 ]\n", - "[ 0.10384741 0.20139027 0.31989322 0.24602858 0.05272693 0.04159232\n", - " 0.03452128]\n", - "0.905723905724\n", - "0.939393939394\n" - ] - } - ], - "source": [ - "#Request and print the `.feature_importances_` attribute\n", - "print(my_tree_two.feature_importances_)\n", - "print(my_forest.feature_importances_)\n", - "\n", - "#Compute and print the mean accuracy score for both models\n", - "print(my_tree_two.score(features_two, target))\n", - "print(my_forest.score(features_two, target))" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": true, - "slideshow": { - "slide_type": "slide" - } - }, - "source": [ - "# 阅读材料\n", - "机器学习算法的要点(附 Python 和 R 代码)http://blog.csdn.net/a6225301/article/details/50479672\n", - "\n", - "The \"Python Machine Learning\" book code repository and info resource https://github.com/rasbt/python-machine-learning-book\n", - "\n", - "An Introduction to Statistical Learning (James, Witten, Hastie, Tibshirani, 2013) : Python code https://github.com/JWarmenhoven/ISLR-python\n", - "\n", - "BuildingMachineLearningSystemsWithPython https://github.com/luispedro/BuildingMachineLearningSystemsWithPython" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "source": [ - "# 作业\n", - "https://www.datacamp.com/community/tutorials/the-importance-of-preprocessing-in-data-science-and-the-machine-learning-pipeline-i-centering-scaling-and-k-nearest-neighbours" - ] - } - ], - "metadata": { - "celltoolbar": "Slideshow", - "kernelspec": { - "display_name": "Python [conda env:anaconda]", - "language": "python", - "name": "conda-env-anaconda-py" - }, - "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.4" - }, - "latex_envs": { - "bibliofile": "biblio.bib", - "cite_by": "apalike", - "current_citInitial": 1, - "eqLabelWithNumbers": true, - "eqNumInitial": 0 - }, - "toc": { - "base_numbering": 1, - "nav_menu": {}, - "number_sections": false, - "sideBar": false, - "skip_h1_title": false, - "title_cell": "Table of Contents", - "title_sidebar": "Contents", - "toc_cell": false, - "toc_position": { - "height": "780px", - "left": "1279px", - "top": "168.667px", - "width": "341px" - }, - "toc_section_display": false, - "toc_window_display": true - } - }, - "nbformat": 4, - "nbformat_minor": 1 -} diff --git a/code/09.01-machine-learning-with-sklearn.ipynb b/code/09.01-machine-learning-with-sklearn.ipynb new file mode 100755 index 0000000..cbb64ac --- /dev/null +++ b/code/09.01-machine-learning-with-sklearn.ipynb @@ -0,0 +1,2200 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "# Introducing Scikit-Learn" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "\n", + "\n", + "*This notebook contains an excerpt from the [Python Data Science Handbook](http://shop.oreilly.com/product/0636920034919.do) by Jake VanderPlas; the content is available [on GitHub](https://github.com/jakevdp/PythonDataScienceHandbook).*\n", + "\n", + "*The text is released under the [CC-BY-NC-ND license](https://creativecommons.org/licenses/by-nc-nd/3.0/us/legalcode), and code is released under the [MIT license](https://opensource.org/licenses/MIT). If you find this content useful, please consider supporting the work by [buying the book](http://shop.oreilly.com/product/0636920034919.do)!*" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "\n", + "< [What Is Machine Learning?](05.01-What-Is-Machine-Learning.ipynb) | [Contents](Index.ipynb) | [Hyperparameters and Model Validation](05.03-Hyperparameters-and-Model-Validation.ipynb) >" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "Python machine learning \n", + "\n", + "- [Scikit-Learn](http://scikit-learn.org) provides efficient versions of a large number of common algorithms.\n", + " - Scikit-Learn is characterized by a clean, uniform, and streamlined API, as well as by very useful and complete online documentation.\n", + "\n", + "> # Once you understand the basic use and syntax of Scikit-Learn for one type of model, switching to a new model or algorithm is very straightforward.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "Python machine learning \n", + "\n", + "A solid understanding of these API elements will form the foundation for understanding the deeper practical discussion of machine learning algorithms and approaches.\n", + "\n", + "This section provides an overview of the Scikit-Learn API \n", + "\n", + "- The *data representation* in Scikit-Learn\n", + "- The *Estimator* API\n", + " - a more interesting example of using these tools for exploring a set of images of hand-written digits." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Data Representation in Scikit-Learn" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "Machine learning is about creating models from data: \n", + "- How data can be represented in order to be understood by the computer.\n", + " - Tables of data." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Data as table\n", + "\n", + "A basic table is a two-dimensional grid of data\n", + "- the rows represent individual elements of the dataset\n", + "- the columns represent quantities related to each of these elements.\n", + "\n", + "For example, consider the [Iris dataset](https://en.wikipedia.org/wiki/Iris_flower_data_set), famously analyzed by Ronald Fisher in 1936.\n", + "\n", + "We can download this dataset in the form of a Pandas ``DataFrame`` using the [seaborn](http://seaborn.pydata.org/) library:" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-15T07:26:46.002170Z", + "start_time": "2018-05-15T07:26:45.988082Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
sepal_lengthsepal_widthpetal_lengthpetal_widthspecies
05.13.51.40.2setosa
14.93.01.40.2setosa
24.73.21.30.2setosa
34.63.11.50.2setosa
45.03.61.40.2setosa
\n", + "
" + ], + "text/plain": [ + " sepal_length sepal_width petal_length petal_width species\n", + "0 5.1 3.5 1.4 0.2 setosa\n", + "1 4.9 3.0 1.4 0.2 setosa\n", + "2 4.7 3.2 1.3 0.2 setosa\n", + "3 4.6 3.1 1.5 0.2 setosa\n", + "4 5.0 3.6 1.4 0.2 setosa" + ] + }, + "execution_count": 39, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import seaborn as sns\n", + "sns.set_context(\"talk\", font_scale=1.5)\n", + "\n", + "iris = sns.load_dataset('iris')\n", + "iris.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "- Each row of the data refers to a single observed flower\n", + "- The number of rows is the total number of flowers in the dataset.\n", + " - the rows of the matrix as *samples*\n", + " - the number of rows as ``n_samples``.\n", + "- each column of the data refers to a particular quantitative piece of information that describes each sample.\n", + " - the columns of the matrix as *features*\n", + " - the number of columns as ``n_features``." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "#### Features matrix\n", + "\n", + "This table layout of the information can be thought of as a ``two-dimensional numerical array or matrix``, which we will call the **features matrix**.\n", + "\n", + "- The features matrix is often stored in a variable named ``X``.\n", + "- The features matrix is assumed to be two-dimensional, with shape ``[n_samples, n_features]``, \n", + "- The features matrix is most often contained in a NumPy array or a Pandas ``DataFrame``\n", + "- some Scikit-Learn models also accept SciPy sparse matrices.\n", + "\n", + "The samples (i.e., rows) always refer to the individual objects described by the dataset.\n", + "- For example, the sample might be a flower, a person, a document, an image, a sound file, a video, an astronomical object, or anything else you can describe with a set of quantitative measurements.\n", + "\n", + "The features (i.e., columns) always refer to the distinct observations that describe each sample in a quantitative manner.\n", + "- Features are generally real-valued, but may be Boolean or discrete-valued in some cases." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "#### Target array\n", + "\n", + "In addition to the feature matrix ``X``, we also generally work with a *label* or *target* array, which by convention we will usually call ``y``.\n", + "- The target array is usually one dimensional, with length ``n_samples``\n", + "- The target array is generally contained in a NumPy array or Pandas ``Series``.\n", + "- The target array may have continuous numerical values, or discrete classes/labels.\n", + "\n", + "While some Scikit-Learn estimators do handle multiple target values in the form of a two-dimensional, ``[n_samples, n_targets]`` target array, we will primarily be working with the common case of a one-dimensional target array." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "#### Target array\n", + "\n", + "The target array is usually the quantity we want to *predict from the data*: in statistical terms, it is the dependent variable.\n", + "> For example, in the preceding data we may wish to construct a model that can predict the species of flower based on the other measurements; in this case, the ``species`` column would be considered the target array.\n", + "\n", + "With this target array in mind, we can use Seaborn (see [Visualization With Seaborn](04.14-Visualization-With-Seaborn.ipynb)) to conveniently visualize the data:" + ] + }, + { + "cell_type": "code", + "execution_count": 95, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-15T12:51:31.747920Z", + "start_time": "2018-05-15T12:51:26.463393Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "%matplotlib inline\n", + "import seaborn as sns; \n", + "sns.set()\n", + "sns.set_context(\"talk\", font_scale=1)\n", + "sns.pairplot(iris, hue='species', size=1.5);" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "For use in Scikit-Learn, we will extract the features matrix and target array from the ``DataFrame``\n", + "- we can use some of the Pandas ``DataFrame`` operations discussed in the [Chapter 3](03.00-Introduction-to-Pandas.ipynb):" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-15T07:31:02.519569Z", + "start_time": "2018-05-15T07:31:02.513989Z" + }, + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(150, 4)" + ] + }, + "execution_count": 40, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "X_iris = iris.drop('species', axis=1)\n", + "X_iris.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-15T07:31:11.307830Z", + "start_time": "2018-05-15T07:31:11.298124Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
sepal_lengthsepal_widthpetal_lengthpetal_width
05.13.51.40.2
14.93.01.40.2
24.73.21.30.2
\n", + "
" + ], + "text/plain": [ + " sepal_length sepal_width petal_length petal_width\n", + "0 5.1 3.5 1.4 0.2\n", + "1 4.9 3.0 1.4 0.2\n", + "2 4.7 3.2 1.3 0.2" + ] + }, + "execution_count": 41, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "X_iris[:3]" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-15T07:31:27.159081Z", + "start_time": "2018-05-15T07:31:27.153904Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(150,)" + ] + }, + "execution_count": 42, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "y_iris = iris['species']\n", + "y_iris.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-15T07:06:05.380136Z", + "start_time": "2018-05-15T07:06:05.374539Z" + }, + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0 setosa\n", + "1 setosa\n", + "2 setosa\n", + "Name: species, dtype: object" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "y_iris[:3]" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "To summarize, the expected layout of features and target values is visualized in the following diagram:" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "![](figures/05.02-samples-features.png)\n", + "[figure source in Appendix](06.00-Figure-Code.ipynb#Features-and-Labels-Grid)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Scikit-Learn's Estimator API" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "With this data properly formatted, we can move on to consider the *estimator* API of Scikit-Learn:" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "Guiding principles outlined in the [Scikit-Learn API paper](http://arxiv.org/abs/1309.0238):\n", + "\n", + "- *Consistency*: All objects share a common interface drawn from a limited set of methods, with consistent documentation.\n", + " - Every machine learning algorithm in Scikit-Learn is implemented via the Estimator API, which provides a consistent interface for a wide range of machine learning applications.\n", + "\n", + "- *Inspection*: All specified parameter values are exposed as public attributes.\n", + "\n", + "- *Limited object hierarchy*: \n", + " - Only algorithms are represented by Python classes; \n", + " - datasets are represented in standard formats (NumPy arrays, Pandas ``DataFrame``s, SciPy sparse matrices) and \n", + " - parameter names use standard Python strings.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "Guiding principles outlined in the [Scikit-Learn API paper](http://arxiv.org/abs/1309.0238):\n", + "\n", + "- *Composition*: Many machine learning tasks can be expressed as sequences of more fundamental algorithms,\n", + " and Scikit-Learn makes use of this wherever possible.\n", + "\n", + "- *Sensible defaults*: When models require user-specified parameters, the library defines an appropriate default value.\n", + "\n", + "> In practice, these principles make Scikit-Learn very easy to use, once the basic principles are understood.\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Basics of the API\n", + "\n", + "Most commonly, the steps in using the Scikit-Learn estimator API are as follows\n", + "(we will step through a handful of detailed examples in the sections that follow).\n", + "\n", + "1. Choose a class of model by importing the appropriate estimator class from Scikit-Learn.\n", + "2. Choose model hyperparameters by instantiating this class with desired values.\n", + "3. Arrange data into a features matrix and target vector following the discussion above.\n", + "4. Fit the model to your data by calling the ``fit()`` method of the model instance.\n", + "5. Apply the Model to new data:\n", + " - For supervised learning, often we predict labels for unknown data using the ``predict()`` method.\n", + " - For unsupervised learning, we often transform or infer properties of the data using the ``transform()`` or ``predict()`` method.\n", + "\n", + "We will now step through several simple examples of applying supervised and unsupervised learning methods." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Supervised learning example: Simple linear regression\n", + "\n", + "As an example of this process, let's consider a simple linear regression—that is, the common case of fitting a line to $(x, y)$ data.\n", + "We will use the following simple data for our regression example:" + ] + }, + { + "cell_type": "code", + "execution_count": 98, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-15T12:53:05.100098Z", + "start_time": "2018-05-15T12:53:04.956259Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "\n", + "rng = np.random.RandomState(42)\n", + "x = 10 * rng.rand(50)\n", + "y = 2 * x - 1 + rng.randn(50)\n", + "plt.scatter(x, y)\n", + "plt.xlabel('x', fontsize = 30)\n", + "plt.ylabel('y', fontsize = 30);" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "With this data in place, we can use the recipe outlined earlier. Let's walk through the process: " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "#### 1. Choose a class of model\n", + "\n", + "In Scikit-Learn, every class of model is represented by a Python class.\n", + "So, for example, if we would like to compute a simple linear regression model, we can import the linear regression class:" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-15T07:35:54.202165Z", + "start_time": "2018-05-15T07:35:54.199317Z" + }, + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [], + "source": [ + "from sklearn.linear_model import LinearRegression" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "Note that other more general linear regression models exist as well; you can read more about them in the [``sklearn.linear_model`` module documentation](http://Scikit-Learn.org/stable/modules/linear_model.html)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "#### 2. Choose model hyperparameters\n", + "\n", + "An important point is that *a class of model is not the same as an instance of a model*.\n", + "\n", + "Once we have decided on our model class, there are still some options open to us.\n", + "Depending on the model class we are working with, we might need to answer one or more questions like the following:\n", + "\n", + "- Would we like to fit for the offset (i.e., *y*-intercept)?\n", + "- Would we like the model to be normalized?\n", + "- Would we like to preprocess our features to add model flexibility?\n", + "- What degree of regularization would we like to use in our model?\n", + "- How many model components would we like to use?\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "#### 2. Choose model hyperparameters\n", + "\n", + "\n", + "These are examples of the important choices that must be made *once the model class is selected*.\n", + "- These choices are often represented as *hyperparameters*, or parameters that must be set before the model is fit to data.\n", + "- In Scikit-Learn, hyperparameters are chosen by passing values at model instantiation.\n", + "\n", + "We will explore how you can quantitatively motivate the choice of hyperparameters in [Hyperparameters and Model Validation](05.03-Hyperparameters-and-Model-Validation.ipynb).\n", + "\n", + "For our linear regression example, we can instantiate the ``LinearRegression`` class and specify that we would like to fit the intercept using the ``fit_intercept`` hyperparameter:" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-15T07:40:02.740297Z", + "start_time": "2018-05-15T07:40:02.735314Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False)" + ] + }, + "execution_count": 47, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model = LinearRegression(fit_intercept=True)\n", + "model\n", + "#help(LinearRegression)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "Keep in mind that when the model is instantiated, the only action is the storing of these hyperparameter values.\n", + "- In particular, we have not yet applied the model to any data: \n", + "- the Scikit-Learn API makes very clear the distinction between *choice of model* and *application of model to data*." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "#### 3. Arrange data into a features matrix and target vector\n", + "\n", + "Previously we detailed the Scikit-Learn data representation, which requires a two-dimensional features matrix and a one-dimensional target array.\n", + "\n", + "- The target variable ``y`` is already in the correct form (a length-``n_samples`` array)\n", + "- The feature matrix ``x`` should be transformed to a matrix of size ``[n_samples, n_features]``.\n", + "\n", + "In this case, this amounts to a simple reshaping of the one-dimensional array:" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-15T07:41:32.840436Z", + "start_time": "2018-05-15T07:41:32.835772Z" + }, + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(50, 1)" + ] + }, + "execution_count": 49, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "X = x[:, np.newaxis]\n", + "X.shape" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "#### 4. Fit the model to your data\n", + "\n", + "Now it is time to apply our model to data.\n", + "This can be done with the ``fit()`` method of the model:" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-15T07:41:45.689495Z", + "start_time": "2018-05-15T07:41:45.684155Z" + }, + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False)" + ] + }, + "execution_count": 50, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model.fit(X, y)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "This ``fit()`` command causes a number of model-dependent internal computations to take place, and the results of these computations are stored in model-specific attributes that the user can explore.\n", + "\n", + "In Scikit-Learn, by convention all model parameters that were learned during the ``fit()`` process have trailing underscores; \n", + "- for example in this linear model, we have the following:" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-15T07:07:27.190067Z", + "start_time": "2018-05-15T07:07:27.185547Z" + }, + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([1.9776566])" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# The parameters represent the slope of the simple linear fit to the data.\n", + "model.coef_" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-15T07:07:28.062749Z", + "start_time": "2018-05-15T07:07:28.058403Z" + }, + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "-0.9033107255311164" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# The parameter represent the intercept of the simple linear fit to the data.\n", + "model.intercept_" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "Comparing to the data definition, we see that they are very close to the input slope of 2 and intercept of -1.\n", + "\n", + "One question that frequently comes up regards the uncertainty in such internal model parameters.\n", + "\n", + "In general, Scikit-Learn does not provide tools to draw conclusions from internal model parameters themselves:\n", + "- interpreting model parameters is much more a *statistical modeling* question than a *machine learning* question.\n", + "- Machine learning rather focuses on what the model *predicts*.\n", + "\n", + "If you would like to dive into the meaning of fit parameters within the model, other tools are available, including the [Statsmodels Python package](http://statsmodels.sourceforge.net/)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "#### 5. Predict labels for unknown data\n", + "\n", + "Once the model is trained, the main task of supervised machine learning is to evaluate it based on what it says about new data that was not part of the training set.\n", + "In Scikit-Learn, this can be done using the ``predict()`` method.\n", + "For the sake of this example, our \"new data\" will be a grid of *x* values, and we will ask what *y* values the model predicts:" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-15T07:43:57.243102Z", + "start_time": "2018-05-15T07:43:57.237670Z" + }, + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([-1. , -0.75510204, -0.51020408, -0.26530612, -0.02040816,\n", + " 0.2244898 , 0.46938776, 0.71428571, 0.95918367, 1.20408163,\n", + " 1.44897959, 1.69387755, 1.93877551, 2.18367347, 2.42857143,\n", + " 2.67346939, 2.91836735, 3.16326531, 3.40816327, 3.65306122,\n", + " 3.89795918, 4.14285714, 4.3877551 , 4.63265306, 4.87755102,\n", + " 5.12244898, 5.36734694, 5.6122449 , 5.85714286, 6.10204082,\n", + " 6.34693878, 6.59183673, 6.83673469, 7.08163265, 7.32653061,\n", + " 7.57142857, 7.81632653, 8.06122449, 8.30612245, 8.55102041,\n", + " 8.79591837, 9.04081633, 9.28571429, 9.53061224, 9.7755102 ,\n", + " 10.02040816, 10.26530612, 10.51020408, 10.75510204, 11. ])" + ] + }, + "execution_count": 51, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "xfit = np.linspace(-1, 11)\n", + "xfit" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "As before, we need to coerce these *x* values into a ``[n_samples, n_features]`` features matrix, after which we can feed it to the model:" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-15T07:44:17.061898Z", + "start_time": "2018-05-15T07:44:17.058567Z" + }, + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [], + "source": [ + "Xfit = xfit[:, np.newaxis]\n", + "yfit = model.predict(Xfit)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "Finally, let's visualize the results by plotting first the raw data, and then this model fit:" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-15T07:07:37.931538Z", + "start_time": "2018-05-15T07:07:37.811851Z" + }, + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.scatter(x, y)\n", + "plt.plot(xfit, yfit);" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "Typically the efficacy of the model is evaluated by comparing its results to some known baseline, as we will see in the next example" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Supervised learning example: Iris classification\n", + "\n", + "> ### Question: given a model trained on a portion of the Iris data, how well can we predict the remaining labels?\n", + "\n", + "For this task, we will use an extremely simple generative model known as **Gaussian naive Bayes** \n", + "- which proceeds by assuming each class is drawn from an axis-aligned Gaussian distribution\n", + "- see [In Depth: Naive Bayes Classification](05.05-Naive-Bayes.ipynb) for more details).\n", + "- it is so fast \n", + "- it has no hyperparameters to choose\n", + "\n", + "Gaussian naive Bayes is often a good model to use as a baseline classification, before exploring whether improvements can be found through more sophisticated models." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "# To evaluate the model on data it has not seen before\n", + "\n", + "- we will split the data into a *training set* and a *testing set*.\n", + " - Using the ``train_test_split`` utility function:" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-15T07:46:59.245968Z", + "start_time": "2018-05-15T07:46:59.240652Z" + }, + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [], + "source": [ + "from sklearn.cross_validation import train_test_split\n", + "Xtrain, Xtest, ytrain, ytest = train_test_split(X_iris, y_iris,\n", + " random_state=1)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "With the data arranged, we can follow our recipe to predict the labels:" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-15T07:50:17.006283Z", + "start_time": "2018-05-15T07:50:17.000757Z" + }, + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [], + "source": [ + "from sklearn.naive_bayes import GaussianNB # 1. choose model class\n", + "model = GaussianNB() # 2. instantiate model\n", + "model.fit(Xtrain, ytrain) # 3. fit model to data\n", + "y_model = model.predict(Xtest) # 4. predict on new data" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "Finally, we can use the ``accuracy_score`` utility to see the fraction of predicted labels that match their true value:" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-15T07:50:19.472731Z", + "start_time": "2018-05-15T07:50:19.468189Z" + }, + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "('setosa', 'setosa') ('versicolor', 'versicolor') ('versicolor', 'versicolor') ('setosa', 'setosa') ('virginica', 'virginica') ('versicolor', 'versicolor') ('virginica', 'virginica') ('setosa', 'setosa') ('setosa', 'setosa') ('virginica', 'virginica') ('versicolor', 'versicolor') ('setosa', 'setosa') ('virginica', 'virginica') ('versicolor', 'versicolor') ('versicolor', 'versicolor') ('setosa', 'setosa') ('versicolor', 'versicolor') ('versicolor', 'versicolor') ('setosa', 'setosa') ('setosa', 'setosa') ('versicolor', 'versicolor') ('versicolor', 'versicolor') ('versicolor', 'virginica') ('setosa', 'setosa') ('virginica', 'virginica') ('versicolor', 'versicolor') ('setosa', 'setosa') ('setosa', 'setosa') ('versicolor', 'versicolor') ('virginica', 'virginica') ('versicolor', 'versicolor') ('virginica', 'virginica') ('versicolor', 'versicolor') ('virginica', 'virginica') ('virginica', 'virginica') ('setosa', 'setosa') ('versicolor', 'versicolor') ('setosa', 'setosa')\n" + ] + } + ], + "source": [ + "print(*zip(ytest, y_model))" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-15T07:50:48.890800Z", + "start_time": "2018-05-15T07:50:48.885683Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0.9736842105263158" + ] + }, + "execution_count": 61, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from sklearn.metrics import accuracy_score\n", + "accuracy_score(ytest, y_model)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "With an accuracy topping 97%, we see that even this very naive classification algorithm is effective for this particular dataset!" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Unsupervised learning example: Iris dimensionality reduction\n", + "\n", + "Reducing the dimensionality of the Iris data to more easily visualize it:\n", + "- Iris data is four dimensional: \n", + " - there are four features recorded for each sample.\n", + "\n", + "The task of dimensionality reduction is to ask:\n", + "\n", + "> ## whether there is a suitable lower-dimensional representation that retains the essential features of the data." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Unsupervised learning example: Iris dimensionality reduction\n", + "\n", + "Dimensionality reduction is often used as an aid to visualizing data: \n", + "- it is much easier to plot data in two dimensions than in four dimensions or higher!\n", + "\n", + "Here we will use ``principal component analysis`` (PCA; see [In Depth: Principal Component Analysis](05.09-Principal-Component-Analysis.ipynb))\n", + "- It is a fast linear dimensionality reduction technique.\n", + "\n", + "We will ask the model to return \n", + "- two components\n", + " - a two-dimensional representation of the data.\n", + "# Following the sequence of steps outlined earlier:" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-15T07:52:04.614637Z", + "start_time": "2018-05-15T07:52:04.609500Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [], + "source": [ + "from sklearn.decomposition import PCA # 1. Choose the model class\n", + "model = PCA(n_components=2) # 2. Instantiate the model with hyperparameters\n", + "model.fit(X_iris) # 3. Fit to data. Notice y is not specified!\n", + "X_2D = model.transform(X_iris) # 4. Transform the data to two dimensions" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "To plot the results:\n", + "- A quick way to do this is to insert the results into the original Iris ``DataFrame``, \n", + "- use Seaborn's ``lmplot`` to show the results:" + ] + }, + { + "cell_type": "code", + "execution_count": 100, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-15T12:53:24.796325Z", + "start_time": "2018-05-15T12:53:24.563624Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/png": "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LF682HosZtOPLfMNHTqUvn378tFHH/HNN98kPH/u3LkcOXLEEtGvvvqKm2++mTfffDPhvOHDh6OqKmq0h15ZWRmQWAoAsH79er7++msANK3h+tqOSLP7mYVCIb788kv27dvHiRMnUFUVr9fL0KFDGTt2LLZOFKDakv3MYsxfeYD5Kw8kLCuGdQMiX7rp5raT4YlYlk3DJFCjEQxpZHd34naoXba27GT7maUiqIXqtYUpDZVhV2zIkoxhmvjD/rg6NBndNMhxea1SiRgxqz+azrTPEsVOlVUyHT2QpdrvhWf89GdUrV6Jf0PtrEZ2OiMzOjn598f0sePI/PallpBoxUUoioKu65bY2rxecm6d0eozI6tPWwoy8gvoMXlqo9dpiX5mgVCYz78+xOqtx606szHf6sXk0X3bvc7MNE1mzJjB8uXLufzyyxkzZgy6rrNgwQLWrFnDLxYJxbMAACAASURBVH/5S2bMmMG8efN4+OGHycrK4vrrr6dnz56sXLmS+fPnc9555/Hyyy/jckW+YP3kJz/hk08+4d5772XMmDHk5+ezcuVK7r77blRV5cYbb6RPnz5s3LiRefPm0bt3b95++22ysrIIBoNcd9117N27l+9+97sMHz6cQCDAe++9x65du5g5cyaXXnopK1as4Pbbb6d3797cdNNNZGRksGXLFt5//31kWSYUCvHWW28xshntijoCTRazcDjMmjVrKCsrIzc3lxEjRiCn+MXsLLSGmD38zxWUVSYuM+lGbVajokic4Y1+OydixR83NIeJI3p36T2ylhazeGIpH7HGnPFGkBimaWJgYlfsZDl6JAhaVY0Pfzhi7Pjeogps1XrC9d02N+n2yL+p4nInNN+MdZVOttcWI16kSj/9hKrVK5Ek6okZNF1IToXDf/lzQnubutR9jalo6eacHbEDu8/nY/bs2SxYsMByfA8ePJibbrqJq666yjpv1apV/L//9//YsGED1dXV9O7dm0svvZQ77rgjIVlp+/btPPTQQ+zbt4/Ro0fz0ksvAbBjxw5mzZrF6tWr8fl89O7dmylTpvCf//mfZGTU7rUWFxfz/PPPs3jxYgoLC7HZbAwfPpwZM2YwYcIE67z58+fzwgsvsH//fux2O7179+bKK6+kf//+3H333dx3333cf//9rf32tShNErPPPvuMxx57zJqeAvTp04fHH3+c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Wg5s27YtAAcOHHB4fWpqKgEBAaU++P38/LjvvvucXlsTeXl5kZSUhMlkKnUuKysLcP57cOnSJXJycqxfaG7evAmAt7e3C0YrhOeRmZmLBQUF0aZNm1If6Hv37mX//v3cd999BAUFOX2OI0eOEBgYyOTJk2nfvj0dOnSgW7duzJkzB4PB4MrhV9qlS5cwm82EhYWVOufv749WqyU9Pd3h9RcvXrR7LUDDhg25du0aN27cqLLxuppSqSQ8PJxmzZqVOvf5558D0LlzZ4fXHzlyBID09HQGDRpEu3btiI6OZsiQIfzyyy+uGbQQHkRmZpX00UcfkZOT4/QxQ4cOJTo6utTxjIwM/uu//guAv//9706fIysriytXrpCdnU1MTAwffvghN27cYPXq1cydO5ejR48yd+7cyv8gLmIJNH5+fnbPazQadDqd0+sdJTVoNBqgKMEkICDgDkdavRISEkhISCAsLIyhQ4c6fJxlqfn333/nueeeY+LEiZw6dYpFixYxduxYPv30U+Lj4901bCFqHAlmlZSUlMT58+edPqZr166lgtm5c+cYM2YMGRkZjB07ll69ejl9DqVSyeTJkwkPD+exxx6zHh84cCATJkxg8+bN/PTTTzzyyCOV/2FcwFxGz1ez2YxSWbmFActzl7U8W9OtXLmSGTNm4Ofnx6effoq/v7/Dx7Zr147x48czZMgQwsPDrccfffRR+vXrx5tvvklcXJzHvydCVJYEs0raunVrha9JTU1lwoQJXLlyhTFjxjB16tQyrwkKCuIvf/mL3XPPPPMMW7duJTk5ucYFM8s9PUezL51OR5MmTZxe7+jagoICAI+elX366afMmzcPf39/Fi5caHcGX1KnTp3o1KlTqeONGzcmPj6e1atXc+zYMe6//35XDVmIGk2CmZts2bKFl19+mcLCQqZMmcILL7xwx8/ZoEEDoCghpKZp0qQJCoWCS5culTp348YN8vPzCQ0NdXh948aNHc58L168SL169fDx8amy8bqLXq/n9ddfJzExkZCQED7//HNatWp1R89Zv359oGb+HgjhLpIA4gYbNmzgb3/7GyaTidmzZ1cokK1YsYLevXuTlJRU6lxaWhqA3aSC6qbVamnRogUHDx4sdS41NRWADh06OLy+bdu2XL16lbNnz9ocz8vLIy0trVyVU2oao9HI5MmTSUxMJCIiguXLl5c7kI0fP54+ffpYsxhLOnHiBCAbp8XdTYKZix05coSpU6eiVqv517/+ZXPfqzzuvfdezpw5w+LFi20yF/Pz85k/fz7e3t42+7hqkieeeIKMjAzWrVtnPWYymVi0aBHe3t5O34v+/fsD8MUXX9gc/+qrr6zVUDzNJ598wqZNm4iOjuabb75xmK1pT4MGDTh9+jQrVqywOb57925+/vlnYmNjrVs3hLgbKcxl3akXd2T06NH8+uuvdO/e3eGHd69evdBqteTn57N582a0Wq1NYsj06dNZtWoV0dHR9O/fn4KCAlatWsWZM2d48803nWbBVaeCggIGDx7MmTNnGDVqFM2bNycpKYlff/2VqVOnMnbsWKAo4B89epTIyEibmcqrr75KQkICjz76KLGxsRw4cIAVK1bQvXt3FixY4FHlrNLT0+nTp491dmZv32H9+vWJjY21+35cunSJp556iszMTAYNGkSbNm1IS0vju+++IygoiG+//dbpPUghajsJZi6k1+tp165dmXvBNm3aRLNmzUhPT6dnz540btzYJsHEbDazdOlSli1bxsmTJ/H29qZNmzaMGzeObt26ufrHuCPZ2dnMnj2brVu3kpeXR/PmzRk9erS16gXAnDlzmDt3LhMnTuSll16yHjcYDHz++eesWrWKixcvEhoaSv/+/fnLX/7icYWGnRUJtujQoQNLly51+H5kZmYyZ84ctm3bRnZ2NvXr16d79+5MnDhRZmXirifBTAghhMeTe2ZCCCE8ngQzIYQQHk+CmRBCCI8nwUwIIYTHk2AmhBDC40kwE0II4fEkmAkhhPB4EszEHUlISCAyMrLUn1atWhEVFUX37t35xz/+wf79++1ebzKZ2L59Oy+99BLx8fFERUXx4IMPMnLkSJYtW1au5qP/93//R2RkJPfff7/Thp/2rFq1isjISA4fPlyh64QQNYtUzRdVIjw8nHbt2tkcu3nzJidOnCApKYmNGzcye/ZsHn30Uev5K1euMHnyZHbt2oWXl5c1CGZlZZGamsrevXtJTEzkiy++sLaUsWf16tX4+PhQWFjIqlWrmDRpUrnG/J///Id33nmncj+wEKJGkWAmqkRMTAzvvfee3XMLFizgk08+YebMmcTFxeHt7U1BQQEjR47k5MmT9OrVi+nTp9O4cWPrNZZu3Hv37mXixIl8+eWXdp/78OHDHD16lFGjRrF69WoSEhKYOHFimU0qf/nlF/7xj3+Qm5tb+R9aCFFjyDKjcLlx48YRHBxMTk4OKSkpAHz88cecPHmSP/3pT3z66ac2gQwgLCyM+fPnExISwi+//MLOnTvtPndiYiIAPXr0oGfPnly8eJEdO3Y4HMvVq1d5++23ef755ykoKLD2AhNCeDYJZsLlVCqVtd1JdnY2Op2OlStXolAoeOWVVxzOogIDAxk7dixdu3a123jSYDDwww8/oNFoiImJsbbCub1NSklff/01X3/9NS1atGDp0qW0aNGiCn5CIUR1k2VG4XJ6vZ4zZ84ARTOu7du3k5+fT0REBC1btnR67ejRoxk9erTdc8nJyWRlZdG/f398fHx46KGHCA4OZvv27WRmZhIcHFzqmtDQUGbMmMHQoUNRq+XXX4jaQmZmwqWMRiPvv/8+165do3HjxrRt25ZTp04BEBUVdUfPbVli/POf/wwUzQD79++PwWDg+++/t3vNk08+ydNPPy2BTIhaRv6PFlUiJSWFKVOm2BzLzc3ljz/+IDMzE19fX959913UajWXL18GuKP7VTdu3GDr1q0EBwfTtWtX6/EBAwawaNEiVqxYwQsvvOBRDTyFEJUnwUxUiXPnznHu3Dnr3xUKBRqNhrCwMOLi4nj22Wet96css6Ly7CFzJCkpicLCQvr3729zz82S3n/kyBF2795Nly5dKv0aQgjPIcFMVImBAwc6TM2/neVeVk5OTqVfz7LEuHPnzlL31K5evQoUJYJIMBPi7iDBTLhd69atATh48GCZj71w4QIrV66ka9euxMTEAEWzwN9//x2Ao0ePOrx206ZNXL16lbp161bBqIUQNZkkgAi369y5M1qtlrS0NGsyiCNr165l3rx5zJ4923rMMisbP348R48etfvn4Ycf5ubNm6xevdqlP4sQomaQYCbcztvbm+HDhwPw/vvvYzKZ7D7u8uXLfP311wAMGzbMetwSoPr27evwNZ544gkAVq5cWSVjFkLUbBLMRLWYMGECjRo1Ytu2bUyaNIlLly7ZnD979izjx48nMzOTTp06WTdEp6SkcO7cOe69915atWrl8Pl79eqFn58fx44dc1jkWAhRe8g9M1Et/P39WbJkCWPHjmXTpk1s27aNNm3a0LBhQy5fvkxqaipGo5GOHTsyd+5clMqi712WJUZnszIAPz8/4uLi+OGHH1ixYkWpIshCiNpFZmai2jRu3JiEhASmTZtGdHQ0J0+eZPPmzZw4cYKYmBjeffddlixZQp06dQAoLCxkw4YNQNnBDG4tNSYlJUlBYSFqOYXZbDZX9yCEEEKIOyEzMyGEEB5PgpkQQgiPJ8FMCCGEx5NgJoQQwuNJMBNCCOHxJJgJIYTweBLMhBBCeDwJZkIIITyeBDMhhBAe7/8BbHTRkUEa1yIAAAAASUVORK5CYII=\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "sns.set_context(\"talk\", font_scale=1.5)\n", + "iris['PCA1'] = X_2D[:, 0]\n", + "iris['PCA2'] = X_2D[:, 1]\n", + "sns.lmplot(\"PCA1\", \"PCA2\", hue='species', data=iris, fit_reg=False);" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "In the two-dimensional representation, the species are fairly well separated, even though the PCA algorithm had no knowledge of the species labels!\n", + "\n", + "A relatively straightforward classification will probably be effective on the dataset." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Unsupervised learning: Iris clustering\n", + "\n", + "Let's next look at applying clustering to the Iris data.\n", + "\n", + "> ### A clustering algorithm attempts to find distinct groups of data without reference to any labels.\n", + "\n", + "We will use a powerful clustering method called a ``Gaussian mixture model (GMM)``\n", + "- more detail in [In Depth: Gaussian Mixture Models](05.12-Gaussian-Mixtures.ipynb).\n", + "- A GMM attempts to model the data as a collection of Gaussian blobs.\n", + "\n", + "We can fit the Gaussian mixture model as follows:" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-15T07:53:16.203796Z", + "start_time": "2018-05-15T07:53:16.170761Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [], + "source": [ + "from sklearn.mixture import GMM # 1. Choose the model class\n", + "model = GMM(n_components=3,\n", + " covariance_type='full') # 2. Instantiate the model with hyperparameters\n", + "model.fit(X_iris) # 3. Fit to data. Notice y is not specified!\n", + "y_gmm = model.predict(X_iris) # 4. Determine cluster labels" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "As before, we will \n", + "- add the cluster label to the Iris ``DataFrame`` and \n", + "- use Seaborn to plot the results:" + ] + }, + { + "cell_type": "code", + "execution_count": 78, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-15T10:05:36.294395Z", + "start_time": "2018-05-15T10:05:36.289669Z" + }, + "slideshow": { + "slide_type": "skip" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{'axes.labelsize': 11.0,\n", + " 'axes.titlesize': 12.0,\n", + " 'font.size': 50.0,\n", + " 'grid.linewidth': 1.0,\n", + " 'legend.fontsize': 10.0,\n", + " 'lines.linewidth': 1.75,\n", + " 'lines.markeredgewidth': 0.0,\n", + " 'lines.markersize': 7.0,\n", + " 'patch.linewidth': 0.3,\n", + " 'xtick.labelsize': 10.0,\n", + " 'xtick.major.pad': 7.0,\n", + " 'xtick.major.width': 1.0,\n", + " 'xtick.minor.width': 0.5,\n", + " 'ytick.labelsize': 10.0,\n", + " 'ytick.major.pad': 7.0,\n", + " 'ytick.major.width': 1.0,\n", + " 'ytick.minor.width': 0.5}" + ] + }, + "execution_count": 78, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sns.plotting_context()" + ] + }, + { + "cell_type": "code", + "execution_count": 101, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-15T12:53:39.330142Z", + "start_time": "2018-05-15T12:53:38.835696Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/png": "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mTlzJp566im8+eab2LhxI1JSUlBYWAiDwYAhQ4Zg9+7dnmNHjBiBCRMm4H//938xZswYDB48GFqtFvv370dZWRlyc3MxZswYz/HdunXDqVOn8Nhjj6Fv375YsGABBg8ejCeffBJ//vOf8eMf/xhZWVlISUnB/v37cfHiRXTp0gXz5s1r0TZripycHDz00ENYvnw5xo0bhxEjRqC4uBgHDhxAamoqfve734U7RCIKgH0jEVFg7B9bzpEjR/DVV18BcI0we+GFFwIeN3ToUEydOrU1QyOiKMPkFbVJCxYswNChQ7Fq1Sps2bIFoihi6NCheOKJJzB8+PAGz73zzjshSRLee+89HDx4EAaDAbfffjueeeYZvPLKK37Hz58/H7169cL69euxY8cOCIKA7t27Y8aMGZgxYwY0Go3n2Oeffx6VlZU4dOgQKioqUFNTg/j4eDzxxBPo168fPvroI+zfvx+HDh1C586dMXHiRDz66KNITk5u9ja6Fr/5zW9w44034pNPPsG3336LpKQk3HPPPXjyySfRpUuXcIdHREGwbyQiCoz9Y8soLCz0/HegkhNukiQxeUVEDRJUVVXDHQQREREREREREVEgrHlFREREREREREQRi8krIiIiIiIiIiKKWExeERERERERERFRxGLyioiIiIiIiIiIIhZXG7wGZWU14Q4hrARBQEqKERUVZrDuf8PYVk3D9gpdU9sqLS2+xWNi38jv36Zge4WObRW6SOwbgfbdP/L7t2nYXqFjWzVNpPaPRI3hyCu6aqLo6vxEfhc1im3VNGyv0LGtIg+/Jk3D9god2yp0bKvIw69J07C9Qse2ahq2F0UrfssSEREREREREVHEYvKKiIiIiIiIiIgiFpNXREREREREREQUsZi8IiIiIiIiIiKiiMXkFRERERERERERRSwmr4iIiIiIiIiIKGIxeUVERERERERERBGLySsiIiIiIiIiIopYTF4RERERERE1A4cihzsEIqI2SQp3AERERERERNHKKtuwvbgQB8oPwSJbYJAM6J/aFyMycqCXdOEOj4ioTWDyioiIiIiI6CpYZRtWHF6NCmuFZ5tFtmBnyW6cqDqNaZmTmcAiImoGnDZIRERERER0FbYXF/okrrxVWCuwo3h3K0dERNQ2MXlFRERERER0FYrKD17TfiIiCg2TV0RERERERE3kUGRYZWuDx1hkC2QWcSciumZMXhFFKcXhCHcIRERERO2WVpSgl/QNHmOQDJBElhkmIrpW7EmJoojTakX1lgKY9+2F02KGxmCEcWA2EvLyodE3/PBERERERM0rK7UfdpYEr2uVldqvFaMhImq7OPKKKEo4rVaULl2C6m1b4LSYXdssZlRv24LSpUvgtDY8bJ2IiIiImteIjByk6FMC7kvRp2B4xpBWjoiIqG1i8oooSlRvKYCjrCzgPkdZGaq3FrRyRERERETtm17SYVrmZAzvlAODZADgmio4vFMOpmVOhl7ShTlCIqK2gdMGiaKEed+ehvfv3Yuk0WNbKRoiIiIiAlwJrNu65uG2rnmQFZk1roiIWgBHXhFFAcXhgNNiafAYp8UMVeZqNkREREThwsQVEVHLYPKKKAqIWi00BkODx2gMRggSH5iIiIiIiIiobWHyiihKGAcOanh/dnYrRUJERERERETUepi8IooSCXn50KalBdynTUtDQm5+K0dERERERERE1PKYvCKKEhq9HukzZiEhNw8ag9G1zWBEQm4e0mfMgkavD3OERERERERERM2PBXKIoohGr0fS6LFIGj0WqiyzxhURERERERG1eRx5RRSlmLgiIiIiIiKi9oDJKyIiIiIiIiIiilhMXhERERERERERUcSK+uTVvn370LdvX2zdujXkc9asWYN7770X2dnZyM/Px7x581BVVdWCURIRERERUbRzKHK4QyAiapeiumjO6dOn8fOf/xyKooR8zrvvvou33noLN998M5599lmcP38ey5Ytw3fffYeVK1dCp9O1YMRERERERBRNrLIN24sLsb/8IGyyFQbJgP6pfTEiIwd6ib87EBG1hqhNXm3cuBEvvvhik0ZMlZSUYNGiRRg5ciT+/ve/QxRdA88yMzPx3HPPYdmyZXjsscdaKmQiIiIiIooil22V+Nv+D1FurYCiKhAFEXpJB1OxGSeqTmNa5mQmsIiIWkFUThv8yU9+gjlz5iAtLQ0TJkwI+bx169bB4XBg+vTpnsQVANx9991IT0/HZ5991hLhEhERERFRlLHKNvz/+z/ERUsZFNU100NRFZgdFlTYLqPMUo4dxbvDHCURUfsQlcmrkydP4umnn8aaNWvQo0ePkM/bt28fACA7O9tnuyAIGDBgAE6ePImamprmDJWIiIiIiKLQ9uJClFsrAu5zKjLMDjOK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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "sns.set_context(\"talk\", font_scale=1.5)\n", + "iris['cluster'] = y_gmm\n", + "sns.lmplot(\"PCA1\", \"PCA2\", data=iris, hue='species',\n", + " col='cluster', fit_reg=False);" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "By splitting the data by cluster number, GMM algorithm recovered the underlying label without an expert: \n", + "- the measurements of these flowers are distinct enough\n", + "- we could *automatically* identify the presence of these different groups of species \n", + " - with a simple clustering algorithm!\n", + "- might further give experts in the field clues as to the relationship between the samples they are observing." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Application: Exploring Hand-written Digits" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "In the wild, this problem involves \n", + "- locating characters in an image. \n", + "- identifying characters in an image. \n", + "\n", + "Here we'll take a shortcut and use Scikit-Learn's set of pre-formatted digits, which is built into the library." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Loading and visualizing the digits data\n", + "\n", + "We'll use Scikit-Learn's data access interface and take a look at this data:" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-15T07:09:24.416431Z", + "start_time": "2018-05-15T07:09:24.256577Z" + }, + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(1797, 8, 8)" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from sklearn.datasets import load_digits\n", + "digits = load_digits()\n", + "digits.images.shape" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "The images data is a three-dimensional array: \n", + "- 1,797 samples \n", + "- each consisting of an 8 × 8 grid of pixels.\n", + "\n", + "Let's visualize the first hundred of these:" + ] + }, + { + "cell_type": "code", + "execution_count": 102, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-15T12:59:40.709794Z", + "start_time": "2018-05-15T12:59:38.045852Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "fig, axes = plt.subplots(10, 10, figsize=(8, 8),\n", + " subplot_kw={'xticks':[], 'yticks':[]},\n", + " gridspec_kw=dict(hspace=0.1, wspace=0.1))\n", + "\n", + "for i, ax in enumerate(axes.flat):\n", + " ax.imshow(digits.images[i], cmap='binary', interpolation='nearest')\n", + " ax.text(0.05, 0.05, str(digits.target[i]),\n", + " transform=ax.transAxes, color='green')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "In order to work with this data within Scikit-Learn, \n", + "- we need a two-dimensional, ``[n_samples, n_features]`` representation.\n", + "- treating each pixel in the image as a feature: \n", + " - so that we have a length-64 array of pixel values representing each digit.\n", + "- target array gives the previously determined label for each digit.\n", + "\n", + "Features and targets are represented as the ``data`` and ``target`` attributes in the `digits` dataset respectively:" + ] + }, + { + "cell_type": "code", + "execution_count": 107, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-15T13:02:52.799145Z", + "start_time": "2018-05-15T13:02:52.794763Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(1797, 64)" + ] + }, + "execution_count": 107, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "X = digits.data\n", + "X.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 108, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-15T13:02:53.880019Z", + "start_time": "2018-05-15T13:02:53.875168Z" + }, + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 0., 0., 5., ..., 0., 0., 0.],\n", + " [ 0., 0., 0., ..., 10., 0., 0.],\n", + " [ 0., 0., 0., ..., 16., 9., 0.],\n", + " ...,\n", + " [ 0., 0., 1., ..., 6., 0., 0.],\n", + " [ 0., 0., 2., ..., 12., 0., 0.],\n", + " [ 0., 0., 10., ..., 12., 1., 0.]])" + ] + }, + "execution_count": 108, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "X" + ] + }, + { + "cell_type": "code", + "execution_count": 110, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-15T13:03:30.604467Z", + "start_time": "2018-05-15T13:03:30.600002Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(1797,)" + ] + }, + "execution_count": 110, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "y = digits.target\n", + "y.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 111, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-15T13:03:31.333742Z", + "start_time": "2018-05-15T13:03:31.329466Z" + }, + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([0, 1, 2, ..., 8, 9, 8])" + ] + }, + "execution_count": 111, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "y" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "We see here that there are 1,797 samples and 64 features." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Unsupervised learning: Dimensionality reduction\n", + "\n", + "We'd like to visualize our points within the 64-dimensional parameter space\n", + "- it's difficult to effectively visualize points in such a high-dimensional space.\n", + "- Instead we'll reduce the dimensions to 2, using an unsupervised method.\n", + "\n", + "Here, we'll make use of a manifold learning algorithm called *Isomap* (see [In-Depth: Manifold Learning](05.10-Manifold-Learning.ipynb)), and transform the data to two dimensions:" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-15T07:09:47.457538Z", + "start_time": "2018-05-15T07:09:45.592768Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(1797, 2)" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from sklearn.manifold import Isomap\n", + "iso = Isomap(n_components=2)\n", + "iso.fit(digits.data)\n", + "data_projected = iso.transform(digits.data)\n", + "data_projected.shape" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "We see that the projected data is now two-dimensional.\n", + "Let's plot this data to see if we can learn anything from its structure:" + ] + }, + { + "cell_type": "code", + "execution_count": 112, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-15T13:10:41.495284Z", + "start_time": "2018-05-15T13:10:41.273837Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.scatter(data_projected[:, 0], data_projected[:, 1], c=digits.target,\n", + " edgecolor='none', alpha=0.5,\n", + " cmap=plt.cm.get_cmap('nipy_spectral', 10))\n", + "plt.colorbar(label='digit label', ticks=range(10))\n", + "plt.clim(-0.5, 9.5);" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "This plot gives us some good intuition into how well various numbers are separated in the larger 64-dimensional space. \n", + "\n", + "- zeros (in black) and ones (in purple) have very little overlap in parameter space.\n", + " - Intuitively, this makes sense: a zero is empty in the middle of the image, while a one will generally have ink in the middle.\n", + "- There seems to be a more or less continuous spectrum between ones and fours: \n", + " - we can understand this by realizing that some people draw ones with \"hats\" on them, which cause them to look similar to fours.\n", + "\n", + "Overall, however, the different groups appear to be fairly well separated in the parameter space: \n", + "- this tells us that even a very straightforward supervised classification algorithm should perform suitably on this data.\n", + "\n", + "Let's give it a try." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Classification on digits\n", + "\n", + "Let's apply a classification algorithm to the digits.\n", + "\n", + "- split the data into a training and testing set\n", + "- fit a Gaussian naive Bayes model" + ] + }, + { + "cell_type": "code", + "execution_count": 117, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-15T13:15:12.114546Z", + "start_time": "2018-05-15T13:15:12.110268Z" + }, + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [], + "source": [ + "Xtrain, Xtest, ytrain, ytest = train_test_split(X, y, random_state=0)" + ] + }, + { + "cell_type": "code", + "execution_count": 118, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-15T13:15:12.845573Z", + "start_time": "2018-05-15T13:15:12.836504Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [], + "source": [ + "from sklearn.naive_bayes import GaussianNB\n", + "model = GaussianNB()\n", + "model.fit(Xtrain, ytrain)\n", + "y_model = model.predict(Xtest)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "Now that we have predicted our model, we can gauge its accuracy by comparing the true values of the test set to the predictions:" + ] + }, + { + "cell_type": "code", + "execution_count": 119, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-15T13:15:16.281720Z", + "start_time": "2018-05-15T13:15:16.276351Z" + }, + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0.8333333333333334" + ] + }, + "execution_count": 119, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from sklearn.metrics import accuracy_score\n", + "accuracy_score(ytest, y_model)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "With even this extremely simple model, we find about 80% accuracy for classification of the digits!\n", + "\n", + "However, this single number doesn't tell us *where* we've gone wrong\n", + "- one nice way to do this is to use the *confusion matrix*, \n", + " - which we can compute with Scikit-Learn and plot with Seaborn:" + ] + }, + { + "cell_type": "code", + "execution_count": 123, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-15T13:15:41.399490Z", + "start_time": "2018-05-15T13:15:41.036420Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from sklearn.metrics import confusion_matrix\n", + "sns.set_context(\"notebook\", font_scale=1.7)\n", + "\n", + "mat = confusion_matrix(ytest, y_model)\n", + "\n", + "sns.heatmap(mat, square=True, annot=True, cbar=False)\n", + "plt.xlabel('predicted value')\n", + "plt.ylabel('true value');" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "This shows us where the mis-labeled points tend to be: \n", + "- a large number of twos here are mis-classified as either ones or eights.\n", + "\n", + "Another way to gain intuition into the characteristics of the model:\n", + "- to plot the inputs again, with their predicted labels.\n", + "- using green for correct labels, and red for incorrect labels:" + ] + }, + { + "cell_type": "code", + "execution_count": 124, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-15T13:17:10.256934Z", + "start_time": "2018-05-15T13:17:07.529831Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig, axes = plt.subplots(10, 10, figsize=(8, 8),\n", + " subplot_kw={'xticks':[], 'yticks':[]},\n", + " gridspec_kw=dict(hspace=0.1, wspace=0.1))\n", + "\n", + "test_images = Xtest.reshape(-1, 8, 8)\n", + "\n", + "for i, ax in enumerate(axes.flat):\n", + " ax.imshow(test_images[i], cmap='binary', interpolation='nearest')\n", + " ax.text(0.05, 0.05, str(y_model[i]),\n", + " transform=ax.transAxes,\n", + " color='green' if (ytest[i] == y_model[i]) else 'red')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "Examining this subset of the data, we can gain insight regarding where the algorithm might be not performing optimally.\n", + "\n", + "To go beyond our 80% classification rate, we might move to a more sophisticated algorithm such as \n", + "- support vector machines (see [In-Depth: Support Vector Machines](05.07-Support-Vector-Machines.ipynb)), \n", + "- random forests (see [In-Depth: Decision Trees and Random Forests](05.08-Random-Forests.ipynb)) \n", + "- the other classification approaches." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Summary" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "In this section we have covered the essential features of the Scikit-Learn \n", + "- data representation\n", + "- the estimator API.\n", + "\n", + "Regardless of the type of estimator, the same import/instantiate/fit/predict pattern holds.\n", + "\n", + "Armed with this information about the estimator API, you can explore the Scikit-Learn documentation and begin trying out various models on your data.\n", + "\n", + "In the next section, we will explore perhaps the most important topic in machine learning: how to select and validate your model." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "\n", + "< [What Is Machine Learning?](05.01-What-Is-Machine-Learning.ipynb) | [Contents](Index.ipynb) | [Hyperparameters and Model Validation](05.03-Hyperparameters-and-Model-Validation.ipynb) >" + ] + } + ], + "metadata": { + "anaconda-cloud": {}, + "celltoolbar": "Slideshow", + "kernelspec": { + "display_name": "Python [default]", + "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.4" + }, + "toc": { + "base_numbering": 1, + "nav_menu": {}, + "number_sections": false, + "sideBar": true, + "skip_h1_title": false, + "title_cell": "Table of Contents", + "title_sidebar": "Contents", + "toc_cell": false, + "toc_position": {}, + "toc_section_display": true, + "toc_window_display": false + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/code/09.06-Linear-Regression.ipynb b/code/09.06-Linear-Regression.ipynb new file mode 100755 index 0000000..6147821 --- /dev/null +++ b/code/09.06-Linear-Regression.ipynb @@ -0,0 +1,1886 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "# In Depth: Linear Regression" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "\n", + "\n", + "*This notebook contains an excerpt from the [Python Data Science Handbook](http://shop.oreilly.com/product/0636920034919.do) by Jake VanderPlas; the content is available [on GitHub](https://github.com/jakevdp/PythonDataScienceHandbook).*\n", + "\n", + "*The text is released under the [CC-BY-NC-ND license](https://creativecommons.org/licenses/by-nc-nd/3.0/us/legalcode), and code is released under the [MIT license](https://opensource.org/licenses/MIT). If you find this content useful, please consider supporting the work by [buying the book](http://shop.oreilly.com/product/0636920034919.do)!*" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "\n", + "< [In Depth: Naive Bayes Classification](05.05-Naive-Bayes.ipynb) | [Contents](Index.ipynb) | [In-Depth: Support Vector Machines](05.07-Support-Vector-Machines.ipynb) >" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "- Naive Bayes (discussed earlier in [In Depth: Naive Bayes Classification](05.05-Naive-Bayes.ipynb)) is a good starting point for classification tasks\n", + "- linear regression models are a good starting point for regression tasks.\n", + " - can be fit very quickly, and \n", + " - are very interpretable.\n", + " \n", + "The simplest form of a linear regression model (i.e., fitting a straight line to data) \n", + "- Extended to model more complicated data behavior.\n", + "- We will see how linear models can be generalized to account for more complicated patterns in data.\n", + "\n", + "We begin with the standard imports:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "ExecuteTime": { + "end_time": "2018-12-26T01:48:28.419326Z", + "start_time": "2018-12-26T01:48:26.363658Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "import matplotlib.pyplot as plt\n", + "import seaborn as sns; sns.set()\n", + "import numpy as np" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Simple Linear Regression\n", + "\n", + "We will start with the most familiar linear regression, a straight-line fit to data.\n", + "A straight-line fit is a model of the form\n", + "$$\n", + "y = ax + b\n", + "$$\n", + "where $a$ is commonly known as the *slope*, and $b$ is commonly known as the *intercept*.\n", + "\n", + "Consider the following data, which is scattered about a line with a slope of 2 and an intercept of -5:" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "ExecuteTime": { + "end_time": "2018-12-26T01:59:07.712292Z", + "start_time": "2018-12-26T01:59:07.534304Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAW8AAAD3CAYAAADSftWOAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4xLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvDW2N/gAAF41JREFUeJzt3X9s3Hd9x/HX+Wyf7cROHNuBlKQKTZoPoqVN1NAG2pDQhUFAhYgIulVjggAbU/ljCNQBK0NMTBoTBWlshamlGmOrFkFVBEilUJJ2aUsGJGnSoPXjJLRrmx+Lf1xiJ7bP9vn2h33u2fner+99776/no9/avt85883SV/38ef7/nzeiVwuJwBAuDT5PQAAQPUIbwAIIcIbAEKI8AaAECK8ASCEmhv1gwYGRl2XtXR3dyidHvNyOKEQx+vmmuMjjtdd7TX39XUmij0Wipl3c3PS7yH4Io7XzTXHRxyv28trDkV4AwAWIrwBIIQIbwAIIcIbAEKI8AaAOslMZXU+PabMVNbz1664VNAYc4ukr1lrtxtjNkn6qaQTcw9/21q71/PRAUAIZWdmtHffSR3pH9DwSEYrulLatKFPn/7wJs9+RkXhbYy5R9JHJF2e+9JNkr5hrb3Ps5EAQETs3XdST/z21fnPh0YyeuK3r6qjvVW7bl3ryc+odNnklKQPFnx+k6T3GWP+yxjzXWNMpyejAYAQKLUckpnK6kj/gOPzDh4/69kSSkUzb2vtI8aYtQVf+rWkB621h4wxfy3py5I+V+o1urs7aipQ7+uL5/tDHK+ba46PsF13Njujh37yOx08flYDF8bVt7xdW65fpT13XKdkcnYufHbwsoZHM47PH7wwrmRri/p6l9Q8Frfb4x+11l7IfyzpW+WeUMs22L6+Tg0MjLp+fljF8bq55vgI43U//ET/guWQ8+lx/fjA7zU2Pqm7dmyQJGWnslrRmdLQyJUB3ru8XdnJqYqvu9Sbm9tqk8eNMTfPffwHkg65fB0ACIVSyyFH+gfnl0NSLUlt2tDn+H1brl+lVIs3W+Tdzrz/QtK3jDFTks5J+jNPRgMAAXXxUkbDDrNpSUqPTujipYxWdndIku68fb2k2VBPj06ou7NNmzb0as8d12l4+LLja1Sr4vC21r4kacvcx4cl3erJCAAgBJYtTWlFl/NySHdnm5YtTc1/nmxq0l07Nmj3tnW6eCmjZUtTSrUk59fFvcAmHQCoQKnlkBvW9+jipcwVlSSplqRWdnd4tlRSqGHneQNA2F25HJJSR1uLjp4Y0JOHT89vxrnz9vVKNtV3bkx4A4iczFR2wXJFsa9Va/FyyOO/fln7j5yZfzy/GUfSfPVJvRDeACLDaVv6xmt7lZN09MTggq3qtcyOUy1JLVua0rFTQ46PH+kf1O5t6+qyXJJHeAOIDKdt6b88dHrB93g1O66m+qQeuGEJIBJK1WE7KazNdiNffeJkcfVJPRDeACKh1EzYyfDIhH5/+qLrAC9VfbJpQ29dl0wklk0ARMTSjhalWpOamKwsjBMJ6ev/+VxNa+DFNuPkv15PhDeASPjRgRcrDm5JmsnN/reWNfBim3EagWUTAKFXar071dKkbZuuUk9XmxKSmhLOr1HLGng9N+MUQ3gDCL1S691T0zPaefPV+uonb9Hn/mijcjnn18hXiIQF4Q0g9Cqp/Ei1JHXNG5b5WiHiJcIbQOhVWvnhd4WIl7hhCSASKq388LNCxEuEN4BIqLTyw88KES8R3gAiJV/54dX3BRVr3gAQQoQ3AIQQ4Q0AIUR4A0AIEd4AIiczldX59FhNR74GHdUmACLDqZNOo3pKNhrhDSAynDrpNKqnZKNF660IQGyVOlmw1q45QUR4A4iESnpKRgnhDSAS/O4p2WiEN4BIiNKJgZXghiWAyIjKiYGVILwBREZUTgysBMsmQEzEYeNKnh89JRuNmTcQcfXYuJKZykZ+Zht0hDcQcV5uXInTDsag408biDCvN67k3wiGRjLK6bU3gr37TnowWlSD8AYiKL++PXBh3LONK3HbwRh0LJsAEbJ4WaO7s1Wp1qQmJq8M1mo3rlSygzHMbcXChpk3ECGLlzWGRycdg1uSNl7bU9XNRj92MMapQqZazLyBiCi1rOEkV+Xr53cwFt78zPN6ByM3RsvjTwGIiFLLGk6OnhiqekZ75+3rtWPzavV0takpIfV0tWnH5tWe72Dkxmh5zLyBiMgvawxVGODDI9WvUzdiB2O5G6O7t62jtlxVzLyNMbcYY56c+3i9MeZpY8wBY8y3jTHM4AGflTqYyUkiIT3+m1eUnZlx9bNq2cGYmcrq7OBlx5l/3I52dauimbcx5h5JH5F0ee5L35B0r7X2SWPMdyR9QNKj9RkigEo5HczU0dasV85fuuJ7Z3LS/sOnlWxKNKzLzIK17NGMVnReuZZd6jeIKB7t6lalyyanJH1Q0vfnPr9J0lNzHz8m6Q9FeAO+c1rWaE4m9PAv+vXUc2c043CXspFLEZXs9mzkjdEwqyi8rbWPGGPWFnwpYa3N/zMYlbSs3Gt0d3eoudn9H3pfX6fr54ZZHK+ba/bG6oKP//g9b9aTz51x/L706ISSrS3q611S1etPTE4rPZJRd1dKba3lo2RiclrHTg05Pnbs1JD+fHf7/Ot8+sOb1NHeqoPHz2rwwrh6l7dry/WrtOeO65RMhnuV1qu/a7c3LAsXyTolXSj3hHR6zOWPmr3YgYFR188PqzheN9dcH9mprFZ0Fl+KyE5OVTwGt2V859NjGkiPOz42eGFcp14aWnDzdNeta7Xz5jULbowOD192fH5YVPt3XSro3b6FHTHGbJ/7eKekAy5fB0ADpFqS2nhtr+Nj1W7WcVvG52aTTxyOdnXLbXh/VtJXjDG/ktQq6YfeDQlAPRTblFPNZp1azjeJW5uyeqt42cRa+5KkLXMf90vaVqcxAfBYZiqroycGHR87emJIH9qerSg8az3fJE5tyuqNTTpADHh1qFStZXyF1TDJ1hZlJ6eYcbsU7tu2ACri1aFSXi19pFqSWtW7hOCuAeENxICX681uzzfhhEBvsWwCxIRX683Vnm9SrLTw0x/eVNP1xB3hDcREpaFbaXPhfBlfOcV2VXa0t2rXrWtdXQsIbyB2ioVuvbrMFystPHj8rHbevIZ1b5dY8wYgqT5naJeqchm8MM4JgTUgvAHUrblwqSqX3uXtnBBYA8IbQN3O0C5V5bLl+lUsmdSANW8AdT1Du1iVy547rgv9QVN+IrwB1PUM7WJVLmE/2tVvhDcASfU/d6TS0kJUhvAGIKkxzYXhHcIbwALMkMOBRScACCHCGwBCiPAGgBAivAEghAhvAAghwhsAQojwBoAQIrwBD9HqC43CJh3AA/VoZACUQngDHijW6kuS7tqxwa9hIcKYEgA1qlcjA6AUwhuoUb0aGQClEN5AjUq1+qq1kQFQDOEN1KhUq69aGxkAxXDDEvBAvRsZAIsR3oAHaGSARiO8AQ/RyACNwpo3AIQQ4Q1Uge3vCAqWTYAKsP0dQUN4AxVg+zuChikDUAbb3xFEhDdQBtvfEUSEN1AG298RRIQ3UAbb3xFENd2wNMYcljQy9+mL1tqP1T4kIHiu3P6e0puu7taurdf4PDLElevwNsa0SUpYa7d7NxzAncxUtq7b0vPb33dtfaMe/sUJvfC/w3r2+Dm98HKakkH4opaZ942SOowxP597nS9aaw96MyygMo2uv/7RgRf17PFz859TMgi/JHK5nKsnGmPeImmLpAclXSvpMUnGWjvt9P3T09lcczNrg/DWAz96Xj8+8Psrvv7+rdfok7ve4unPmpic1t3/sE/n0+NXPLayu13/fM/tamtl6wQ8lSj2QC3/0volnbTW5iT1G2OGJK2S9IrTN6fTY65/UF9fpwYGRl0/P6zieN3VXHNmKqtnjp52fOyZo2e08+Y1ni6hnE+PacAhuCVp8MK4Tr005OpQqjj+PUvxvO5qr7mvr7PoY7X8XrlH0n2SZIy5SlKXpLM1vB5QlUbXX1MyiCCpJby/K2m5MeZpSXsl7Sm2ZALUQ6PDlJJBBInrZRNr7aSkuzwcC1CVfJgWnjmSV68wpWMOgoK7Kwi1RocpHXMQFIQ3Qs2vMKVjDvxGeCMSCFPEDVvCACCECG8ACCHCG4FGz0jAGWveCCR6RgKlEd4IJHpGAqUxhUHg0DMSKI/wRuCUOrNkaGRCwyMTDR4REDyENwKn1JklkvTEoSu3wwNxQ3ijrEZXfKRakrphXU/Rx4+dHGLpBLHHDUsU1ciKj3wbs85l7ZKkHZvXaP+RM47fmz/ulR2ViDPCG0VVU/Hhtofk4jeIvu523bCuR7u2vlE9XSkNOax9c3Y2QHijiHIVH7u3rVOqJVnz7HzxG8T59Lie+O2ryuVyam9rlhzCe+O1PZzkh9gjvOGoki41K7s7aqrHLvUG8czz5zQx6byu7a7rKhAt3LCEo0q61NRaj13qDaJYcEvS0RPUegOENxxV0vKr1h6S5UoCixkezXjenxIIG8IbRd15+3rt2LxaPV1takpIPV1t2rF59XyXmlp7SJZ6g0i1JIo+b0VnihuWiD3WvFFUuS41XvSQXNzGrHf5bLXJTC6nfYdOOz5n04Y+blgi9ghvlFWqS02tPSQXv0GsW9uj0Yvjys7MSJKeLbhx2daa1K1veT3NfgFJiVyuMffuBwZGXf+gvr5ODQyMejmcUAjTdbut815s8TVnprIaSI9JiYT6lrdHcsYdpr9nL8Xxuqu95r6+zqLrh8y8Ian28K1XD8lUS1KrV3Z6/rpA2BHeMUfTAyCcCO+Yo+kBEE5MrWKMpgdAeBHeMVbrJhsA/iG8Y6zWTTYA/EN4x1ipHY5vunq5pMY3YgBQGW5YxlS+NHDX1mskvbbJprUlKSmnZ46f06H+85ISykxmqUIBAobwjplipYFf+fhb9fAvTujZ4+fmv3dicmb+Y6pQgGAhvGOmWGlgdiYn+3K67PMLGzEA8A+//8ZIqdLA5/oHHVuOLUYVChAMhHeMlCwNvJTR8qWtZV+DKhQgGAjvAGhURUep0sCmhLS0vaXsa1R61CuA+mLN20eNPlek1PnbMznp1YHLWrNyqcYmpjU8MqFU62xIT05lqz7qFUB9Ed4+8uNckTtvX69sdkZPPXdGMw6H9I5NTOtvPrpZ45np+eURL456BeAtlk184te5IsmmJr375qtV7Bj39OiExjPTWtndoVRLcv6oV4IbCBbC2yd+nivCtngg/FwtmxhjmiTdL+lGSRlJn7DWnvRyYFGXD1Cn8rx6B6gXvScB+MvtzHuXpDZr7dskfV7Sfd4NKR5KnSvSiAAt1xkeQLC5vWF5m6SfSZK19qAxZrN3Q4qPWpv31qJcZ3gAweaqAbEx5kFJj1hrH5v7/GVJ11hrp4s9Z3o6m2tuJhycTExOKz2SUXdXSm2tFAABmOd5A+IRSYVdYZtKBbckpdNjLn9UPLpMN0savTiuwquMw3UvxjXHRxyv20X3+KKPuV3zfkbSeyXJGLNF0vMuXwcA4ILbmfejkt5ljHlWs9P6j3k3JABAOa7C21o7I+lTHo8Fi0xMTut8eoybiQCuwN2xAMqfeXLs1JAG0uN0sQFwBcI7gPw48wRAuDCNCxi/zjwBEC6Ed8D4eeYJgPAgvANm2dKUujudO9pwaBSAPMI7QLIzM3rkqVMayzgvjXBoFIA8blgGyOIblXltrUnddsMqDo0CMI+Zd0CUulG5pK1Zu7eto0wQwDzSwEO1NBIufaMyw41KAAuwbOIBLxoJ+9mcAUD4MPP2QH6temgko5xe21Szd1/lzYX8bs4AIFwI7xp5ualmcXebld3tdLcB4IhlkxpVsqlmZXdHRa+1uLvNurU9Gr047uVwAUQEM+8aVduJvZKbmqmWpFZ2d9BVB0BRpEMRmalsRb0dK+3E7sVNTQDII7wXqTZkM1NZvXPTG5TNzujYqeGijYQ5KRCAlwjvRSoNWaeQv2F9r3bctForutoWzNbL3dTcvW0d1SQAqsLv6wWqqRxxKg/cf/i09h85fUUQc1IgAK8R3gUqDdlqywOrvakJAOUQ3nPGMlN69MCLSiScHy8M2Wpn0mzAAeC12K9559eunz52VhOTxcv3CkPWzVb2/M3LI/2DRW9qAkClYh/exY5hzUtIuuW612nX1jfOf61ceaCkK7q+L96AQ0d4ALWIXHhXWp+d/95ia9d5OUn//bv/04lXLiwoGXSaSW+8tkczuZzufeBg0TLD/AYcAKhFZMLbzSaYUmvXhQoPm5JmSwadZtKPPHVKv6SWG0ADROaGpZuT/UpVgRSzuJqkcCZN13cAjRKJ8HZ7sl+pKpBiitVlU8sNoJEiEd61BOfiY1h7ulLa8ubXVV2XTS03gEaKxJp3LV1oilWBPPxEf9nDpgpVekAVAHghEuHtRXAurgJxU5dNLTeARolEeEveB6ebumxquQE0SmTCu17B6aYum1puAPUW+huWizvT5IOTGS+AKAvtzJvONADiLLThTWcaAHEWyimq2005ABAVoQxvdjMCiLtQhje7GQHEXSjDm840AOIutDcs2c0IIM5chbcxJiHpVUkn5r70K2vtFzwbVQXYzQggztzOvNdJOmytvcPLwbjBbkYAceQ2vG+S9AZjzH5J45I+Y6213g0LAFBKIpfLlfwGY8zHJX1m0ZfvlrTSWvsDY8xtkr5prX1rqdeZns7mmptZ1gCAKiSKPlAuvJ0YYzokTVtrJ+c+Py1ptbW26IsNDIxW/4Pm9PV1amBg1O3TQyuO1801x0ccr7vaa+7r6ywa3m5LBb8s6S8lyRhzo6RXSgV3LTJTWZ0dvMyuSQAo4HbN++8l/bsx5n2SpiV91LMRzVlw8NRoRis6OXgKAPJchbe1Ni3pfR6PZQEOngKA4gI5heXgKQAoLZDhXcnBU4ubMABAnARye3ypbvDLl6b0+G9e0bGTgzRhABBbgUy7UgdPLWlv0f7DpzU0klFOr62F7913srGDBAAfBTK8pdmDp3ZsXq2erjY1JaSerja9c9NVGpuYcvx+1sIBxEkgl02khQdPJVtblJ2c0sVLGT155Izj9+fXwjnnBEAcBHbmnZdqSWpV7xKlWpI0YQCAOYEP70I0YQCAWYFdNimGJgwAEMLwpgkDAIQwvPNowgAgzkK15g0AmEV4A0AIEd4AEEKENwCEkKs2aAAAfzHzBoAQIrwBIIQIbwAIIcIbAEKI8AaAECK8ASCECG8ACKFAH0xljGmSdL+kGyVlJH3CWhvpZpXGmBZJD0laKykl6avW2h/7OqgGMcaslHRI0rustS/4PZ5GMMZ8QdL7JbVKut9a+12fh1RXc/++v6fZf99ZSZ+M+t+1MeYWSV+z1m43xqyX9K+ScpKOS7rbWjvj5nWDPvPeJanNWvs2SZ+XdJ/P42mEP5E0ZK3dKuk9kv7J5/E0xNz/1P8iadzvsTSKMWa7pLdLulXSNklrfB1QY7xXUrO19u2S/lbS3/k8nroyxtwj6UFJbXNf+oake+f+/05I+oDb1w56eN8m6WeSZK09KGmzv8NpiB9I+tLcxwlJ0z6OpZG+Luk7kpyblEbTuyU9L+lRST+R9FN/h9MQ/ZKa536r7pLk3FE8Ok5J+mDB5zdJemru48ck7XD7wkEP7y5JFws+zxpjAr3UUytr7SVr7agxplPSDyXd6/eY6s0Y81FJA9bax/0eS4P1anZC8iFJn5L0H8aYhL9DqrtLml0yeUHSA5L+0dfR1Jm19hEtfINKWGvzZ5KMSlrm9rWDHt4jkjoLPm+y1kZ+JmqMWSNpv6TvW2sf9ns8DbBH0ruMMU9K2ijp34wxr/d3SA0xJOlxa+2ktdZKmpDk3KQ1Oj6j2WveoNl7Wd8zxrSVeU6UFK5vd0q64PaFgh7ez2h2jUzGmC2a/RUz0owxr5P0c0l/Za19yO/xNIK19h3W2m3W2u2SnpP0p9bacz4PqxGelvQeY0zCGHOVpCWaDfQoS+u136aHJbVIilMfwyNz9zokaaekA25fKOhLEI9qdkb2rGbXfz/m83ga4YuSuiV9yRiTX/veaa2NzY28uLDW/tQY8w5Jv9bsROpua23W52HV2zclPWSMOaDZCpsvWmsv+zymRvqspAeMMa2S/kezS6OucCQsAIRQ0JdNAAAOCG8ACCHCGwBCiPAGgBAivAEghAhvAAghwhsAQuj/Ae74zr17YgrpAAAAAElFTkSuQmCC\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "rng = np.random.RandomState(1)\n", + "x = 10 * rng.rand(50)\n", + "y = 2 * x - 5 + rng.randn(50)\n", + "plt.scatter(x, y);" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "We can use Scikit-Learn's ``LinearRegression`` estimator to fit this data and construct the best-fit line:" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "ExecuteTime": { + "end_time": "2018-12-26T01:59:08.889365Z", + "start_time": "2018-12-26T01:59:08.703013Z" + }, + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from sklearn.linear_model import LinearRegression\n", + "model = LinearRegression(fit_intercept=True)\n", + "\n", + "model.fit(x[:, np.newaxis], y)\n", + "\n", + "xfit = np.linspace(0, 10, 1000)\n", + "ytest = 2*xfit -5\n", + "yfit = model.predict(xfit[:, np.newaxis])\n", + "\n", + "plt.scatter(x, y)\n", + "plt.plot(xfit, yfit);" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "The slope and intercept of the data are contained in the model's fit parameters, which in Scikit-Learn are always marked by a trailing underscore.\n", + "Here the relevant parameters are ``coef_`` and ``intercept_``:" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "ExecuteTime": { + "end_time": "2018-12-26T01:59:13.031371Z", + "start_time": "2018-12-26T01:59:13.027600Z" + }, + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model slope: 2.02720881036\n", + "Model intercept: -4.99857708555\n" + ] + } + ], + "source": [ + "print(\"Model slope: \", model.coef_[0])\n", + "print(\"Model intercept:\", model.intercept_)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "We see that the results are very close to the inputs, as we might hope." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "**Model evaluation for regression**\n", + "\n", + "- RMSE\n", + "- R Square\n", + "\n", + "https://scikit-learn.org/stable/modules/model_evaluation.html#scoring-parameter" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": { + "ExecuteTime": { + "end_time": "2018-12-26T02:32:43.445443Z", + "start_time": "2018-12-26T02:32:43.441417Z" + }, + "code_folding": [], + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [], + "source": [ + "# Root mean square error 均方根误差,亦称标准误差\n", + "# https://en.wikipedia.org/wiki/Root-mean-square_deviation\n", + "def rmse(y_test, y_pred): \n", + " mse = np.mean((y_test - y_pred) ** 2)\n", + " return mse ** 0.5" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": { + "ExecuteTime": { + "end_time": "2018-12-26T02:32:47.989491Z", + "start_time": "2018-12-26T02:32:47.983715Z" + }, + "code_folding": [], + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [], + "source": [ + "# R square\n", + "def R2(y_test, y_pred): \n", + " residuals_sum_of_squares = np.sum((y_pred - y_test)**2)\n", + " total_sum_of_squares = np.sum((y_test - np.mean(y_test))**2)\n", + " return 1 - residuals_sum_of_squares/total_sum_of_squares\n", + "# https://en.wikipedia.org/wiki/Coefficient_of_determination" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": { + "ExecuteTime": { + "end_time": "2018-12-26T02:35:37.441154Z", + "start_time": "2018-12-26T02:35:37.436570Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "RMSE: 0.1584\n", + "R2 score: 0.9992\n" + ] + } + ], + "source": [ + "print('RMSE: %.4f' % rmse(ytest, yfit))\n", + "print('R2 score: %.4f' % R2(ytest, yfit))" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": { + "ExecuteTime": { + "end_time": "2018-12-26T06:10:19.758587Z", + "start_time": "2018-12-26T06:10:19.755636Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [], + "source": [ + "from sklearn.metrics import mean_squared_error, r2_score, explained_variance_score" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": { + "ExecuteTime": { + "end_time": "2018-12-26T02:35:47.008382Z", + "start_time": "2018-12-26T02:35:47.002317Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "RMSE: 0.1584\n", + "R2 score: 0.9992\n", + "Variance score: 0.9998\n" + ] + } + ], + "source": [ + "print('RMSE: %.4f' % mean_squared_error(ytest, yfit) ** 0.5)\n", + "print('R2 score: %.4f' % r2_score(ytest, yfit))\n", + "print('Variance score: %.4f' % explained_variance_score(ytest, yfit))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "The ``LinearRegression`` estimator is much more capable than this, however—in addition to simple straight-line fits, it can also handle multidimensional linear models of the form\n", + "$$\n", + "y = a_0 + a_1 x_1 + a_2 x_2 + \\cdots\n", + "$$\n", + "where there are multiple $x$ values.\n", + "Geometrically, this is akin to fitting a plane to points in three dimensions, or fitting a hyper-plane to points in higher dimensions." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "**Building some example data using NumPy**\n", + "\n", + "The multidimensional nature of such regressions makes them more difficult to visualize" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "ExecuteTime": { + "end_time": "2018-12-26T01:53:32.046192Z", + "start_time": "2018-12-26T01:53:32.040784Z" + }, + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [], + "source": [ + "rng = np.random.RandomState(1)\n", + "X = 10 * rng.rand(100, 3)\n", + "y = 0.5 + np.dot(X, [1.5, -2., 1.])\n", + "# $y$ is constructed from three random $x$ values" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "we can use the single ``LinearRegression`` estimator to fit lines, planes, or hyperplanes to our data." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "ExecuteTime": { + "end_time": "2018-12-26T01:52:01.908289Z", + "start_time": "2018-12-26T01:52:01.891454Z" + }, + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.5\n", + "[ 1.5 -2. 1. ]\n" + ] + } + ], + "source": [ + "model.fit(X, y)\n", + "print(model.intercept_)\n", + "print(model.coef_)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Basis Function Regression 基函数回归\n", + "\n", + "One trick you can use to adapt linear regression to nonlinear relationships between variables\n", + "- to transform the data according to *basis functions*.\n", + "\n", + "We have seen one version of this before, in the ``PolynomialRegression`` pipeline used in [Hyperparameters and Model Validation](05.03-Hyperparameters-and-Model-Validation.ipynb) and [Feature Engineering](05.04-Feature-Engineering.ipynb).\n", + "\n", + "The idea is to take our multidimensional linear model:\n", + "$$\n", + "y = a_0 + a_1 x_1 + a_2 x_2 + a_3 x_3 + \\cdots\n", + "$$\n", + "and build the $x_1, x_2, x_3,$ and so on, from our single-dimensional input $x$." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "That is, we let $x_n = f_n(x)$, where $f_n()$ is some function that transforms our data.\n", + "\n", + "For example, if $f_n(x) = x^n$, our model becomes a polynomial regression:\n", + "$$\n", + "y = a_0 + a_1 x + a_2 x^2 + a_3 x^3 + \\cdots\n", + "$$\n", + "\n", + "Notice that this is *still a linear model*\n", + "- the linearity refers to the fact that the coefficients $a_n$ never multiply or divide each other.\n", + "- What we have effectively done is taken our one-dimensional $x$ values and projected them into a higher dimension, so that a linear fit can fit more complicated relationships between $x$ and $y$." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Polynomial basis functions 多项式基函数\n", + "\n", + "> polynomial, Synonym: multinomial, 多项式\n", + "\n", + "This polynomial projection is useful enough that it is built into Scikit-Learn, using the ``PolynomialFeatures`` transformer:" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-20T09:39:14.565054Z", + "start_time": "2018-05-20T09:39:14.558498Z" + }, + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 2., 4., 8.],\n", + " [ 3., 9., 27.],\n", + " [ 4., 16., 64.]])" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from sklearn.preprocessing import PolynomialFeatures\n", + "x = np.array([2, 3, 4])\n", + "poly = PolynomialFeatures(3, include_bias=False)\n", + "poly.fit_transform(x[:, None])" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "We see here that the transformer has converted our one-dimensional array into a three-dimensional array by taking the exponent of each value.\n", + "- This new, higher-dimensional data representation can then be plugged into a linear regression.\n", + "- As we saw in [Feature Engineering](05.04-Feature-Engineering.ipynb), the cleanest way to accomplish this is to use a pipeline.\n", + "\n", + "Let's make a 7th-degree polynomial model in this way:" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-20T09:40:06.921714Z", + "start_time": "2018-05-20T09:40:06.917263Z" + }, + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [], + "source": [ + "from sklearn.pipeline import make_pipeline\n", + "poly_model = make_pipeline(PolynomialFeatures(7),\n", + " LinearRegression())" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "With this transform in place, we can use the linear model to fit much more complicated relationships between $x$ and $y$. \n", + "\n", + "For example, here is a sine wave with noise:" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "Our linear model, through the use of 7th-order polynomial basis functions, can provide an excellent fit to this non-linear data!" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-20T09:56:35.280127Z", + "start_time": "2018-05-20T09:56:35.146469Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXcAAAD3CAYAAADmBxSSAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzt3Wl4W+d16Ps/JgIcQBIkQVIiNZLi1ixRoibL1mTZjhMnTuIkTtwmHRKnyT3ntGlOn560Tfq0ve7tc/KctDc5t2ly3IxN3TiJ68RxIg+yZFmDRc0SJZGbIjVwEEWC8wxiuh9AyBQFgCOwgY31+yRxg9zvJoGFF+9e71qGQCCAEEIIfTFqPQAhhBDzT4K7EELokAR3IYTQIQnuQgihQxLchRBCh8xaDyDE5RqYddqOw5FBT8/wfA4n4ck1pwa55tQwl2t2Ou2GcF/XxczdbDZpPYS4k2tODXLNqSEW16yL4C6EEOJeEtyFEEKHJLgLIYQOSXAXQggdkuAuhBA6JMFdCCF0SIJ7EnB7fHT0DOP2+LQeihAiSSTMJiZxP5/fz4uHGjhf76K7301etpXKCidP7yvXemhCiAQnM/cE9uKhBg6eaaGr300A6Op3c/BMCy8eatB6aEKIBCfBPUG5PT7O17vCHjtf38nomDfOIxJCJBMJ7gmqb9BNd7877LGegVF6IhwTQgiQ4J6wcrKs5GVbwx5z2G04IhwTQgiQ4J6wrBYTlRXOsMcqKwqwpcm9cCFEZBIhElgoK+Z8fSc9A6M47DYqKwokW0YIMSUJ7gkgEAiWsjcY7i3LbDIaeWZ/BU/tLqNv0E1OlhWrJfXKoQohZk6Cuwa8Pj+XGrs4ebWdxtY+egfdGA0G8nNsKIty2bluAStKc+4Ge6vFRKEjQ+NRCyGSiQT3OHJ7fJy6eoffnGyio2cEgJysNMoW5uDzB7jTPczRS20cvdRGWUk2n35UYXGRXeNRCzF9bo9PPmUmCAnuceDz+/mPg9c4UdPGqMcPQElBJp99YhVLi7PvPs7vD1Df3MubZ5o5f62Tv/vhGT780DI+sGPJfUs2QiSSaLupTUbJ29CCBPc4+Pc363n7/O17vtbaOcSJy3fuCe5Go4GVSxysXOLg8o0ufvDbOv7zneu0uAb53BOrMZvkRSISU2g3dUhoNzXAM/sr7nu8x+unZ9CN1+vHnmEhK90iE5h5NqfgrijKNuB/qqq6Z9LXPwj8NeAFvq+q6vNzOU8y6xsa49iltrDHztd38tTusrAfX9cuy+evf38L//xyDadqO/B4/Xzxw2slwIuEM9Vu6tBzvKtvlOOX2zhX76LVNYTPH7j7uEybmTXL8ti2uoiH87PiNXRdm3VwVxTlz4FPA0OTvm4B/gnYMn7suKIov1ZV9c5cBpqM/P4A/+eVK3h9gbDHewZG6Rt0R7xZmpOZxn9/eiP/+6VLnL/Wyfd+U8vnP7haZjgioUy1m7rVNcg7F9s4XtOGzx/AbDKwtNhOUV4GZpORgeExbrUPcKq2g1O1Hbx05Dof21PGxvKCOF+Jvsxl5t4IfBT4t0lfXwU0qKraA6AoyjHgIeDn0X6Yw5Expw7gTmfi3Xj83iuXqb3Vg8VsxOP133e8IDedsqX5U25I+rsv7ORr3zlB9dV2yhY5+NSjCpCY1xxrcs2Jx56TjtORfjdJYKKsDAvffKmGgaExSpxZPLW3nJ0bFpJhs9zzuEAgwI3b/bx67DpvnWnmW7+4xM4NC/lvH99IZrrlvp+rR/P9d551cFdV9SVFUZaGOZQN9E34/wCQM9XP6+kZnu1QcDrtuFwDs/7+WDiruvjlkUYW5GdQsSiXIxdu3/eY9WX5DPSNMJ2R/9EHV/Pcj8/wwut15GVaeGzn8oS75lhLxL9zrCXLNa8vy79nzT2kf8hDmtnIJx9ewf7NpRiNBoYGRhkaGL3vsfY0I5/aV86Tu8v4f//jHMcv3ubarR6+9IkNFOfpOxV4Ln/nSG8KsVjA7Qcmns0O9MbgPAmrZ8DNDw/UYjEbefaDq3l0yyL2Vi4kP9uG0QD52Tb2V5XOaKdpdmYaf/yx9aSZjfzgt7V09t4/SxJCK0/vK2d/VSn52TYMgMUcDC3Feen8zR9u5dEtizAap7ecuKQ4m//xTCWPb19MR+8I//CTs9y6k/hvcIkmFtkytcAKRVHygEFgF/C/YnCehBQIBPj+b2sZGvWiLM7ln/+z5m5q2PryAvZvLiUv2zarHOBSZxaffHgFP35d5RsvnOVLT62f9gtGiFgK7ab+0M5lfPvlGuqaelm1xMF/+cja+5ZgpvvzPr6nnIKcdH7yusrX/+M8X/mdTSwqlJut0zVvM3dFUZ5RFOXzqqp6gC8DrwPvEsyWaZ2v8yS66qvtXLnRTX62FbWp955GG4fPtXL4fGvUwD5VS73dGxdSuaKAy41dHD6fMr9WkQT8gQA/OlBHXVMva5bl8aWPr59VYJ9ob2UJn3tiNSNuL//4swvyiXUG5jRzV1X1JrB9/N8vTPj6r4Ffz2lkSWh41MNPDzVgMRvvSfOaKFL643Q3gRgMBj7zvpXUt1TziyONVK4oIC/bFtPrEmI6XjrSyNl6FysX5/LfProOyxwSJCbasbaYgREPP33rGv/084t89TNVpFtli85UJGl6Hr189Ab9Q2Psqyyhb3As7GNC6Y+TzaSlXk5mGn/4wTW4x3x8/7e10jhbaO54TRsHTjZR5Ejn//rIOtLmufTAo1sWsX9zKW1dw/zwQN3dYnsiMgnuszR5+aS9e5i3z7dS5EjniZ1LozbaSLea7/neqTaBTA7ePr+fm7f7MJsMXL3Zw5//ywleOFiPz39/uqUQsdbSMciPXlPJsJr5k49vwGI2Rl1anK1P7CunvDSH03UdHDx7f2aOuJd8tpmhSMsnvQNufP4AT+0uI9NmobLCGTY1LMNm5u9+ePqe791bWRJ1E8jkjU4vvFnP4QnlDAaGPVG3egsRK26Pj++8cgWvz88XnlzNoXMtc6ov4/b4aOscwufx3bd0aTYZ+eKTa/mbH5zi54cbWbssjwX5mbG4LF2Q4D5D0WpoLFuQzWYl2D0pXKONDJuZ5o7B+77X5/OTl22lK0yAd9ht5GQFPwX4/H5eOHgtbM586FyRyhkIEQsvvnWN251DPLy5lLqm3hnVl5nonknTgJs8e/g3BofdymceU/jnly/zr6/W8pef3iSFySKQ38oMRFs+AfjwQ8vulgYIpYY99+w2/p/Pb+evf7+K4VFP2O+71NjN+ghbrSsrCu4G6xcPNXD4XCsR7tXS3R9+PV+IWLhyo5u3L9ym1JnFkw8um9HS4mT33HMKRL/ntFkpZPvqIm609fNaddO8XIseSXCfgWg1NACKHOn3fS3UaGPE7Y269LJ/c+ndTSDhNjpN9cYCkG41353lCxFL7jEfP3qtDqPBwGc/sIrhUc+US4sRf9YM7zkBPPNIBTmZabxy/KakR0YgyzIzkJNljbh8kp2RFjWwRvteh91GXrYtaku9qd5YADw+v2QRiLh4+eh1OvtGeXz7YpYU23F7fNNaWgxnqsJj4YrrZaVb+MS+cp7/9VV+eqiB//rRdXO7IB2SmfsMWC0mKiucYY9tqsiPutYd7XsnLr2EZvqTf1bozSEcowGWFtvxeP28JVkEIsaa2gd480wzhY50nty5DJj+8zucaM/taG8M21cXsaI0h3P1Li5f75rhVeifBPcZ8Pn9+AMBbGn3/9pqrndPmY44sf7GTGvMRHvx7K4s4c8+WUmG1cxr1U2MuL3TvyghZiAQCPDTt64RCMDvPlpxTz77bJ/fs31jMBgM/M4jFRgM8MLBa5IKPIksy8zAi4caOHQ2/Jb/6WQGhG6yRlp6mUq4DJzKioK7GQWPblnEL4/d4MiF27xv2+IZXp0QUzuruqhr6mVDWT5rl+Xfc2wuz+9oz+1oFhfZ2b2xhLfPt3LsUhu7N5bM7sJ0SIL7NE3nhiZMLx0xtPQyUxNfPKY0C74xzz3n2be5lAPVTbx5ppn9VaXStUnMK4/Xx88ON2AyGnj64RURHzeT5/fEhtrRntvRfGjnUk7UtPGrYzfYvqZYUoHHyat/mlw9w2FvFk02VWbAfLBaTCwoyLzvSZyVbuGh9QvoGXBzqrY9pmMQqefNMy109o3y8ObSOddXD+7ZqOerz5/kL757kq8+f5IXDtZjNhnCPrejyc2y8siWRfQOjnFI7jndJcF9CqEn4Td/cWlaj58qMyDWHt2yCKPBwGvVzZI5I6ZlqkqkECyK99t3b5FpM/OhnUvnfM6Z1FKajse3LSbTZuY3795ieFTuOYEsy0xp8o7UqUyVGRBrBbnpVK10cqq2gys3u+9bFxUiZLqVSAHeON3MsNvLU7uXz7mM71R57aNjMw/OGTYL79u2mJeOXOfQuRaeeGDpnMaoBzJzj2KqdXarxYgtzTTr7kqx8vi2JQC8fqpZ45GIRDbd2fPA8BhvnG4mO8PC/s2L5nzeqfLae6ax/BnOvk2lZFjNvHG6GfeYVEqVmXsUU20c+qvPVOHMTZ9V5kssLSm2U7Eolys3urnTPaz7/pNi5qaaPU9MCjhQ3cTomI+PPLQca9rcn+NTbehzZFsZ6Iu+63TijdjQONOtZvZXlfLK8ZscudDKo1tTO2NMZu5RRNtckZ9tw5mbHnHTkdb2bQqmhB0+J92axP2msys09LhDZ1tw2K3sqVw4L+eeKq/dlhZ5zhnpRmwox31/1SKsaSYOnGrC47139j6dewt6IjP3KEJPwnBr7lqvrU9lU4WTnMw0jtW08dFd8zPjEvox1ew5lBTw+ulmxrx+nn5g6bx1VoLZ57VHq8r6zP4KstIt7Kss4UB1E8dq7rC3smRG9xb0RL9XNk9Cu+7y7O/N4HdvXJgQa+vRmE1Gdm1YyIjbS7WkRYpJos2e15cHS2kMj3p4+3wrOVlpPLhuwbzOfCdXTX3u2W08s78iarCdboGxR7cswmQ08ObpZvyBwLxn5iQLmblPIfQkXF+Wzz++eJGtqwr5vfet1HpY07KnsoTfvHuLQ2dbeGj9grvliIUA+Nie5ahNvbS6Bu8pI33xmguT0YA9w8LomI8ndizh52/HZuY7kw1P0y0wlpNlZdvqIk5cvsP5a65p31vQG5m5T9O7l4Oz3z1JtL3ZYbdSWVFAU8cgja39Wg9HJJhfvH2d5o7B+/oDdA+McfBMC785cYt0q5nO/tGEmPnOpMDYI1XBrJ43TjXPuhRxspPgPg3Dox7Oqh0UOtJRFudqPZwZ2VsZfDM6clFurIr3TKecxpjXz851xdQ0hq+4OJ0mHPNpJgXGlhTbURblcq2lD4s5fJhLs5h03f9Agvs0VF9tZ8zrT8qljZVLHBTk2Dhd1yHVIsVd0+kPAFBRmpNQM9+ZVJ58ZEtw9p6q1SJlzX0ajtXcwWCAB9Yu0HooM2Y0GHho/QJePnqD03Ud7NowP+lsIrlFy5YJsVpMKIsds27CEQszqTy5sbyAvGxrxDcn95gvbCMQvZCZ+xQ6eoa50dbP6qV5OOzJ+RFu57oFGICjl8I31hapJ9oSR8imigLsGWmzbsIRS9PZX2I0Gti3qTTi8bxsbetAxZoE9ymcqu0AYNuqIo1HMnt52TbWLMujsbWf251DWg9HJIjQEofVEj4MpNvM9zxuNk1mtLZrw0KMEVZSE32vylzJsswUqmvbMZsMbKoo0Hooc/Lg+gVcvtHNsUttfCIJXpQiNiZv239qdxnn6124PfcvXVy81sXH9/iwWkxzajKjpax0C1tXF3HySjvZGRYGRzzT3jCV7CS4R9HiGqTVNUTlioI5V8LTWuUKJ5k2Mycut/HR3culkUeKibRLc29lybSbU8+2yYzW9laWcPJKOytKc/n43rKkenOaC3mFR3F3SWZ18i7JhFjMRnasKaZ/2MOlCKltQr8i7dI8eKZ5Vs2pk0l5SQ4lBZlcaOjElmZOicAOEtwjCgQCnKptJ81iZENZci/JhDy4Ppjt8+7lOxqPRMRTtJz2S43drC8P//zWy5q0wWBg98aF+PwBjtW0aT2cuJHgHsHNOwN09IywsbxAN0W3FhVmUeLM5GJjJ0OjHq2HI+Jkqm37+zeXsnZZ3t2vJdMN0+l6YG0xaWYjRy604k+RDmUS3CMI9SDVw5JMiMFgYPvqIry+AGfqOrQejoiTqbbt52XbGPMGN/r82Sc3TquIV7LJsFnYsrIQV+8o15p7tR5OXOjnrzeP/IEAp2o7SLeaddembvvqYgBOXpFKkaliqm373f2j1Df3smqJg9VL83SxFBPOznXBZcnjNe8tS+q5xrtky4TR0NJHz4CbB9ctiFiXIlnl59hQFuWiNvfS1TdKfo5N6yGJOIhWP/3nhxuBYClrPatYnHu3FMfTD5fxq2M3dV3jXYJ7GNU6XJKZaPuaItTmXqpr23n/9iVaD0fEQaRt+x6vjxOX72DPsLBpih2ryc7j9bOhLJ+3zrXyL7+8wtWbPXePTW76oQf6eIuaRz6/nzN1HdgzLKxcklwVIKeramUhZpOBdy/fIZAiN5dE0ORt+2frXQyOeHhw3QLd7n2Y2JrvrfG2k3W3esI+Nt6VLmNJn3/NOai91cPAsIeqlYW6+Xg2WabNwoayAlo7h2juGNR6OEJD71wI1hvSc0G5iTn+IZNr2Ifoqca7PqPXHJy6mvy1ZKZj+5rg9Z28KjdWU9Wd7mHqmoI3Uovykm/n6XRMp279RHrZuAUS3O/h8fo5W+/CYbdSXpqj9XBian1ZARlWM9VX21Mm71fc68iF4BKFnm+kTrdufYheNm7BHG6oKopiBL4NbADcwOdUVW2YcPxbwE5gYPxLT6qq2jeHscbc5etdjLi97NqwAGOSNeWYKYvZyKYKJ8dq2mhs7WNFqT7vL4jwPF4/x2vukJVuoXKFfm+kTlW3Xs/FxOaSLfNhwKaq6g5FUbYD3wCenHB8E/CYqqqdcxngfJtcFW8ivWfJTLZlVSHHato4XdshwT3FXGrsZHDEw6NbFuku3XeiUI5/KBNmsk0VTt63bbEui4nNJbg/CLwGoKrqSUVRqkIHxmf1K4D/oyhKEfA9VVW/P6eRzlGkqnihvFb3mI8LDZ0UOtJZUmTXcqhxs2qJg0ybmdNqB5/cv0L3n1bEe0IbeR5cl3zdxWYqXI7/hvJ8Ttd1cK7exe88qq/duCFzCe7ZwMRlFp+iKGZVVb1AJvC/gX8ETMBhRVHOqKp6KdIPczgyMJtn/87pdEYPyM//suaed+9QXmtGehrPfngd75xvYczjZ+/mRRQWZs96HPE01TVPx84NJbxRfQvXwBhrk6BA2nxcc7KZ72vuGRjl0vUuykpzqFyTmMF9vq/5Tz61mdExLz39bhzZVmxpZr7zn5f4zfEb3O51s0kpnNfzzcZ8X/Ncgns/MHE0xvHADjAMfFNV1WEARVEOEVybjxjce3qGZz0Qp9OOyzUQ8bjb4+P4xdawx45fvM3jWxdxsPoWAGuXOqL+rEQx1TVP17qlDt6ovsWbJ29SFKH+SKKYr2tOJrG45jdONeH3B9i6sjAhf5+x/DubgYG+EQaA9csc/Ob4Dd44cYNFeekxOd90zeWaI70pzOWzyHHg/QDja+41E45VAMcURTEpimIhuIRzbg7nmpOpquLd6Rqi5noXpc5MSgoy4zw6ba1ckktWuoUzqgt/pORfoSvHau5gMgaLyKWyspIc8rNtnK13MaaTjUsTzSW4vwyMKopyAvgn4E8VRfmyoigfUlW1Fvh34CRwBPixqqpX5j7c2ZmqKt6NtgG8vgBbdZ7bHo7JaKRKcdI/NEZ9ilTLS2VN7QO0uAZZX5aPPSNN6+FoymgwsG11EaNjPl02sJn1soyqqn7gC5O+XDfh+NeBr8/258+naHfMKysKODu+yWFris5ktqws5O0LtzlV18HKJQ6thyNiKNSsIhVupE7H9tVF/PbkLU5ebadqpfbr7vNJf7eII4jUwf3xbYupvdnDsgXZFOZqu+6mlYrFuWRnWDirduDz+7UejogRr8/PySvtZKVbWFemr1LWs1U63sDmUmMnwzprYJMyVSEjVcU7fK4FfyDAtlX6eteeCZPRyOaVhRw+14ra1MvqpXlTf5NIOjWNXQyOeNhfVarbImGzsX11ES8duc5Z1cVDOqqxk3J/4clV8aqvtmMAtqTgevtEW8c/koaaggv9OT7eO3fnWlmSmSh0ry20iVEvUi64T9TdP0p9Sx8Vi3Jx2BM7DTDWVpTmkpOZxrl6Fz6/X9cdalJR//AYFxs6KXVmsbgoS+vhJBRnbjrLFmRTd6uXgeExrYczb1JmWSac0+N9RFP1RupERqOBTRVODp9v5V9+eZlbdwZ026EmFZ2p68DnD/DA2mIMshP5PltWFnKjrZ9z9S62rymOWKIkmaR0cK++2o7RYKBK0W/hpJnYpASD+7n698oB6bFDTSoKLT+mSt2kmapSnPzscAO/PnGTV0/c1MXEJvlGPE/ae4a5eWeA1cscKZ/vG7Ks2E6kOZ2eOtSkmu7+Ua7J8mNUBbnpZGdY6O5309XvJsB7E5sXDzVM+f2JKGWDe+jGod6bcszE4IiHSHtU9dShJtXcfa7LrD0it8eH1xc+DThZJzYpGdwDgQCnrrZjNhl1Xct6pnKyrNjTw6/U6alDTaqprg0uP26W5ceI+gbdDLvDB/BkndikZHBv7hiktXOIDeX5ZNhS+rbDPawWE1URPsnoqUNNKmnvHuaWLD9OKSfLSn6UEiXJOLFJieA+Oa2verxvaKoXTgrnmf0rKHIEd+oaeG8nr5461KSSU6EGNLL8GFWoREk4yTqx0fW0NVyDjo0rCjhf30m61cR62YJ9H5PRyEd2Lec7v7rCvk0lfGxvOVaLCbfHR1ffcNKnh6WaU7Udsvw4TU/vK2fE7b3byCQ/O7lb7+k6uL94qOG+Bh1vnQ3WdX9w3QIsc2gOomfrludjNhmpa+7FbDLwwsH6iB2sROJqGV9+3FThlOXHaTAZjXz2A6tp6RiiuWOAr/zuJvKzbVoPa9Z0++p0e3ycH6/2GI7cXIos3Wpm7bI8Wl1DfP+3tRw806Kb9LBUkmo9gefL1tWF+ANw5Ua31kOZE90G92gNOoC768oivNCb38Vr4fubJ2t6WKoIBAKcqm3HapHlx5mqGm+5d6Yuuess6Ta4R2vQYUsz4Ujij1vxsKG8AKMB3aWHpYobbQO4ekepXJGcNwO15MxNZ2mxnas3exgcSd4ywLoN7tHufq8ry5cn/BTSraao6V/Jmh6WKkJZMlI3aXa2rCzEHwhEXdpNdLoN7nBvg47Qtvp0q5lnn1il6biSwYuHGugZiDwzT9b0sFTgH1+SyRi/dyJmbvN4CewzqgT3hBRq0PHcs9t4avdyAB7bsgizSYJSNNFuRhsNsLdyYdKmh6WCa8299A6OsVlxSlOOWSrMTWdJkZ2rN7sZStIOTSnxl7daTFxs7MIAPLCuWOvhJLxoN6MDwGNbF0saZAKrlloy86JqpROfP8CFCEkFiS4lXqF3uoe51tLH6qUOCnIkS2Yq0W5G58lae0Lz+vycqesgOzONlYul2flcJHvWTEoE9+PjHd93rpf2YtOhx63YqaL2VjDDY4tSiNEoTTnmoigvg0WFWVy52c3wqFfr4cyY7oO7z+/neE0bGVYzm2QL9rRNvBkdsmejrLUnulNXZePSfKpSnHh9AS42JN/SjO6D+5Ub3fQOjrFtTRFpMuOctok3o/dXlQJQsThX1toTmMfr49w1F/nZVpaXZGs9HF2oups1k3xLM7p/pb59/jYAD8mSzKxYLSZ2bVgIwLkkTgtLBZcauxlx+9iyqgij9EmdFwvyMylxZlJzvZsRd3Itzeg6uHf0jnCxoZPlC7NZWiwzmdkqKcik0JFOzfVuxiaVHJhcTlloR8r7xkaVUojX5+diY3Itzei6VNzb51oJAA9vLtV6KEnNYDCwucLJgeomrtzspnKFM2w5ZakWqZ3RMS8XGzopystgcVGW1sPRlSrFya+O3eBsnYvtq5MnlVq3r0K3x8fRS7fJzrDcTWkSs7dpPHvmTF0HHT3DvHDwmlSLTCAXGjoZ8/rZtqoQgyzJzKsSZxYL8jO4dL2L0bHkWZrRbXCvvtrO0KiXXRtLsJh1e5lxs7g4C6vFyMmr7Xzluyc5cr417OOkWqQ2Tl0N3vDbKksyMVGlFOLx+rnU2KX1UKZNl1HP7w/wWnUTJqOBvZUlWg9HF35+uBG3x08gEPy/PxD+cVItMv6GRj3UXO9iUWEWCwsytR6OLlUlYa0ZXQb3M2oHd7qHeWBtMQ677Kacq6kan0wk1SLj75zqwucPsHWVLD/GSqkzkyJHOpcak+eTqe6Cuz8Q4NUTNzEY4P07lmg9HF2YqvHJRLKDNf6qJUsm5gwGA1UrCxnz+KlJkqUZ3QX3C9c6aXENsW11EUWODK2HowvRas0YDWAwBJsJ768qlR2scdY3NEbtrR7KFmZTkCt1k2Lpbq2ZJNnQpKtUSK/Pz8/fbsRggCd2LNV6OLoRqjUzsdl4yO6NC3ls62JysqwyY9fAmboOAgG5kRoPi4uycObauNjYxZjHl/A73nU1cz98rpX27mH2VJaQn2OTzTXzKFRrJm/8HobRaODhzSU880gFhY4MCewaqa5txwBskfX2mAstzbjHfFxOgubZugnuPQNufnXsBulWEz6fn68+f5K/+O5Jvvr8SV44WI/P79d6iEktVGvm7z+/nbXL8vD7A+zZWCIbljTU1TdKQ0sfyuJccuUmdlwk09KMLl6ZgUCAH71Wx7Dby5IiO+9cbJPNNTFitZh4YG1wl97ZJO4vqQenx+uMS5/U+FlabKcgx8aFa514vIk9YdRFcP/5W9e41NjFqiUOOnqGwz5GNtfMn/VlBZiMBs5JcNdU9dV2TEaD7MCOI4Mh+PseHfNxJcGXZpI+uDe09PFvB2rJz7by0V3L6BkYC/s42VwzfzJsZlYtddDUPoird0Tr4aSkO93D3GofYM2yPLLSLVoPJ6VsXjleiiPBl2ZmnS2jKIoR+DawAXADn1NVtWHC8WeBPwK8wHOqqr46x7GGlW41sXllIU8+sBSnI528bCtBJ+idAAAXwklEQVRdYXKyZXPN/NpU4eTy9W5O13VQpTglWybOQhUgZeNS/C1fkE1etpXz1zrx+vwJ24R8LqP6MGBTVXUH8BXgG6EDiqIUA38M7AQeA/5BUZSYRNYSZxZ/8+wOSguzpD1cHG0oywfgl0evy43rOAsEAlRfbcdiNlIp3cXiLlgltZARt5erNxN3aWYuwf1B4DUAVVVPAlUTjm0Fjquq6lZVtQ9oANbP4VzTNrE9nFE218TMgeomALy+gNy4jrMW1xBtXcOsL8sn3aqrrSpJY0uo1kxd4t53msszIxvom/B/n6IoZlVVvWGODQA50X6Yw5GB2Tz7mbXTab/77z/51GZGx7z09LtxZFuxpenzBTDxmuNpdMwbsTrepcYu/uip9Jj9zrW6Zi1NvuYDp5sBeGTbUt3+PhL9uvLzs8h75QoXGjpx5GXOy9LMfF/zXF6B/cDE0RjHA3u4Y3agN9oP64mQ5TIdTqcdl2vgvq+bgYG+Ee4/kvwiXXM8dPQM4+oJfyO1s3eExptdFMag9IOW16yVydccCAQ4fKYZa5qJpc4MXf4+kuXvXLmigLfOtnD0TBNrl+fP6WfN5ZojvSnM5e3mOPB+AEVRtgM1E46dAh5SFMWmKEoOsAq4PIdzReT2+GjrHJI0xziKVmtGblzH1vW2fjr7Rtm0oiDht7/r3ZYEb549l5n7y8AjiqKcAAzAHyiK8mWgQVXVVxRF+RZwlOAbyF+pqjo69+G+5542bwNu8uzS5i1eotWakRvXsSVNORJHeUkOOZlpnKvv5NOP+RMu7sw6uKuq6ge+MOnLdROOPw88P9ufP5UXDzXcE1xCN/QAntlfEavTinGhG9SnazvoGxojzWxk18aFcuM6hvz+AKfq2sm0mVmzLE/r4aQ8o9HAJsXJ4XOt1DX1smZpYv1NEuutZpqiNY+QnajxEao18w9/tJ2CHBsAH9tdlnCzFz2pb+6lb3CMzUphwuZWp5ot47uDz46XgnB7fAlTsDAp00iiNY8I7USNxQ09cT9bmpktqwo5cLKJKze6I+4zEHN36m5TDtm4lCgqFuViz7Bwtt6FyWTgwrVOuvvd5GVrv0yclG//ckMvsWyuCAYbqTUTO16fnzOqi5zMNJTFDq2HI8YZjQY2VzgZGPbw1tnWhCpYmJTBXXaiJpalC+w47FYuNAS3Y4v5d/VmD4MjHrasLMRoNGg9HDHB+vKCiMe0XCZOyuAOshM1kRgNBjatcDI06qW+Oep2BjFL1VfvALBNyvsmnCJH5PaGWhYsTMo1d3jvht5Tu8swpVnwjXlkxq6hTRUFvHWuhbP1LlYnWNZAsnN7fJy71klBjo3lC7O1Ho6YJC/bhtVixO25/1OrlsvESTtzD7FaTCwoyJTArrGKxblk2sycr3fhDwS0Ho6uXGrswj3mY9vqIgwGWZJJNFaLKeIOVS2XiZM+uIvEYDIa2biigN7BMW7c7td6OLpy8oosySS6z39oNbY0EwaCOzoTYZlYgruYN5I1M/8GRzzUXO+i1JlJqTNL6+GICCwmEw9vLiUAfPLhcp57dhvP7K/QdN+HBHcxb9Ysc2C1mDhb7yIgSzPz4t1Lt/H6AjJrTwI71gR7C1+52ZMQy8QS3MW8sZhNrCvLp6NnhNbOIa2HowvvnG8FpJZMMlhYkMmSYjuXr3fTPxS+3Wc8SXAX82pTRTDn95wqSzNz1Tfo5lKDi7KSbJy5kdPtROLYsaYYfyBwdzexliS4i3m1oawAs8kg6+7z4FRdB/4AbJNZe9LYtroIo8HAu+M3wbUkwV3Mq3SrmVVL8mjqGMTV+15Dj0QqqJQsTl1tx2iALRLck0ZOZhqrlzm40TZAW5e2S5NJu4lJJK7NipOa612cq3exv6r0vbr7CVJQKRl09I7QeLufjRVOcjLTtB6OmIEH1hRz+Xo3Jy7f4andZZqNQ4K7mHcbywswGOBsvYuu/lGpuz8Lp64G12x3V5ZoPBIxU5sqnGRYzRy71MaTDy7TrDyzTJ3EvMvOTGNFaS6NLX1361xPJnX3o6uubcdsMrJj3UKthyJmKM1iYsfaYvqGxrjYEL6RfDxIcBcxsXVVIQGgZzB8SpiWBZUSXUvHIK2uIdaX5ZOZbtF6OGIWdm8Ivim/c/G2ZmOQ4C5iYrNSiMEAZlP4WihSdz+y6vE0uu2ycSlplRZmsWyBncvXuzS7sSrBXcRETmYaq5Y48PrC71SVuvvh+QMB3r1yh3SrifVl4YtRicTm8/t54WA9HT0jBIDnfnSGFw7W4/PHt9eBBHcRM6FdleUlOVJ3f5rUpl66+91UKYWkyZtfUnrxUAMHz7QwNOoFYGTMp0lXJsmWETGzqcLJv72uMub18dyz2+gbdJOTZZUZexTvXg5ufnlgbbHGIxGz4fb4OB9hA9/5+k6e2l0Wt+e/zNxFzGSlW1izLI+m9kF6BoJNyyWwR+b2+DitdpCfbWPFolythyNmoW/QTXd/+ESBeCcRSHAXMbV1VbAMcCLU2kh05+tduMd87FhbjFGaciSlnCwrednhEwXsGWlxTSKQ4C5iqnKFE7PJSPXVdikDPIUTsiST9KwWE5UVzrDH0m3muH5yleAuYirdamZ9WT5tXcO0uqQMcCS9g26u3Oxm+cJsivMytB6OmIOn95Wzv6r0bhJBnt1Kps2Mq2eE3jguy8gNVRFzW1cVcq7exam6dkoLpZtQOCevtBMIyKxdD0xGI8/sr+Cp3WV3kwjevXKHH7+m8tbZlrjVm5GZu4i5DWUFpFmMnLraIUszEZy4fAeT0SBNOXTEajHdTSLYsaaY7AwLh861MDjiicv5JbiLmLOmmdhYXkBH7wg37wxoPZyE09Q+QItrkPVl+WRJuQFdslpMPL59CSNuH2+cbo7LOSW4i7jYvjq43BDK4xbvCTV2eGDtAo1HImJpT2UJ2RkWDp5pjsvsXYK7iIu1y/PISrdQXduO1xffbdiJzOvz8+6VdjJtZik3oHOh2fvomI83TjfF/HwS3EVcmE1Gtq0uYmDYw+Ub3VoPJ2HUNHbRPzTG9jXFWMzyctS7PZUlZGem8fqp5pgXFJNnk4ibUCbICVmauevopTYAHlovSzJ65/P7eelIIz6fH4/Xz9/+4HRMC4pJcBdxs7TYzoL8DC5c62R4ND4ZA4msZ8DNxcZOlhbbWVxk13o4IsYmFxQb8/pjWlBMgruIG4PBwANri/H6/JyO0KEplZy43EYgAA9tkG5LehetoNg51cXomHfezynBXcSVZM0EBQIBjl5sI81sZJvktutetIJi3QNueiIcmwsJ7iKu8nNsrFycS31LH67eEa2Hoxm1qZeO3hGqVhaSYZON4noXraAYQFff/L8WJLiLuNsxfmM1lN+dio5eCvbWlBupqSFaQTGH3Yo9M23ezynBXcRdlVJImtnIiZo7KVmOYHjUwxnVRZEjnQqp254yJhcUC3Ul+/oXd7CkOHvezzerz4OKoqQDPwEKgQHg91RVdU16zCtAPuABRlRVfXyOYxU6kW41s1lx8u6VdtSmXlYucWg9pLg6ebUdj9fPQxsWYpC67SkjXEGxWJYAnu3M/YtAjaqqDwE/Br4a5jHlwIOqqu6RwC4m2zWeIfLOxdsajyS+AoEAh8+3YjIa2CkVIFPSxIJisTTb4P4g8Nr4vw8A+yceVBSlCMgFfq0oyjFFUZ6Y/RCFHlUsyqU4L4MzqituVfISQX1zL62uITYrzrh25RGpZ8plGUVRPgv86aQvtwN94/8eAHImHU8DvgF8E8gDjiuKckpV1YjJzQ5HBmbz7N/JnM7U2wSS7Nf8+APL+MGrV6i52cOHdk2vxnWyX/MPXlMB+Oi+imlfS7Jf82zINc/dlMFdVdXvAd+b+DVFUf4TCI3EDvRO+rY7wHdUVfUCHYqinAcUIGJw7+kZnsGw7+V02nG5UquUrB6uecNyByajgd8ev8H2lc4p15+T/Zp7B92cuHSbEmcmzizLtK4l2a95NuSaZ/694cx2WeY48P7xfz8OHJ10fD/wMwBFUbKAtUDtLM8ldCo7I43KCietnUNcv92v9XBi7p2Lt/H5A+zbVCo3UkXMzTa4/wuwRlGUY8Dngb8FUBTl64qibFVV9QBwTVGUk8AbwF+qqto5LyMWurJ7/MbqEZ3fWB12ezl0rhVbmontq2VHqoi9WaVCqqo6DHw8zNf/fMK/vzSHcYkUsWqpg4IcG6dq2/nUwytIt+prt6bP7+fFQw2cvHKHwREvNouRl49e5+l95ZiMss1ExI48u4SmjAYDuzYsZMzj12Up4FAlwMGRYGGoUU9sKwEKESLBXWhu14aFmE0GDp5twa+jHavRKgGer+/E7fHFeUQilUhwF5rLzkxj26oi2ruHuaqjLk3RKgH2DIzSNzj/lQCFCJHgLhLCw1WlABw826LxSOZPTpaVnKzwBaEcdptsYhIxJcFdJISlxdmUl+ZwqbGL9u7Z73lIJFaLKWIAr6woiPn2c5HaJLiLhLF/c3D2/pZOZu8jbi8dPcOkmY3k2a33VAJ8el+51sMTOqevvDOR1DZVOHHYrRyraeMju5YnfVrksUttjLh9fPjBZTy2bXFcKgEKESIzd5EwzCYjeytLGB3zceRCcm9q8vr8vHmmGYvZyN5NJXGrBChEiAR3kVD2birBmmbijdNNeLx+rYcza+9euUNn3ygPrV+APWP+u+wIMRUJ7iKhZNos7Nm4kN7BsaRtw+fz+/nNu7cwGQ28f/sSrYcjUpQEd5FwHt2yGLPJwIGTt/D7k29T06naDjp6Rnho/QLysm1aD0ekKAnuIuE47FYeWFtMe88IZyPs8ExUfn+AV0/clFm70JwEd5GQHt+2BIMBfvPuzaRqon1G7aCta5gda4spyE3XejgihUlwFwmpKC+DLSsLaWof5MK15KgW7fP7+dWxGxgNBj6wQ2btQlsS3EXCevLBZRgM8PLR60lRUOx4zR3auobZtWEBRY4MrYcjUpwEd5GwFuRn8sCaYlpcQxw808zomFfrIUXk9vj45dHrpJmNfHDnMq2HI4TsUBWJy+f3w3g3up++1cBbZ1vYUF6QkI0uDp5ppndwjA/sWILDLgXBhPYS6xUixAQvHmrgeM17ue6u3tGEbHQxMDzGb082kWkz8/g2WWsXiUGCu0hIydTo4qUjjYy4vXzowWVk2OTDsEgMEtxFQkqWRhfXb/dz9GIbJc5M9m0q0Xo4QtwlwV0kpJwsK3nZ4deuszPSEqLRhT8Q4N/fVAkAv/tIRcLdBxCpTZ6NIiFZLSYqK5xhj5lMBtLM2j9137l4mxttA2xfXYSy2IHb46OjZzihloxE6pIFQpGwQg0tztd30jMwSn6ODZ8/QFe/m5NX2tmxtlizsXX1jfKzQw2kW008tXs5Lxys53y9i+5+N3nZViornAmZ1SNShwR3kbBMRiPP7K/gqd1l9A26KVuaz/Vb3Xzte9W8cLCe8tIcAoFA3BtgBAIBfnigltExH3/w/pW8frqZg2fe6x7V1e+++/9n9lfEbVxCTCTTCpHwQo0ubGlmnLnpfHTXcoZGvXztX6v5yndP8tXnT/LCwfpgXnwcHLl4mys3e1hfls+WlYVJk9UjUosEd5F0XL0jAIyNN/MIzZTjkf/e4hrkpwevkWE183vvW0n/0FhSZPWI1CPBXSQVt8cXsZBYrGfKo2Nevv3yZca8fj77gVU47NaoWT1pFhNZGZaYjUeIaCS4i6Qym/z3+chiCa6z13Gne5hHtyy6m8kTLatndMzHL4/emPU5hZgLuaEqkkpoptwVJsDnZlnvyX/3+f28eKhhXrJYXj56g1O1HZSX5PCxPWX3HPvwQ8s5duk2o2P3r/mfr+/kqd1l0hhbxJ3M3EVSiTZTTrea7sl/f/FQAwfPtNDV7ybA7Nfm37l4m1dP3MSZa+O/PrUOs+nel83g8BjuMIEdZN1daEeCu0g6T+8rZ39VKXnj1RfHC0fS2jnM3/7wNF6fb95q0xy9eJsfHagjK93Clz6+geyMtPseE23d3WG3JcRuWpF6JLiLpBPKf19Xlg/AxDYeTe2D/N8/OktP/+icslgCgQBvnm7mhwfqyEy38Gef3MiC/Mywj432aaKyokCWZIQmZM1dJB2f388Lb9Zz9OLtsMebOwb5yZv15NrT6BkYu+/4VLNpj9fPfxys5+0Lt8nOTOPLn9jA4iJ71DFN3k3rsNuorCi4+3Uh4k2Cu0g6Lx5q4PD58IE95OrNHmxp4WfM0WbTN+/0871Xa2ntHGJxYRZ//LH15GXbphzT5N208d41K8RkEtxFUom2lh6SZ7eyfU0Rr59qBsBiNuL1+nHYrWxSnGFn080dg7xWfYuTV9oJAHsrS/jE3nKsEd4gIgntphVCaxLcRVLpG3SHTYOcaMOKAj62p5ytq4r4yZv1NLT0AWAeD/KHzrWSYTUzOubjTvcwalMPLa4hABYVZvH0vnJWL82L+bUIEUsS3EVSycmykpuVRu/g/WvpIfs3lwKwuMjOX/zOJupu9XDk4m0uXOvk7Qv3L+eYTQY2lhfw0PoFbFhRgNFguO8xQiQbCe4iqVgtJipXFERcc8/Ptt2zRm4wGFi1NI9VS/Pw+vy0uobo6B1hxO3FlmYiP9vG4iI7lgSoDy/EfJLgLpLOM49U0NDaT3PH4H3Hot0sNZuMLCm2s6Q4euaLEHowp+mKoigfURTlhQjHnlUU5YyiKCcVRXliLucRYiKT0chf/34VezeV4MiyYjAEZ+z7q0ol9VCIcbOeuSuK8k3gMeBCmGPFwB8DVYANOKYoypuqqso+bDEvTEYjn35U4RN7yyX1UIgw5jJzPwF8McKxrcBxVVXdqqr2AQ3A+jmcS4iwQqmHEtiFuNeUM3dFUT4L/OmkL/+BqqovKoqyJ8K3ZQN9E/4/AOREO4/DkYHZPPsXqNOZeuuocs2pQa45Ncz3NU8Z3FVV/R7wvRn+3H5g4kjtQG+0b+jpGZ7hKd7jdNpxuQZm/f3JSK45Ncg1p4a5XHOkN4VYZcucAv5eURQbYAVWAZdjdC4hhBCTzGtwVxTly0CDqqqvKIryLeAowXX9v1JVdXQ+zyWEECIyQyAQmPpRceByDcx6IPIxLjXINacGueYZf2/YLdWyLU8IIXQoYWbuQggh5o/M3IUQQockuAshhA5JcBdCCB2S4C6EEDokwV0IIXRIgrsQQuiQBHchhNChpO7EpCiKEfg2sAFwA59TVbVB21HFlqIoFuD7wFKCdXueU1X1FU0HFQeKohQCZ4FHVFWt03o8saYoyl8AHwLSgG+PF/DTrfHn9Y8IPq99wLN6/jsrirIN+J+qqu5RFKUc+CEQIFiD67+oquqf6zmSfeb+YcCmquoO4CvANzQeTzz8LtClqupDwOPA/6fxeGJu/IX/XWBE67HEw3gp7QeAncBuYJGmA4qP9wNmVVUfAP4O+HuNxxMziqL8OfCvBBsZAfwj8NXx17QBeHI+zpPswf1B4DUAVVVPEuz8pHc/B7424f9erQYSR/8L+A4Qviu2/jwG1AAvA78GXtV2OHFRD5jHP41nAx6NxxNLjcBHJ/x/M3Bk/N8HgP3zcZJkD+6Tm4L4FEVJ6qWmqaiqOqiq6oCiKHbgF8BXtR5TLCmK8vuAS1XV17UeSxwVEJyofBz4AvDviqKELQ6lI4MEl2TqgOeBb2k6mhhSVfUl7n3zMqiqGqoDM2Vjo+lK9uA+uSmIUVVV3c9kFUVZBBwG/k1V1bANynXkD4FHFEV5G9gI/Hi8R6+edQGvq6o6pqqqCowCTo3HFGt/SvCaKwjeQ/vReD+IVDBxfX3KxkbTlezB/TjBtToURdlO8KOsrimKUgS8AfwPVVW/r/V4Yk1V1V2qqu5WVXUPwWbsn1FV9Y7Gw4q1Y8D7FEUxKIqyEMgkGPD1rIf3PoV3AxYgVRrjnp/QsvRxgn0w5izZlzBeJjirO0HwRsQfaDyeePhLwAF8TVGU0Nr746qqpsTNxlSgquqriqLsItjRzEgwe8Kn8bBi7Z+A7yuKcpRghtBfqqo6pPGY4uW/A88ripIG1BJcbp0zKfkrhBA6lOzLMkIIIcKQ4C6EEDokwV0IIXRIgrsQQuiQBHchhNAhCe5CCKFDEtyFEEKH/n890uUqTeBVggAAAABJRU5ErkJggg==\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "rng = np.random.RandomState(1)\n", + "x = 10 * rng.rand(50)\n", + "y = np.sin(x) + 0.1 * rng.randn(50)\n", + "xfit = np.linspace(0, 10, 1000)\n", + "\n", + "poly_model.fit(x[:, np.newaxis], y)\n", + "yfit = poly_model.predict(xfit[:, np.newaxis])\n", + "\n", + "plt.scatter(x, y)\n", + "plt.plot(xfit, yfit);" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Gaussian basis functions 高斯基函数\n", + "\n", + "Of course, other basis functions are possible.\n", + "For example, one useful pattern is to fit a model that is not a sum of polynomial bases, but a sum of Gaussian bases.\n", + "The result might look something like the following figure:" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "\n", + "\n", + "\n", + "
[figure source in Appendix](#Gaussian-Basis)
\n", + "\n", + "The shaded regions in the plot are the scaled basis functions, and when added together they reproduce the smooth curve through the data.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "\n", + "These Gaussian basis functions are not built into Scikit-Learn, \n", + "- but we can write a custom transformer that will create them\n", + "- Scikit-Learn transformers are implemented as Python classes; \n", + " - reading Scikit-Learn's source is a good way to see how they can be created:" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "The simplest case of a normal distribution is known as the ''standard normal distribution''.\n", + "\n", + "$$\n", + "f(x \\mid \\mu, \\sigma^2) = \\frac{1}{\\sqrt{2\\pi\\sigma^2} } e^{ -\\frac{(x-\\mu)^2}{2\\sigma^2} } \\sim e^{ -0.5 (\\frac{x-\\mu}{\\sigma})^2}\n", + "$$" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-20T15:22:00.734658Z", + "start_time": "2018-05-20T15:22:00.710792Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [], + "source": [ + "from sklearn.base import BaseEstimator, TransformerMixin\n", + "\n", + "class GaussianFeatures(BaseEstimator, TransformerMixin):\n", + " \"\"\"Uniformly spaced Gaussian features for one-dimensional input\"\"\"\n", + " def __init__(self, N, sigma_factor=2.0):\n", + " self.N = N\n", + " self.sigma_factor = sigma_factor\n", + " \n", + " @staticmethod\n", + " def _gauss_basis(x, mu, sigma, axis=None):\n", + " arg = (x - mu) / sigma\n", + " return np.exp(-0.5 * np.sum(arg ** 2, axis))\n", + " \n", + " def fit(self, X, y=None):\n", + " # create N centers spread along the data range\n", + " self.mu_ = np.linspace(X.min(), X.max(), self.N)\n", + " self.sigma_ = self.sigma_factor * (self.mu_[1] - self.mu_[0])\n", + " return self\n", + " \n", + " def transform(self, X):\n", + " return self._gauss_basis(X[:, :, np.newaxis], self.mu_,\n", + " self.sigma_, axis=1)" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-20T15:22:01.648815Z", + "start_time": "2018-05-20T15:22:01.503183Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "rng = np.random.RandomState(1)\n", + "x = 10 * rng.rand(50)\n", + "y = np.sin(x) + 0.1 * rng.randn(50)\n", + "xfit = np.linspace(0, 10, 1000)\n", + "\n", + "gauss_model = make_pipeline(GaussianFeatures(20),\n", + " LinearRegression())\n", + "gauss_model.fit(x[:, np.newaxis], y)\n", + "yfit = gauss_model.predict(xfit[:, np.newaxis])\n", + "\n", + "plt.scatter(x, y)\n", + "plt.plot(xfit, yfit)\n", + "plt.xlim(0, 10);" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "There is nothing magic about polynomial basis functions: \n", + "- You should have some sort of intuition about **the generating process of your data**; \n", + "- If you think one basis or another might be appropriate, you can use them as well." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Regularization 正则化\n", + "\n", + "The introduction of basis functions into our linear regression makes the model much more flexible, \n", + "- but it also can very quickly lead to over-fitting (refer back to [Hyperparameters and Model Validation](05.03-Hyperparameters-and-Model-Validation.ipynb) for a discussion of this).\n", + "\n", + "For example, if we choose too many Gaussian basis functions, we end up with results that don't look so good:" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-20T15:33:09.422378Z", + "start_time": "2018-05-20T15:33:09.258227Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "model = make_pipeline(GaussianFeatures(30),\n", + " LinearRegression())\n", + "model.fit(x[:, np.newaxis], y)\n", + "\n", + "plt.scatter(x, y)\n", + "plt.plot(xfit, model.predict(xfit[:, np.newaxis]))\n", + "\n", + "plt.xlim(0, 10)\n", + "plt.ylim(-5, 1.5);" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "With the data projected to the 30-dimensional basis, the model has far too much flexibility and goes to extreme values between locations where it is constrained by data.\n", + "\n", + "We can see the reason for this if we plot the coefficients of the Gaussian bases with respect to their locations:" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-20T15:35:27.115635Z", + "start_time": "2018-05-20T15:35:26.843888Z" + }, + "code_folding": [ + 0 + ], + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "def basis_plot(model, title=None):\n", + " fig, ax = plt.subplots(2, sharex=True)\n", + " model.fit(x[:, np.newaxis], y)\n", + " ax[0].scatter(x, y)\n", + " ax[0].plot(xfit, model.predict(xfit[:, np.newaxis]))\n", + " ax[0].set(xlabel='x', ylabel='y', ylim=(-5, 1.5))\n", + " \n", + " if title:\n", + " ax[0].set_title(title)\n", + "\n", + " ax[1].plot(model.steps[0][1].mu_,\n", + " model.steps[1][1].coef_)\n", + " ax[1].set(xlabel='basis location',\n", + " ylabel='coefficient',\n", + " xlim=(0, 10))\n", + " \n", + "model = make_pipeline(GaussianFeatures(30), LinearRegression())\n", + "basis_plot(model)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "This is typical over-fitting behavior when basis functions overlap: \n", + "- the coefficients of adjacent basis functions blow up and cancel each other out.\n", + "\n", + "We know that such behavior is problematic" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "It would be nice if we could limit such spikes expliticly in the model \n", + "- by **penalizing large values of the model parameters**.\n", + "\n", + "Such a penalty is known as *regularization*, and comes in several forms." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Ridge regression ($L_2$ Regularization) 岭回归\n", + "\n", + "\n", + "*ridge regression* or $L_2$ *regularization*, sometimes also called *Tikhonov regularization*.\n", + "- Perhaps the most common form of regularization\n", + "\n", + "This proceeds by penalizing the **sum of squares** (2-norms) of the model coefficients; \n", + "- The penalty on the model fit would be \n", + "$$\n", + "P = \\alpha\\sum_{n=1}^N \\theta_n^2\n", + "$$\n", + "\n", + "where $\\alpha$ is a free parameter that controls the strength of the penalty.\n", + "\n", + "This type of penalized model is built into Scikit-Learn with the ``Ridge`` estimator:" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-20T15:44:24.582352Z", + "start_time": "2018-05-20T15:44:24.362999Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from sklearn.linear_model import Ridge\n", + "model = make_pipeline(GaussianFeatures(30), Ridge(alpha=0.1))\n", + "basis_plot(model, title='Ridge Regression')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "The $\\alpha$ parameter is essentially a knob controlling the complexity of the resulting model.\n", + "- In the limit $\\alpha \\to 0$, we recover the standard linear regression result; \n", + "- in the limit $\\alpha \\to \\infty$, all model responses will be suppressed.\n", + "\n", + "One advantage of ridge regression in particular is that it can be computed very efficiently\n", + "- at hardly more computational cost than the original linear regression model." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Lasso regression ($L_1$ regularization) 套索回归\n", + "\n", + "Lasso regression involves penalizing the **sum of absolute values** (1-norms) of regression coefficients:\n", + "$$\n", + "P = \\alpha\\sum_{n=1}^N |\\theta_n|\n", + "$$\n", + "Though this is conceptually very similar to ridge regression, the results can differ surprisingly: \n", + "- for example, due to geometric reasons lasso regression tends to favor *sparse models* where possible: \n", + " - it preferentially sets model coefficients to exactly zero.\n", + "\n", + "We can see this behavior in duplicating the ridge regression figure, but using L1-normalized coefficients:" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-20T15:47:04.365611Z", + "start_time": "2018-05-20T15:47:04.159181Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/datalab/Applications/anaconda/lib/python3.5/site-packages/sklearn/linear_model/coordinate_descent.py:466: ConvergenceWarning: Objective did not converge. You might want to increase the number of iterations\n", + " ConvergenceWarning)\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from sklearn.linear_model import Lasso\n", + "model = make_pipeline(GaussianFeatures(30), Lasso(alpha=0.001))\n", + "basis_plot(model, title='Lasso Regression')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "With the lasso regression penalty, **the majority of the coefficients are exactly zero**, \n", + "- with the functional behavior being modeled by a small subset of the available basis functions.\n", + "\n", + "As with ridge regularization, the $\\alpha$ parameter tunes the strength of the penalty, and should be determined via, for example, cross-validation (refer back to [Hyperparameters and Model Validation](05.03-Hyperparameters-and-Model-Validation.ipynb) for a discussion of this)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Example: Predicting Bicycle Traffic" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true, + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "To predict the number of bicycle trips across Seattle's Fremont Bridge based on weather, season, and other factors.\n", + "\n", + "We have seen this data already in [Working With Time Series](03.11-Working-with-Time-Series.ipynb).\n", + "\n", + "- we will join the bike data with another dataset, and \n", + "- try to determine the extent to which weather and seasonal factors—temperature, precipitation, and daylight hours—affect the volume of bicycle traffic through this corridor.\n", + "\n", + "- the NOAA makes available their daily [weather station data](http://www.ncdc.noaa.gov/cdo-web/search?datasetid=GHCND) (I used station ID USW00024233) \n", + "- we can easily use Pandas to join the two data sources.\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true, + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "We will perform a simple linear regression to relate weather and other information to bicycle counts, in order to estimate how a change in any one of these parameters affects the number of riders on a given day.\n", + "\n", + "In particular, this is an example of how the tools of Scikit-Learn can be used in a statistical modeling framework, in which the parameters of the model are assumed to have interpretable meaning.\n", + "\n", + "Let's start by loading the two datasets, indexing by date:" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": true, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [], + "source": [ + "# !curl -o FremontBridge.csv https://data.seattle.gov/api/views/65db-xm6k/rows.csv?accessType=DOWNLOAD" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-20T15:53:35.910674Z", + "start_time": "2018-05-20T15:53:20.663864Z" + }, + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [], + "source": [ + "import pandas as pd\n", + "counts = pd.read_csv('data/Fremont_Bridge.csv', index_col='Date', parse_dates=True)\n", + "weather = pd.read_csv('data/BicycleWeather.csv', index_col='DATE', parse_dates=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "Next we will compute the total daily bicycle traffic, and put this in its own dataframe:" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-20T15:53:53.996710Z", + "start_time": "2018-05-20T15:53:53.981379Z" + }, + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [], + "source": [ + "daily = counts.resample('d').sum()\n", + "daily['Total'] = daily.sum(axis=1)\n", + "daily = daily[['Total']] # remove other columns" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "We saw previously that the patterns of use generally vary from day to day; let's account for this in our data by adding binary columns that indicate the day of the week:" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-20T15:54:09.994337Z", + "start_time": "2018-05-20T15:54:09.942189Z" + }, + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [], + "source": [ + "days = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']\n", + "for i in range(7):\n", + " daily[days[i]] = (daily.index.dayofweek == i).astype(float)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "Similarly, we might expect riders to behave differently on holidays; let's add an indicator of this as well:" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-20T15:54:34.478168Z", + "start_time": "2018-05-20T15:54:34.445100Z" + }, + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [], + "source": [ + "from pandas.tseries.holiday import USFederalHolidayCalendar\n", + "cal = USFederalHolidayCalendar()\n", + "holidays = cal.holidays('2012', '2016')\n", + "daily = daily.join(pd.Series(1, index=holidays, name='holiday'))\n", + "daily['holiday'].fillna(0, inplace=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "We also might suspect that the hours of daylight would affect how many people ride; let's use the standard astronomical calculation to add this information:" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-20T15:55:20.848224Z", + "start_time": "2018-05-20T15:55:20.530107Z" + }, + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(8, 17)" + ] + }, + "execution_count": 68, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "def hours_of_daylight(date, axis=23.44, latitude=47.61):\n", + " \"\"\"Compute the hours of daylight for the given date\"\"\"\n", + " days = (date - pd.datetime(2000, 12, 21)).days\n", + " m = (1. - np.tan(np.radians(latitude))\n", + " * np.tan(np.radians(axis) * np.cos(days * 2 * np.pi / 365.25)))\n", + " return 24. * np.degrees(np.arccos(1 - np.clip(m, 0, 2))) / 180.\n", + "\n", + "daily['daylight_hrs'] = list(map(hours_of_daylight, daily.index))\n", + "daily[['daylight_hrs']].plot()\n", + "plt.ylim(8, 17)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "We can also add the average temperature and total precipitation to the data.\n", + "In addition to the inches of precipitation, let's add a flag that indicates whether a day is dry (has zero precipitation):" + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-20T15:55:35.967003Z", + "start_time": "2018-05-20T15:55:35.952760Z" + }, + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [], + "source": [ + "# temperatures are in 1/10 deg C; convert to C\n", + "weather['TMIN'] /= 10\n", + "weather['TMAX'] /= 10\n", + "weather['Temp (C)'] = 0.5 * (weather['TMIN'] + weather['TMAX'])\n", + "\n", + "# precip is in 1/10 mm; convert to inches\n", + "weather['PRCP'] /= 254\n", + "weather['dry day'] = (weather['PRCP'] == 0).astype(int)\n", + "\n", + "daily = daily.join(weather[['PRCP', 'Temp (C)', 'dry day']])" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "Finally, let's add a counter that increases from day 1, and measures how many years have passed.\n", + "This will let us measure any observed annual increase or decrease in daily crossings:" + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-20T15:55:51.546978Z", + "start_time": "2018-05-20T15:55:51.528230Z" + }, + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [], + "source": [ + "daily['annual'] = (daily.index - daily.index[0]).days / 365." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "Now our data is in order, and we can take a look at it:" + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-20T15:56:04.238306Z", + "start_time": "2018-05-20T15:56:04.217949Z" + }, + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
TotalMonTueWedThuFriSatSunholidaydaylight_hrsPRCPTemp (C)dry dayannual
Date
2012-10-033521.00.00.01.00.00.00.00.00.011.2773590.013.351.00.000000
2012-10-043475.00.00.00.01.00.00.00.00.011.2191420.013.601.00.002740
2012-10-053148.00.00.00.00.01.00.00.00.011.1610380.015.301.00.005479
2012-10-062006.00.00.00.00.00.01.00.00.011.1030560.015.851.00.008219
2012-10-072142.00.00.00.00.00.00.01.00.011.0452080.015.851.00.010959
\n", + "
" + ], + "text/plain": [ + " Total Mon Tue Wed Thu Fri Sat Sun holiday daylight_hrs \\\n", + "Date \n", + "2012-10-03 3521.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 11.277359 \n", + "2012-10-04 3475.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 11.219142 \n", + "2012-10-05 3148.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 11.161038 \n", + "2012-10-06 2006.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 11.103056 \n", + "2012-10-07 2142.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 11.045208 \n", + "\n", + " PRCP Temp (C) dry day annual \n", + "Date \n", + "2012-10-03 0.0 13.35 1.0 0.000000 \n", + "2012-10-04 0.0 13.60 1.0 0.002740 \n", + "2012-10-05 0.0 15.30 1.0 0.005479 \n", + "2012-10-06 0.0 15.85 1.0 0.008219 \n", + "2012-10-07 0.0 15.85 1.0 0.010959 " + ] + }, + "execution_count": 71, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "daily.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "With this in place, we can choose the columns to use, and fit a linear regression model to our data.\n", + "We will set ``fit_intercept = False``, because the daily flags essentially operate as their own day-specific intercepts:" + ] + }, + { + "cell_type": "code", + "execution_count": 72, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-20T15:56:39.750887Z", + "start_time": "2018-05-20T15:56:39.734285Z" + }, + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [], + "source": [ + "# Drop any rows with null values\n", + "daily.dropna(axis=0, how='any', inplace=True)\n", + "\n", + "column_names = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun', 'holiday',\n", + " 'daylight_hrs', 'PRCP', 'dry day', 'Temp (C)', 'annual']\n", + "X = daily[column_names]\n", + "y = daily['Total']\n", + "\n", + "model = LinearRegression(fit_intercept=False)\n", + "model.fit(X, y)\n", + "daily['predicted'] = model.predict(X)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "Finally, we can compare the total and predicted bicycle traffic visually:" + ] + }, + { + "cell_type": "code", + "execution_count": 73, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-20T15:56:48.137178Z", + "start_time": "2018-05-20T15:56:47.862115Z" + }, + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "daily[['Total', 'predicted']].plot(alpha=0.5);" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "It is evident that we have missed some key features, especially during the summer time.\n", + "\n", + "- Either our features are not complete\n", + " - i.e., people decide whether to ride to work based on more than just these\n", + "- or there are some nonlinear relationships that we have failed to take into account \n", + " - e.g., perhaps people ride less at both high and low temperatures\n", + "\n", + "Nevertheless, our rough approximation is enough to give us some insights, and we can take a look at the coefficients of the linear model to estimate how much each feature contributes to the daily bicycle count:" + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-20T15:58:02.441342Z", + "start_time": "2018-05-20T15:58:02.435225Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Mon 504.882756\n", + "Tue 610.233936\n", + "Wed 592.673642\n", + "Thu 482.358115\n", + "Fri 177.980345\n", + "Sat -1103.301710\n", + "Sun -1133.567246\n", + "holiday -1187.401381\n", + "daylight_hrs 128.851511\n", + "PRCP -664.834882\n", + "dry day 547.698592\n", + "Temp (C) 65.162791\n", + "annual 26.942713\n", + "dtype: float64" + ] + }, + "execution_count": 74, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "params = pd.Series(model.coef_, index=X.columns)\n", + "params" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "These numbers are difficult to interpret without some measure of their uncertainty.\n", + "We can compute these uncertainties quickly using bootstrap resamplings of the data:" + ] + }, + { + "cell_type": "code", + "execution_count": 75, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-20T15:58:23.047893Z", + "start_time": "2018-05-20T15:58:20.770355Z" + }, + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [], + "source": [ + "from sklearn.utils import resample\n", + "np.random.seed(1)\n", + "err = np.std([model.fit(*resample(X, y)).coef_\n", + " for i in range(1000)], 0)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "With these errors estimated, let's again look at the results:" + ] + }, + { + "cell_type": "code", + "execution_count": 76, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-20T15:58:37.008473Z", + "start_time": "2018-05-20T15:58:37.001643Z" + }, + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " effect error\n", + "Mon 505.0 86.0\n", + "Tue 610.0 83.0\n", + "Wed 593.0 83.0\n", + "Thu 482.0 85.0\n", + "Fri 178.0 81.0\n", + "Sat -1103.0 80.0\n", + "Sun -1134.0 83.0\n", + "holiday -1187.0 163.0\n", + "daylight_hrs 129.0 9.0\n", + "PRCP -665.0 62.0\n", + "dry day 548.0 33.0\n", + "Temp (C) 65.0 4.0\n", + "annual 27.0 18.0\n" + ] + } + ], + "source": [ + "print(pd.DataFrame({'effect': params.round(0),\n", + " 'error': err.round(0)}))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "- We first see that there is a relatively stable trend in the weekly baseline: \n", + " - there are many more riders on weekdays than on weekends and holidays.\n", + "- We see that for each additional hour of daylight, 129 ± 9 more people choose to ride; \n", + "- a temperature increase of one degree Celsius encourages 65 ± 4 people to grab their bicycle; \n", + "- a dry day means an average of 548 ± 33 more riders, and each inch of precipitation means 665 ± 62 more people leave their bike at home.\n", + "\n", + "Once all these effects are accounted for, we see a modest increase of 27 ± 18 new daily riders each year.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "- Our model is almost certainly missing some relevant information. \n", + " - For example, nonlinear effects \n", + " - such as effects of precipitation *and* cold temperature \n", + " - nonlinear trends within each variable \n", + " - such as disinclination to ride at very cold and very hot temperatures\n", + "- Additionally, we have thrown away some of the finer-grained information\n", + " - such as the difference between a rainy morning and a rainy afternoon, \n", + "- and we have ignored correlations between days\n", + " - such as the possible effect of a rainy Tuesday on Wednesday's numbers, \n", + " - or the effect of an unexpected sunny day after a streak of rainy days.\n", + " \n", + "These are all potentially interesting effects, and you now have the tools to begin exploring them if you wish!" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "\n", + "< [In Depth: Naive Bayes Classification](05.05-Naive-Bayes.ipynb) | [Contents](Index.ipynb) | [In-Depth: Support Vector Machines](05.07-Support-Vector-Machines.ipynb) >" + ] + } + ], + "metadata": { + "anaconda-cloud": {}, + "celltoolbar": "Slideshow", + "kernelspec": { + "display_name": "Python [default]", + "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.4" + }, + "latex_envs": { + "LaTeX_envs_menu_present": true, + "autoclose": false, + "autocomplete": true, + "bibliofile": "biblio.bib", + "cite_by": "apalike", + "current_citInitial": 1, + "eqLabelWithNumbers": true, + "eqNumInitial": 1, + "hotkeys": { + "equation": "Ctrl-E", + "itemize": "Ctrl-I" + }, + "labels_anchors": false, + "latex_user_defs": false, + "report_style_numbering": false, + "user_envs_cfg": false + }, + "toc": { + "base_numbering": 1, + "nav_menu": {}, + "number_sections": false, + "sideBar": false, + "skip_h1_title": false, + "title_cell": "Table of Contents", + "title_sidebar": "Contents", + "toc_cell": false, + "toc_position": { + "height": "268px", + "left": "1058px", + "top": "113px", + "width": "180px" + }, + "toc_section_display": true, + "toc_window_display": true + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/code/09.06-Support-Vector-Machines.ipynb b/code/09.07-Support-Vector-Machines.ipynb similarity index 100% rename from code/09.06-Support-Vector-Machines.ipynb rename to code/09.07-Support-Vector-Machines.ipynb diff --git a/code/09.08-Random-Forests.ipynb b/code/09.08-Random-Forests.ipynb index 6f7a629..ac229a0 100755 --- a/code/09.08-Random-Forests.ipynb +++ b/code/09.08-Random-Forests.ipynb @@ -20,7 +20,7 @@ }, "source": [ "\n", - "\n", + "\n", "*This notebook contains an excerpt from the [Python Data Science Handbook](http://shop.oreilly.com/product/0636920034919.do) by Jake VanderPlas; the content is available [on GitHub](https://github.com/jakevdp/PythonDataScienceHandbook).*\n", "\n", "*The text is released under the [CC-BY-NC-ND license](https://creativecommons.org/licenses/by-nc-nd/3.0/us/legalcode), and code is released under the [MIT license](https://opensource.org/licenses/MIT). If you find this content useful, please consider supporting the work by [buying the book](http://shop.oreilly.com/product/0636920034919.do)!*" @@ -1136,25 +1136,6 @@ "toc_position": {}, "toc_section_display": true, "toc_window_display": false - }, - "widgets": { - "state": { - "1db86dba92ab4806b92380c277d1ab05": { - "views": [ - { - "cell_index": 29 - } - ] - }, - "bb9f05972cf34f0d9784403cf321e070": { - "views": [ - { - "cell_index": 23 - } - ] - } - }, - "version": "1.2.0" } }, "nbformat": 4, diff --git a/code/09.09-machine-learning-summary.ipynb b/code/09.09-machine-learning-summary.ipynb new file mode 100644 index 0000000..285bad0 --- /dev/null +++ b/code/09.09-machine-learning-summary.ipynb @@ -0,0 +1,3055 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "***\n", + "***\n", + "# 计算传播与机器学习\n", + "\n", + "***\n", + "***\n", + "\n", + "王成军\n", + "\n", + "wangchengjun@nju.edu.cn\n", + "\n", + "计算传播网 http://computational-communication.com" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "![](./img/machine.jpg)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "## 1、 监督式学习\n", + "\n", + "工作机制:\n", + "- 这个算法由一个目标变量或结果变量(或因变量)组成。\n", + "- 这些变量由已知的一系列预示变量(自变量)预测而来。\n", + "- 利用这一系列变量,我们生成一个将输入值映射到期望输出值的函数。\n", + "- 这个训练过程会一直持续,直到模型在训练数据上获得期望的精确度。\n", + "- 监督式学习的例子有:回归、决策树、随机森林、K – 近邻算法、逻辑回归等。" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "## 2、非监督式学习\n", + "\n", + "工作机制:\n", + "- 在这个算法中,没有任何目标变量或结果变量要预测或估计。\n", + "- 这个算法用在不同的组内聚类分析。\n", + "- 这种分析方式被广泛地用来细分客户,根据干预的方式分为不同的用户组。\n", + "- 非监督式学习的例子有:关联算法和 K–均值算法。" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "## 3、强化学习\n", + "\n", + "工作机制:\n", + "- 这个算法训练机器进行决策。\n", + "- 它是这样工作的:机器被放在一个能让它通过反复试错来训练自己的环境中。\n", + "- 机器从过去的经验中进行学习,并且尝试利用了解最透彻的知识作出精确的商业判断。 \n", + "- 强化学习的例子有马尔可夫决策过程。alphago\n", + "\n", + "> Chess. Here, the agent decides upon a series of moves depending on the state of the board (the environment), and the\n", + "reward can be defined as win or lose at the end of the game:" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "- 线性回归\n", + "- 逻辑回归\n", + "- 决策树\n", + "- SVM\n", + "- 朴素贝叶斯\n", + "---\n", + "- K最近邻算法\n", + "- K均值算法\n", + "- 随机森林算法\n", + "- 降维算法\n", + "- Gradient Boost 和 Adaboost 算法\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "> # 使用sklearn做线性回归\n", + "***\n", + "\n", + "王成军\n", + "\n", + "wangchengjun@nju.edu.cn\n", + "\n", + "计算传播网 http://computational-communication.com" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "# 线性回归\n", + "- 通常用于估计连续性变量的实际数值(房价、呼叫次数、总销售额等)。\n", + "- 通过拟合最佳直线来建立自变量X和因变量Y的关系。\n", + "- 这条最佳直线叫做回归线,并且用 $Y= \\beta *X + C$ 这条线性等式来表示。\n", + "- 系数 $\\beta$ 和 C 可以通过最小二乘法获得" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "ExecuteTime": { + "end_time": "2019-04-22T08:22:22.109042Z", + "start_time": "2019-04-22T08:22:20.811040Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "import sklearn\n", + "from sklearn import datasets\n", + "from sklearn import linear_model\n", + "import matplotlib.pyplot as plt\n", + "from sklearn.metrics import classification_report\n", + "from sklearn.preprocessing import scale" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "ExecuteTime": { + "end_time": "2019-04-22T08:22:24.400103Z", + "start_time": "2019-04-22T08:22:24.390296Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [], + "source": [ + "# boston data\n", + "boston = datasets.load_boston()\n", + "y = boston.target\n", + "X = boston.data" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "ExecuteTime": { + "end_time": "2019-04-22T08:22:25.362696Z", + "start_time": "2019-04-22T08:22:25.356162Z" + }, + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array(['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD',\n", + " 'TAX', 'PTRATIO', 'B', 'LSTAT'], dtype='|t| [0.025 0.975]\n", + "-----------------------------------------------------------------------------------\n", + "Intercept 36.4595 5.103 7.144 0.000 26.432 46.487\n", + "boston.data[0] -0.1080 0.033 -3.287 0.001 -0.173 -0.043\n", + "boston.data[1] 0.0464 0.014 3.382 0.001 0.019 0.073\n", + "boston.data[2] 0.0206 0.061 0.334 0.738 -0.100 0.141\n", + "boston.data[3] 2.6867 0.862 3.118 0.002 0.994 4.380\n", + "boston.data[4] -17.7666 3.820 -4.651 0.000 -25.272 -10.262\n", + "boston.data[5] 3.8099 0.418 9.116 0.000 2.989 4.631\n", + "boston.data[6] 0.0007 0.013 0.052 0.958 -0.025 0.027\n", + "boston.data[7] -1.4756 0.199 -7.398 0.000 -1.867 -1.084\n", + "boston.data[8] 0.3060 0.066 4.613 0.000 0.176 0.436\n", + "boston.data[9] -0.0123 0.004 -3.280 0.001 -0.020 -0.005\n", + "boston.data[10] -0.9527 0.131 -7.283 0.000 -1.210 -0.696\n", + "boston.data[11] 0.0093 0.003 3.467 0.001 0.004 0.015\n", + "boston.data[12] -0.5248 0.051 -10.347 0.000 -0.624 -0.425\n", + "==============================================================================\n", + "Omnibus: 178.041 Durbin-Watson: 1.078\n", + "Prob(Omnibus): 0.000 Jarque-Bera (JB): 783.126\n", + "Skew: 1.521 Prob(JB): 8.84e-171\n", + "Kurtosis: 8.281 Cond. No. 1.51e+04\n", + "==============================================================================\n", + "\n", + "Warnings:\n", + "[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.\n", + "[2] The condition number is large, 1.51e+04. This might indicate that there are\n", + "strong multicollinearity or other numerical problems.\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "import statsmodels.api as sm\n", + "import statsmodels.formula.api as smf\n", + "\n", + "# Fit regression model (using the natural log of one of the regressors)\n", + "results = smf.ols('boston.target ~ boston.data', data=boston).fit()\n", + "\n", + "print(results.summary())" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "ExecuteTime": { + "end_time": "2019-04-22T08:22:29.198868Z", + "start_time": "2019-04-22T08:22:29.179869Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [], + "source": [ + "regr = linear_model.LinearRegression()\n", + "lm = regr.fit(boston.data, y)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "ExecuteTime": { + "end_time": "2019-04-22T08:22:30.210025Z", + "start_time": "2019-04-22T08:22:30.203639Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(36.45948838508965,\n", + " array([-1.08011358e-01, 4.64204584e-02, 2.05586264e-02, 2.68673382e+00,\n", + " -1.77666112e+01, 3.80986521e+00, 6.92224640e-04, -1.47556685e+00,\n", + " 3.06049479e-01, -1.23345939e-02, -9.52747232e-01, 9.31168327e-03,\n", + " -5.24758378e-01]),\n", + " 0.7406426641094095)" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "lm.intercept_, lm.coef_, lm.score(boston.data, y)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "ExecuteTime": { + "end_time": "2019-04-22T08:22:31.110418Z", + "start_time": "2019-04-22T08:22:31.107129Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [], + "source": [ + "predicted = regr.predict(boston.data)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "ExecuteTime": { + "end_time": "2019-04-22T08:22:32.479326Z", + "start_time": "2019-04-22T08:22:31.916490Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig, ax = plt.subplots()\n", + "ax.scatter(y, predicted)\n", + "ax.plot([y.min(), y.max()], [y.min(), y.max()], 'k--', lw=4)\n", + "ax.set_xlabel('$Measured$', fontsize = 20)\n", + "ax.set_ylabel('$Predicted$', fontsize = 20)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## 训练集和测试集" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "ExecuteTime": { + "end_time": "2019-04-22T08:22:36.365683Z", + "start_time": "2019-04-22T08:22:36.360788Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[6.3200e-03, 1.8000e+01, 2.3100e+00, ..., 1.5300e+01, 3.9690e+02,\n", + " 4.9800e+00],\n", + " [2.7310e-02, 0.0000e+00, 7.0700e+00, ..., 1.7800e+01, 3.9690e+02,\n", + " 9.1400e+00],\n", + " [2.7290e-02, 0.0000e+00, 7.0700e+00, ..., 1.7800e+01, 3.9283e+02,\n", + " 4.0300e+00],\n", + " ...,\n", + " [6.0760e-02, 0.0000e+00, 1.1930e+01, ..., 2.1000e+01, 3.9690e+02,\n", + " 5.6400e+00],\n", + " [1.0959e-01, 0.0000e+00, 1.1930e+01, ..., 2.1000e+01, 3.9345e+02,\n", + " 6.4800e+00],\n", + " [4.7410e-02, 0.0000e+00, 1.1930e+01, ..., 2.1000e+01, 3.9690e+02,\n", + " 7.8800e+00]])" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "boston.data" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "ExecuteTime": { + "end_time": "2019-04-22T08:22:48.265456Z", + "start_time": "2019-04-22T08:22:48.261247Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [], + "source": [ + "from sklearn.model_selection import train_test_split\n", + "Xs_train, Xs_test, y_train, y_test = train_test_split(boston.data,\n", + " boston.target, \n", + " test_size=0.2, \n", + " random_state=42)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "ExecuteTime": { + "end_time": "2019-04-22T08:22:51.873960Z", + "start_time": "2019-04-22T08:22:51.869286Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [], + "source": [ + "regr = linear_model.LinearRegression()\n", + "lm = regr.fit(Xs_train, y_train)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "ExecuteTime": { + "end_time": "2019-04-22T08:22:52.561738Z", + "start_time": "2019-04-22T08:22:52.555669Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(30.24675099392396,\n", + " array([-1.13055924e-01, 3.01104641e-02, 4.03807204e-02, 2.78443820e+00,\n", + " -1.72026334e+01, 4.43883520e+00, -6.29636221e-03, -1.44786537e+00,\n", + " 2.62429736e-01, -1.06467863e-02, -9.15456240e-01, 1.23513347e-02,\n", + " -5.08571424e-01]),\n", + " 0.7508856358979673)" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "lm.intercept_, lm.coef_, lm.score(Xs_train, y_train)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "ExecuteTime": { + "end_time": "2019-04-22T08:22:53.518402Z", + "start_time": "2019-04-22T08:22:53.515220Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [], + "source": [ + "predicted = regr.predict(Xs_test)" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "ExecuteTime": { + "end_time": "2019-04-22T08:22:54.585839Z", + "start_time": "2019-04-22T08:22:54.380438Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig, ax = plt.subplots()\n", + "ax.scatter(y_test, predicted)\n", + "ax.plot([y.min(), y.max()], [y.min(), y.max()], 'k--', lw=4)\n", + "ax.set_xlabel('$Measured$', fontsize = 20)\n", + "ax.set_ylabel('$Predicted$', fontsize = 20)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "# 交叉验证" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "# cross-validation \n", + " \n", + "k-fold CV, the training set is split into k smaller sets (other approaches are described below, but generally follow the same principles). The following procedure is followed for each of the k “folds”:\n", + "- A model is trained using k-1 of the folds as training data;\n", + "- the resulting model is validated on the remaining part of the data (i.e., it is used as a test set to compute a performance measure such as accuracy)." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "ExecuteTime": { + "end_time": "2019-04-22T08:23:06.421218Z", + "start_time": "2019-04-22T08:23:06.407755Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "-1.5841985220997412" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from sklearn.model_selection import cross_val_score\n", + "\n", + "regr = linear_model.LinearRegression()\n", + "scores = cross_val_score(regr, boston.data , boston.target, cv = 3)\n", + "scores.mean() " + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "ExecuteTime": { + "end_time": "2019-04-22T08:24:03.323654Z", + "start_time": "2019-04-22T08:24:01.612164Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "scores = [cross_val_score(regr, boston.data,\\\n", + " boston.target,\\\n", + " cv = int(i)).mean() \\\n", + " for i in range(3, 50)]\n", + "plt.plot(range(3, 50), scores,'r-o')\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "ExecuteTime": { + "end_time": "2019-04-22T08:24:34.174960Z", + "start_time": "2019-04-22T08:24:34.155764Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0.45059442471362826" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data_X_scale = scale(boston.data)\n", + "scores = cross_val_score(regr,data_X_scale, boston.target,\\\n", + " cv = 7)\n", + "scores.mean() " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "# 使用天涯bbs数据" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "ExecuteTime": { + "end_time": "2019-04-22T08:24:46.198546Z", + "start_time": "2019-04-22T08:24:46.171912Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
titlelinkauthorauthor_pageclickreplytime
0【民间语文第161期】宁波px启示:船进港湾人应上岸/post-free-2849477-1.shtml贾也http://www.tianya.cn/5049945019467527032012-10-29 07:59
1宁波镇海PX项目引发群体上访 当地政府发布说明(转载)/post-free-2839539-1.shtml无上卫士ABChttp://www.tianya.cn/743418358824410412012-10-24 12:41
\n", + "
" + ], + "text/plain": [ + " title link author \\\n", + "0 【民间语文第161期】宁波px启示:船进港湾人应上岸 /post-free-2849477-1.shtml 贾也 \n", + "1 宁波镇海PX项目引发群体上访 当地政府发布说明(转载) /post-free-2839539-1.shtml 无上卫士ABC \n", + "\n", + " author_page click reply time \n", + "0 http://www.tianya.cn/50499450 194675 2703 2012-10-29 07:59 \n", + "1 http://www.tianya.cn/74341835 88244 1041 2012-10-24 12:41 " + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import pandas as pd\n", + "\n", + "df = pd.read_csv('../data/tianya_bbs_threads_list.txt', sep = \"\\t\", header=None)\n", + "df=df.rename(columns = {0:'title', 1:'link', 2:'author',3:'author_page', 4:'click', 5:'reply', 6:'time'})\n", + "df[:2]" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "ExecuteTime": { + "end_time": "2019-04-22T08:24:47.185301Z", + "start_time": "2019-04-22T08:24:47.169337Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [], + "source": [ + "# 定义这个函数的目的是让读者感受到:\n", + "# 抽取不同的样本,得到的结果完全不同。\n", + "def randomSplit(dataX, dataY, num):\n", + " dataX_train = []\n", + " dataX_test = []\n", + " dataY_train = []\n", + " dataY_test = []\n", + " import random\n", + " test_index = random.sample(range(len(df)), num)\n", + " for k in range(len(dataX)):\n", + " if k in test_index:\n", + " dataX_test.append([dataX[k]])\n", + " dataY_test.append(dataY[k])\n", + " else:\n", + " dataX_train.append([dataX[k]])\n", + " dataY_train.append(dataY[k])\n", + " return dataX_train, dataX_test, dataY_train, dataY_test, " + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "ExecuteTime": { + "end_time": "2019-04-22T08:24:48.122580Z", + "start_time": "2019-04-22T08:24:48.081523Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Variance score: 0.42\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "\n", + "# Use only one feature\n", + "data_X = df.reply\n", + "# Split the data into training/testing sets\n", + "data_X_train, data_X_test, data_y_train, data_y_test = randomSplit(np.log(df.click+1), \n", + " np.log(df.reply+1), 20)\n", + "# Create linear regression object\n", + "regr = linear_model.LinearRegression()\n", + "# Train the model using the training sets\n", + "regr.fit(data_X_train, data_y_train)\n", + "# Explained variance score: 1 is perfect prediction\n", + "print('Variance score: %.2f' % regr.score(data_X_test, data_y_test))" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "ExecuteTime": { + "end_time": "2019-04-22T08:24:49.133689Z", + "start_time": "2019-04-22T08:24:49.129343Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[[12.179091917198399], [11.387872315966666], [11.323941765302724]]" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data_X_train[:3]\n" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "ExecuteTime": { + "end_time": "2019-04-22T08:24:50.276495Z", + "start_time": "2019-04-22T08:24:50.273286Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [], + "source": [ + "y_true, y_pred = data_y_test, regr.predict(data_X_test)" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "ExecuteTime": { + "end_time": "2019-04-22T08:24:51.151351Z", + "start_time": "2019-04-22T08:24:50.992991Z" + }, + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.scatter(y_pred, y_true, color='black')\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "ExecuteTime": { + "end_time": "2019-04-22T08:24:52.301659Z", + "start_time": "2019-04-22T08:24:52.130224Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Plot outputs\n", + "plt.scatter(data_X_test, data_y_test, color='black')\n", + "plt.plot(data_X_test, regr.predict(data_X_test), color='blue', linewidth=3)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "ExecuteTime": { + "end_time": "2019-04-22T08:24:53.326537Z", + "start_time": "2019-04-22T08:24:53.321437Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "('Coefficients: \\n', array([0.68623605]))" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# The coefficients\n", + "'Coefficients: \\n', regr.coef_" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "ExecuteTime": { + "end_time": "2019-04-22T08:24:55.007412Z", + "start_time": "2019-04-22T08:24:55.002637Z" + }, + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "'Residual sum of squares: 0.98'" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# The mean square error\n", + "\"Residual sum of squares: %.2f\" % np.mean((regr.predict(data_X_test) - data_y_test) ** 2)" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": { + "ExecuteTime": { + "end_time": "2019-04-22T08:24:55.875656Z", + "start_time": "2019-04-22T08:24:55.846855Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/datalab/Applications/anaconda/lib/python3.5/site-packages/ipykernel/__main__.py:1: UserWarning: Pandas doesn't allow columns to be created via a new attribute name - see https://pandas.pydata.org/pandas-docs/stable/indexing.html#attribute-access\n", + " if __name__ == '__main__':\n", + "/Users/datalab/Applications/anaconda/lib/python3.5/site-packages/ipykernel/__main__.py:2: UserWarning: Pandas doesn't allow columns to be created via a new attribute name - see https://pandas.pydata.org/pandas-docs/stable/indexing.html#attribute-access\n", + " from ipykernel import kernelapp as app\n" + ] + } + ], + "source": [ + "df.click_log = [[np.log(df.click[i]+1)] for i in range(len(df))]\n", + "df.reply_log = [[np.log(df.reply[i]+1)] for i in range(len(df))]" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": { + "ExecuteTime": { + "end_time": "2019-04-22T08:25:13.823742Z", + "start_time": "2019-04-22T08:25:13.811227Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "'Variance score: 0.62'" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from sklearn.model_selection import train_test_split\n", + "Xs_train, Xs_test, y_train, y_test = train_test_split(df.click_log, df.reply_log,test_size=0.2, random_state=0)\n", + "\n", + "# Create linear regression object\n", + "regr = linear_model.LinearRegression()\n", + "# Train the model using the training sets\n", + "regr.fit(Xs_train, y_train)\n", + "# Explained variance score: 1 is perfect prediction\n", + "'Variance score: %.2f' % regr.score(Xs_test, y_test)" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": { + "ExecuteTime": { + "end_time": "2019-04-22T08:25:18.210290Z", + "start_time": "2019-04-22T08:25:18.010690Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Plot outputs\n", + "plt.scatter(Xs_test, y_test, color='black')\n", + "plt.plot(Xs_test, regr.predict(Xs_test), color='blue', linewidth=3)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": { + "ExecuteTime": { + "end_time": "2019-04-22T08:25:26.241798Z", + "start_time": "2019-04-22T08:25:26.227633Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "-0.6837007391943056" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from sklearn.model_selection import cross_val_score\n", + "\n", + "regr = linear_model.LinearRegression()\n", + "scores = cross_val_score(regr, df.click_log, \\\n", + " df.reply_log, cv = 3)\n", + "scores.mean() " + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": { + "ExecuteTime": { + "end_time": "2019-04-22T08:25:30.245410Z", + "start_time": "2019-04-22T08:25:30.227128Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "-0.7188149722820985" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "regr = linear_model.LinearRegression()\n", + "scores = cross_val_score(regr, df.click_log, \n", + " df.reply_log, cv =5)\n", + "scores.mean() " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "> # 使用sklearn做logistic回归\n", + "***\n", + "\n", + "王成军\n", + "\n", + "wangchengjun@nju.edu.cn\n", + "\n", + "计算传播网 http://computational-communication.com" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "- logistic回归是一个分类算法而不是一个回归算法。\n", + "- 可根据已知的一系列因变量估计离散数值(比方说二进制数值 0 或 1 ,是或否,真或假)。\n", + "- 简单来说,它通过将数据拟合进一个逻辑函数(logistic function)来预估一个事件出现的概率。\n", + "- 因此,它也被叫做逻辑回归。因为它预估的是概率,所以它的输出值大小在 0 和 1 之间(正如所预计的一样)。" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "$$odds= \\frac{p}{1-p} = \\frac{probability\\: of\\: event\\: occurrence} {probability \\:of \\:not\\: event\\: occurrence}$$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "$$ln(odds)= ln(\\frac{p}{1-p})$$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "$$logit(x) = ln(\\frac{p}{1-p}) = b_0+b_1X_1+b_2X_2+b_3X_3....+b_kX_k$$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "![](./img/logistic.jpg)" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": { + "ExecuteTime": { + "end_time": "2018-04-29T07:46:50.277195Z", + "start_time": "2018-04-29T07:46:50.272229Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [], + "source": [ + "repost = []\n", + "for i in df.title:\n", + " if u'转载' in i:\n", + " repost.append(1)\n", + " else:\n", + " repost.append(0)" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": { + "ExecuteTime": { + "end_time": "2018-04-29T07:47:06.292994Z", + "start_time": "2018-04-29T07:47:06.270715Z" + }, + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[[194675, 2703], [88244, 1041], [82779, 625]]" + ] + }, + "execution_count": 51, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data_X = [[df.click[i], df.reply[i]] for i in range(len(df))]\n", + "data_X[:3]" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": { + "ExecuteTime": { + "end_time": "2018-04-29T07:47:45.269303Z", + "start_time": "2018-04-29T07:47:45.259792Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0.61241970021413272" + ] + }, + "execution_count": 52, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from sklearn.linear_model import LogisticRegression\n", + "df['repost'] = repost\n", + "model = LogisticRegression()\n", + "model.fit(data_X,df.repost)\n", + "model.score(data_X,df.repost)" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": { + "ExecuteTime": { + "end_time": "2018-04-29T07:47:59.648431Z", + "start_time": "2018-04-29T07:47:59.633936Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [], + "source": [ + "def randomSplitLogistic(dataX, dataY, num):\n", + " dataX_train = []\n", + " dataX_test = []\n", + " dataY_train = []\n", + " dataY_test = []\n", + " import random\n", + " test_index = random.sample(range(len(df)), num)\n", + " for k in range(len(dataX)):\n", + " if k in test_index:\n", + " dataX_test.append(dataX[k])\n", + " dataY_test.append(dataY[k])\n", + " else:\n", + " dataX_train.append(dataX[k])\n", + " dataY_train.append(dataY[k])\n", + " return dataX_train, dataX_test, dataY_train, dataY_test, " + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": { + "ExecuteTime": { + "end_time": "2018-04-29T07:48:27.726443Z", + "start_time": "2018-04-29T07:48:27.710922Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "'Variance score: 0.45'" + ] + }, + "execution_count": 54, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Split the data into training/testing sets\n", + "data_X_train, data_X_test, data_y_train, data_y_test = randomSplitLogistic(data_X, df.repost, 20)\n", + "# Create logistic regression object\n", + "log_regr = LogisticRegression()\n", + "# Train the model using the training sets\n", + "log_regr.fit(data_X_train, data_y_train)\n", + "# Explained variance score: 1 is perfect prediction\n", + "'Variance score: %.2f' % log_regr.score(data_X_test, data_y_test)" + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "metadata": { + "ExecuteTime": { + "end_time": "2018-04-29T07:48:56.873331Z", + "start_time": "2018-04-29T07:48:56.870219Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [], + "source": [ + "y_true, y_pred = data_y_test, log_regr.predict(data_X_test)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": { + "ExecuteTime": { + "end_time": "2018-04-29T07:39:12.344043Z", + "start_time": "2018-04-29T07:39:12.338223Z" + }, + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "([1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],\n", + " array([0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]))" + ] + }, + "execution_count": 43, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "y_true, y_pred" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": { + "ExecuteTime": { + "end_time": "2018-04-29T07:39:13.175680Z", + "start_time": "2018-04-29T07:39:13.171386Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " precision recall f1-score support\n", + "\n", + " 0 0.50 0.17 0.25 6\n", + " 1 0.72 0.93 0.81 14\n", + "\n", + "avg / total 0.66 0.70 0.64 20\n", + "\n" + ] + } + ], + "source": [ + "print(classification_report(y_true, y_pred))" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "metadata": { + "ExecuteTime": { + "end_time": "2018-04-29T07:51:43.039620Z", + "start_time": "2018-04-29T07:51:43.034812Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [], + "source": [ + "from sklearn.cross_validation import train_test_split\n", + "Xs_train, Xs_test, y_train, y_test = train_test_split(data_X, df.repost, test_size=0.2, random_state=42)" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": { + "ExecuteTime": { + "end_time": "2018-04-29T07:51:47.690742Z", + "start_time": "2018-04-29T07:51:47.683127Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "'Variance score: 0.60'" + ] + }, + "execution_count": 57, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Create logistic regression object\n", + "log_regr = LogisticRegression()\n", + "# Train the model using the training sets\n", + "log_regr.fit(Xs_train, y_train)\n", + "# Explained variance score: 1 is perfect prediction\n", + "'Variance score: %.2f' % log_regr.score(Xs_test, y_test)" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": { + "ExecuteTime": { + "end_time": "2018-04-29T07:51:55.780061Z", + "start_time": "2018-04-29T07:51:55.771924Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Logistic score for test set: 0.595745\n", + "Logistic score for training set: 0.613941\n", + " precision recall f1-score support\n", + "\n", + " 0 1.00 0.03 0.05 39\n", + " 1 0.59 1.00 0.74 55\n", + "\n", + "avg / total 0.76 0.60 0.46 94\n", + "\n" + ] + } + ], + "source": [ + "print('Logistic score for test set: %f' % log_regr.score(Xs_test, y_test))\n", + "print('Logistic score for training set: %f' % log_regr.score(Xs_train, y_train))\n", + "y_true, y_pred = y_test, log_regr.predict(Xs_test)\n", + "print(classification_report(y_true, y_pred))" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": { + "ExecuteTime": { + "end_time": "2018-04-29T07:52:53.880925Z", + "start_time": "2018-04-29T07:52:53.866672Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0.53333333333333333" + ] + }, + "execution_count": 59, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "logre = LogisticRegression()\n", + "scores = cross_val_score(logre, data_X, df.repost, cv = 3)\n", + "scores.mean() " + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "metadata": { + "ExecuteTime": { + "end_time": "2018-04-29T07:53:26.825100Z", + "start_time": "2018-04-29T07:53:26.810871Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0.62948717948717947" + ] + }, + "execution_count": 60, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "logre = LogisticRegression()\n", + "data_X_scale = scale(data_X)\n", + "# The importance of preprocessing in data science and the machine learning pipeline I: \n", + "scores = cross_val_score(logre, data_X_scale, df.repost, cv = 3)\n", + "scores.mean() " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "> # 使用sklearn实现贝叶斯预测\n", + "***\n", + "\n", + "王成军\n", + "\n", + "wangchengjun@nju.edu.cn\n", + "\n", + "计算传播网 http://computational-communication.com" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "# Naive Bayes algorithm\n", + "\n", + "It is a classification technique based on Bayes’ Theorem with an assumption of independence among predictors. \n", + "\n", + "In simple terms, a Naive Bayes classifier assumes that the presence of a particular feature in a class is unrelated to the presence of any other feature. \n", + "\n", + "why it is known as ‘Naive’? For example, a fruit may be considered to be an apple if it is red, round, and about 3 inches in diameter. Even if these features depend on each other or upon the existence of the other features, all of these properties independently contribute to the probability that this fruit is an apple." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "贝叶斯定理为使用$p(c)$, $p(x)$, $p(x|c)$ 计算后验概率$P(c|x)$提供了方法:" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "$$\n", + "p(c|x) = \\frac{p(x|c) p(c)}{p(x)}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- P(c|x) is the posterior probability of class (c, target) given predictor (x, attributes).\n", + "- P(c) is the prior probability of class.\n", + "- P(x|c) is the likelihood which is the probability of predictor given class.\n", + "- P(x) is the prior probability of predictor." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "![](./img/Bayes_41.png)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "Step 1: Convert the data set into a frequency table\n", + "\n", + "Step 2: Create Likelihood table by finding the probabilities like:\n", + "- p(Overcast) = 0.29, p(rainy) = 0.36, p(sunny) = 0.36\n", + "- p(playing) = 0.64, p(rest) = 0.36\n", + "\n", + "Step 3: Now, use Naive Bayesian equation to calculate the posterior probability for each class. The class with the highest posterior probability is the outcome of prediction." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "## Problem: Players will play if weather is sunny. Is this statement is correct?\n", + "\n", + "We can solve it using above discussed method of posterior probability.\n", + "\n", + "$P(Yes | Sunny) = \\frac{P( Sunny | Yes) * P(Yes) } {P (Sunny)}$\n", + "\n", + "Here we have P (Sunny |Yes) = 3/9 = 0.33, P(Sunny) = 5/14 = 0.36, P( Yes)= 9/14 = 0.64\n", + "\n", + "Now, $P (No | Sunny) = \\frac{0.33 * 0.64}{0.36} = 0.60$, which has higher probability.\n", + "\n", + "$P(No | Sunny) = \\frac{P( Sunny | No) * P(No) } {P (Sunny)}$\n", + "\n", + "Here we have P (Sunny |No) = 2/5 = 0.4, P(Sunny) = 5/14 = 0.36, P( No)= 5/14 = 0.36\n", + "\n", + "Now, $P (Yes | Sunny) = \\frac{0.4 * 0.36}{0.36} = 0.4$, which has lower probability.\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "'ABCMeta BaseDiscreteNB BaseEstimator BaseNB BernoulliNB ClassifierMixin GaussianNB LabelBinarizer MultinomialNB __all__ __builtins__ __doc__ __file__ __name__ __package__ _check_partial_fit_first_call abstractmethod binarize check_X_y check_array check_is_fitted in1d issparse label_binarize logsumexp np safe_sparse_dot six'" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from sklearn import naive_bayes\n", + "' '.join(dir(naive_bayes)) " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "- naive_bayes.GaussianNB\tGaussian Naive Bayes (GaussianNB)\n", + "- naive_bayes.MultinomialNB([alpha, ...])\tNaive Bayes classifier for multinomial models\n", + "- naive_bayes.BernoulliNB([alpha, binarize, ...])\tNaive Bayes classifier for multivariate Bernoulli models." + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "metadata": { + "ExecuteTime": { + "end_time": "2018-04-29T08:02:37.644606Z", + "start_time": "2018-04-29T08:02:37.635952Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [], + "source": [ + "#Import Library of Gaussian Naive Bayes model\n", + "from sklearn.naive_bayes import GaussianNB\n", + "import numpy as np\n", + "\n", + "#assigning predictor and target variables\n", + "x= np.array([[-3,7],[1,5], [1,2], [-2,0], [2,3], [-4,0], [-1,1], [1,1], [-2,2], [2,7], [-4,1], [-2,7]])\n", + "Y = np.array([3, 3, 3, 3, 4, 3, 3, 4, 3, 4, 4, 4])" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": { + "ExecuteTime": { + "end_time": "2018-04-29T08:02:52.828101Z", + "start_time": "2018-04-29T08:02:52.818463Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([4, 3])" + ] + }, + "execution_count": 62, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#Create a Gaussian Classifier\n", + "model = GaussianNB()\n", + "\n", + "# Train the model using the training sets \n", + "model.fit(x[:8], Y[:8])\n", + "\n", + "#Predict Output \n", + "predicted= model.predict([[1,2],[3,4]])\n", + "predicted" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "# cross-validation \n", + " \n", + "k-fold CV, the training set is split into k smaller sets (other approaches are described below, but generally follow the same principles). The following procedure is followed for each of the k “folds”:\n", + "- A model is trained using k-1 of the folds as training data;\n", + "- the resulting model is validated on the remaining part of the data (i.e., it is used as a test set to compute a performance measure such as accuracy)." + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": { + "ExecuteTime": { + "end_time": "2018-04-29T08:04:04.297675Z", + "start_time": "2018-04-29T08:04:04.273413Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([41, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 0])" + ] + }, + "execution_count": 63, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data_X_train, data_X_test, data_y_train, data_y_test = randomSplit(df.click, df.reply, 20)\n", + "# Train the model using the training sets \n", + "model.fit(data_X_train, data_y_train)\n", + "\n", + "#Predict Output \n", + "predicted= model.predict(data_X_test)\n", + "predicted" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": { + "ExecuteTime": { + "end_time": "2018-04-29T08:04:34.184513Z", + "start_time": "2018-04-29T08:04:34.178511Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0.65000000000000002" + ] + }, + "execution_count": 64, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model.score(data_X_test, data_y_test)" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "metadata": { + "ExecuteTime": { + "end_time": "2018-04-29T08:05:04.297453Z", + "start_time": "2018-04-29T08:05:04.249311Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/datalab/Applications/anaconda/lib/python3.5/site-packages/sklearn/cross_validation.py:516: Warning: The least populated class in y has only 1 members, which is too few. The minimum number of labels for any class cannot be less than n_folds=7.\n", + " % (min_labels, self.n_folds)), Warning)\n" + ] + }, + { + "data": { + "text/plain": [ + "0.53413410073295453" + ] + }, + "execution_count": 66, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from sklearn.cross_validation import cross_val_score\n", + "\n", + "model = GaussianNB()\n", + "scores = cross_val_score(model, [[c] for c in df.click],\\\n", + " df.reply, cv = 7)\n", + "scores.mean() " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "> # 使用sklearn实现决策树\n", + "***\n", + "\n", + "王成军\n", + "\n", + "wangchengjun@nju.edu.cn\n", + "\n", + "计算传播网 http://computational-communication.com" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "# 决策树\n", + "- 这个监督式学习算法通常被用于分类问题。\n", + "- 它同时适用于分类变量和连续因变量。\n", + "- 在这个算法中,我们将总体分成两个或更多的同类群。\n", + "- 这是根据最重要的属性或者自变量来分成尽可能不同的组别。\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "![](./img/tree.png)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "![](./img/playtree.jpg)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "## 在上图中你可以看到,根据多种属性,人群被分成了不同的四个小组,来判断 “他们会不会去玩”。\n", + "### 为了把总体分成不同组别,需要用到许多技术,比如说 Gini、Information Gain、Chi-square、entropy。" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "metadata": { + "ExecuteTime": { + "end_time": "2018-04-29T08:10:20.871345Z", + "start_time": "2018-04-29T08:10:20.855125Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [], + "source": [ + "from sklearn import tree\n", + "model = tree.DecisionTreeClassifier(criterion='gini')" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "metadata": { + "ExecuteTime": { + "end_time": "2018-04-29T08:10:49.988277Z", + "start_time": "2018-04-29T08:10:49.973060Z" + }, + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0.91275167785234901" + ] + }, + "execution_count": 68, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data_X_train, data_X_test, data_y_train, data_y_test = randomSplitLogistic(data_X, df.repost, 20)\n", + "model.fit(data_X_train,data_y_train)\n", + "model.score(data_X_train,data_y_train)" + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "metadata": { + "ExecuteTime": { + "end_time": "2018-04-29T08:11:12.730866Z", + "start_time": "2018-04-29T08:11:12.725782Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0])" + ] + }, + "execution_count": 69, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Predict\n", + "model.predict(data_X_test)" + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "metadata": { + "ExecuteTime": { + "end_time": "2018-04-29T08:11:28.411441Z", + "start_time": "2018-04-29T08:11:28.397481Z" + }, + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0.33461538461538459" + ] + }, + "execution_count": 70, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# crossvalidation\n", + "scores = cross_val_score(model, data_X, df.repost, cv = 3)\n", + "scores.mean() " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "> # 使用sklearn实现SVM支持向量机\n", + "***\n", + "\n", + "王成军\n", + "\n", + "wangchengjun@nju.edu.cn\n", + "\n", + "计算传播网 http://computational-communication.com" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "![](./img/svm.jpg)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "- 将每个数据在N维空间中用点标出(N是你所有的特征总数),每个特征的值是一个坐标的值。\n", + " - 举个例子,如果我们只有身高和头发长度两个特征,我们会在二维空间中标出这两个变量,每个点有两个坐标(这些坐标叫做支持向量)。" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "![](./img/xyplot.png)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "- 现在,我们会找到将两组不同数据分开的一条直线。\n", + " - 两个分组中距离最近的两个点到这条线的距离同时最优化。" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "![](./img/sumintro.png)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "## 上面示例中的黑线将数据分类优化成两个小组\n", + "- 两组中距离最近的点(图中A、B点)到达黑线的距离满足最优条件。\n", + " - 这条直线就是我们的分割线。接下来,测试数据落到直线的哪一边,我们就将它分到哪一类去。" + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "metadata": { + "ExecuteTime": { + "end_time": "2018-04-29T08:17:29.788250Z", + "start_time": "2018-04-29T08:17:29.785022Z" + } + }, + "outputs": [], + "source": [ + "from sklearn import svm\n", + "# Create SVM classification object \n", + "model=svm.SVC() " + ] + }, + { + "cell_type": "code", + "execution_count": 72, + "metadata": { + "ExecuteTime": { + "end_time": "2018-04-29T08:17:31.035310Z", + "start_time": "2018-04-29T08:17:31.030713Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "'LinearSVC LinearSVR NuSVC NuSVR OneClassSVM SVC SVR __all__ __builtins__ __cached__ __doc__ __file__ __loader__ __name__ __package__ __path__ __spec__ base bounds classes l1_min_c liblinear libsvm libsvm_sparse'" + ] + }, + "execution_count": 72, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "' '.join(dir(svm))" + ] + }, + { + "cell_type": "code", + "execution_count": 73, + "metadata": { + "ExecuteTime": { + "end_time": "2018-04-29T08:17:41.872379Z", + "start_time": "2018-04-29T08:17:41.849759Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0.90380313199105144" + ] + }, + "execution_count": 73, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data_X_train, data_X_test, data_y_train, data_y_test = randomSplitLogistic(data_X, df.repost, 20)\n", + "model.fit(data_X_train,data_y_train)\n", + "model.score(data_X_train,data_y_train)" + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "metadata": { + "ExecuteTime": { + "end_time": "2018-04-29T08:17:47.661313Z", + "start_time": "2018-04-29T08:17:47.655841Z" + }, + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1])" + ] + }, + "execution_count": 74, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Predict\n", + "model.predict(data_X_test)" + ] + }, + { + "cell_type": "code", + "execution_count": 75, + "metadata": { + "ExecuteTime": { + "end_time": "2018-04-29T08:18:00.419986Z", + "start_time": "2018-04-29T08:17:58.671257Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [], + "source": [ + "# crossvalidation\n", + "scores = []\n", + "cvs = [3, 5, 10, 25, 50, 75, 100]\n", + "for i in cvs:\n", + " score = cross_val_score(model, data_X, df.repost,\n", + " cv = i)\n", + " scores.append(score.mean() ) # Try to tune cv\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 76, + "metadata": { + "ExecuteTime": { + "end_time": "2018-04-29T08:18:05.493658Z", + "start_time": "2018-04-29T08:18:05.359658Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(cvs, scores, 'b-o')\n", + "plt.xlabel('$cv$', fontsize = 20)\n", + "plt.ylabel('$Score$', fontsize = 20)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "\n", + "\n", + "> # 泰坦尼克号数据分析\n", + "\n", + "王成军\n", + "\n", + "wangchengjun@nju.edu.cn\n", + "\n", + "计算传播网 http://computational-communication.com" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-29T07:31:28.492497Z", + "start_time": "2018-05-29T07:31:28.488728Z" + }, + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "from sklearn import tree\n", + "import warnings \n", + "warnings.filterwarnings(\"ignore\") \n" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": { + "ExecuteTime": { + "end_time": "2018-06-06T07:02:49.855926Z", + "start_time": "2018-06-06T07:02:49.705773Z" + }, + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [], + "source": [ + "import pandas as pd\n", + "train = pd.read_csv('../data/tatanic_train.csv', \n", + " sep = \",\")" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": { + "ExecuteTime": { + "end_time": "2018-06-06T07:02:52.803564Z", + "start_time": "2018-06-06T07:02:52.759733Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Unnamed: 0PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
00103Braund, Mr. Owen Harrismale22.010A/5 211717.2500NaNS
11211Cumings, Mrs. John Bradley (Florence Briggs Th...female38.010PC 1759971.2833C85C
22313Heikkinen, Miss. Lainafemale26.000STON/O2. 31012827.9250NaNS
33411Futrelle, Mrs. Jacques Heath (Lily May Peel)female35.01011380353.1000C123S
44503Allen, Mr. William Henrymale35.0003734508.0500NaNS
\n", + "
" + ], + "text/plain": [ + " Unnamed: 0 PassengerId Survived Pclass \\\n", + "0 0 1 0 3 \n", + "1 1 2 1 1 \n", + "2 2 3 1 3 \n", + "3 3 4 1 1 \n", + "4 4 5 0 3 \n", + "\n", + " Name Sex Age SibSp \\\n", + "0 Braund, Mr. Owen Harris male 22.0 1 \n", + "1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 \n", + "2 Heikkinen, Miss. Laina female 26.0 0 \n", + "3 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 \n", + "4 Allen, Mr. William Henry male 35.0 0 \n", + "\n", + " Parch Ticket Fare Cabin Embarked \n", + "0 0 A/5 21171 7.2500 NaN S \n", + "1 0 PC 17599 71.2833 C85 C \n", + "2 0 STON/O2. 3101282 7.9250 NaN S \n", + "3 0 113803 53.1000 C123 S \n", + "4 0 373450 8.0500 NaN S " + ] + }, + "execution_count": 44, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train.head() " + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-29T07:28:58.070575Z", + "start_time": "2018-05-29T07:28:57.897862Z" + }, + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [], + "source": [ + "train[\"Age\"] = train[\"Age\"].fillna(train[\"Age\"].median())\n", + "train[\"Fare\"] = train[\"Fare\"].fillna(train[\"Fare\"].median())\n", + "#Convert the male and female groups to integer form\n", + "train[\"Sex\"][train[\"Sex\"] == \"male\"] = 0\n", + "train[\"Sex\"][train[\"Sex\"] == \"female\"] = 1\n", + "#Impute the Embarked variable\n", + "train[\"Embarked\"] = train[\"Embarked\"].fillna('S')\n", + "#Convert the Embarked classes to integer form\n", + "train[\"Embarked\"][train[\"Embarked\"] == \"S\"] = 0\n", + "train[\"Embarked\"][train[\"Embarked\"] == \"C\"] = 1\n", + "train[\"Embarked\"][train[\"Embarked\"] == \"Q\"] = 2" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-29T07:28:08.358884Z", + "start_time": "2018-05-29T07:28:08.346226Z" + }, + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ 0.12294397 0.31274009 0.23680307 0.32751287]\n", + "0.977553310887\n" + ] + } + ], + "source": [ + "#Create the target and features numpy arrays: target, features_one\n", + "target = train['Survived'].values\n", + "features_one = train[[\"Pclass\", \"Sex\", \"Age\", \"Fare\"]].values\n", + "\n", + "#Fit your first decision tree: my_tree_one\n", + "my_tree_one = tree.DecisionTreeClassifier()\n", + "my_tree_one = my_tree_one.fit(features_one, target)\n", + "#Look at the importance of the included features and print the score\n", + "print(my_tree_one.feature_importances_)\n", + "print(my_tree_one.score(features_one, target))" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-29T07:28:15.915998Z", + "start_time": "2018-05-29T07:28:15.705994Z" + }, + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [], + "source": [ + "test = pd.read_csv('../data/tatanic_test.csv', sep = \",\")\n", + "# Impute the missing value with the median\n", + "test.Fare[152] = test.Fare.median()\n", + "test[\"Age\"] = test[\"Age\"].fillna(test[\"Age\"].median())\n", + "#Convert the male and female groups to integer form\n", + "test[\"Sex\"][test[\"Sex\"] == \"male\"] = 0\n", + "test[\"Sex\"][test[\"Sex\"] == \"female\"] = 1\n", + "\n", + "#Impute the Embarked variable\n", + "test[\"Embarked\"] = test[\"Embarked\"].fillna('S')\n", + "#Convert the Embarked classes to integer form\n", + "test[\"Embarked\"][test[\"Embarked\"] == \"S\"] = 0\n", + "test[\"Embarked\"][test[\"Embarked\"] == \"C\"] = 1\n", + "test[\"Embarked\"][test[\"Embarked\"] == \"Q\"] = 2\n", + "\n", + "# Extract the features from the test set: Pclass, Sex, Age, and Fare.\n", + "test_features = test[[\"Pclass\",\"Sex\", \"Age\", \"Fare\"]].values\n", + "\n", + "# Make your prediction using the test set\n", + "my_prediction = my_tree_one.predict(test_features)\n", + "\n", + "# Create a data frame with two columns: PassengerId & Survived. Survived contains your predictions\n", + "PassengerId =np.array(test['PassengerId']).astype(int)\n", + "my_solution = pd.DataFrame(my_prediction, PassengerId, columns = [\"Survived\"])\n" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-29T07:28:18.081288Z", + "start_time": "2018-05-29T07:28:18.074414Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Survived
8920
8930
8941
\n", + "
" + ], + "text/plain": [ + " Survived\n", + "892 0\n", + "893 0\n", + "894 1" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "my_solution[:3]" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-29T07:25:44.488717Z", + "start_time": "2018-05-29T07:25:44.484381Z" + }, + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(418, 1)" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Check that your data frame has 418 entries\n", + "my_solution.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [], + "source": [ + "# Write your solution to a csv file with the name my_solution.csv \n", + "my_solution.to_csv(\"../data/tatanic_solution_one.csv\", \n", + " index_label = [\"PassengerId\"])" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-29T07:28:26.996353Z", + "start_time": "2018-05-29T07:28:26.982601Z" + }, + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.905723905724\n" + ] + } + ], + "source": [ + "# Create a new array with the added features: features_two\n", + "features_two = train[[\"Pclass\",\"Age\",\"Sex\",\"Fare\",\\\n", + " \"SibSp\", \"Parch\", \"Embarked\"]].values\n", + "\n", + "#Control overfitting by setting \"max_depth\" to 10 and \"min_samples_split\" to 5 : my_tree_two\n", + "max_depth = 10\n", + "min_samples_split = 5\n", + "my_tree_two = tree.DecisionTreeClassifier(max_depth = max_depth, \n", + " min_samples_split = min_samples_split, \n", + " random_state = 1)\n", + "my_tree_two = my_tree_two.fit(features_two, target)\n", + "\n", + "#Print the score of the new decison tree\n", + "print(my_tree_two.score(features_two, target))" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-29T07:28:28.033226Z", + "start_time": "2018-05-29T07:28:28.018293Z" + }, + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.979797979798\n" + ] + } + ], + "source": [ + "# create a new train set with the new variable\n", + "train_two = train\n", + "train_two['family_size'] = train.SibSp + train.Parch + 1\n", + "\n", + "# Create a new decision tree my_tree_three\n", + "features_three = train[[\"Pclass\", \"Sex\", \"Age\", \\\n", + " \"Fare\", \"SibSp\", \"Parch\", \"family_size\"]].values\n", + "\n", + "my_tree_three = tree.DecisionTreeClassifier()\n", + "my_tree_three = my_tree_three.fit(features_three, target)\n", + "\n", + "# Print the score of this decision tree\n", + "print(my_tree_three.score(features_three, target))\n" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-29T07:28:32.678968Z", + "start_time": "2018-05-29T07:28:32.465958Z" + }, + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.939393939394\n", + "418\n", + "[0 0 0]\n" + ] + } + ], + "source": [ + "#Import the `RandomForestClassifier`\n", + "from sklearn.ensemble import RandomForestClassifier\n", + "\n", + "#We want the Pclass, Age, Sex, Fare,SibSp, Parch, and Embarked variables\n", + "features_forest = train[[\"Pclass\", \"Age\", \"Sex\", \"Fare\", \"SibSp\", \"Parch\", \"Embarked\"]].values\n", + "\n", + "#Building the Forest: my_forest\n", + "n_estimators = 100\n", + "forest = RandomForestClassifier(max_depth = 10, min_samples_split=2, \n", + " n_estimators = n_estimators, random_state = 1)\n", + "my_forest = forest.fit(features_forest, target)\n", + "\n", + "#Print the score of the random forest\n", + "print(my_forest.score(features_forest, target))\n", + "\n", + "#Compute predictions and print the length of the prediction vector:test_features, pred_forest\n", + "test_features = test[[\"Pclass\", \"Age\", \"Sex\", \"Fare\", \"SibSp\", \"Parch\", \"Embarked\"]].values\n", + "pred_forest = my_forest.predict(test_features)\n", + "print(len(test_features))\n", + "print(pred_forest[:3])" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "ExecuteTime": { + "end_time": "2018-05-29T07:26:25.602062Z", + "start_time": "2018-05-29T07:26:25.572689Z" + }, + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ 0.14130255 0.17906027 0.41616727 0.17938711 0.05039699 0.01923751\n", + " 0.0144483 ]\n", + "[ 0.10384741 0.20139027 0.31989322 0.24602858 0.05272693 0.04159232\n", + " 0.03452128]\n", + "0.905723905724\n", + "0.939393939394\n" + ] + } + ], + "source": [ + "#Request and print the `.feature_importances_` attribute\n", + "print(my_tree_two.feature_importances_)\n", + "print(my_forest.feature_importances_)\n", + "\n", + "#Compute and print the mean accuracy score for both models\n", + "print(my_tree_two.score(features_two, target))\n", + "print(my_forest.score(features_two, target))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true, + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "# 阅读材料\n", + "机器学习算法的要点(附 Python 和 R 代码)http://blog.csdn.net/a6225301/article/details/50479672\n", + "\n", + "The \"Python Machine Learning\" book code repository and info resource https://github.com/rasbt/python-machine-learning-book\n", + "\n", + "An Introduction to Statistical Learning (James, Witten, Hastie, Tibshirani, 2013) : Python code https://github.com/JWarmenhoven/ISLR-python\n", + "\n", + "BuildingMachineLearningSystemsWithPython https://github.com/luispedro/BuildingMachineLearningSystemsWithPython" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "# 作业\n", + "https://www.datacamp.com/community/tutorials/the-importance-of-preprocessing-in-data-science-and-the-machine-learning-pipeline-i-centering-scaling-and-k-nearest-neighbours" + ] + } + ], + "metadata": { + "celltoolbar": "Slideshow", + "kernelspec": { + "display_name": "Python [conda env:anaconda]", + "language": "python", + "name": "conda-env-anaconda-py" + }, + "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.4" + }, + "latex_envs": { + "LaTeX_envs_menu_present": true, + "autoclose": false, + "autocomplete": true, + "bibliofile": "biblio.bib", + "cite_by": "apalike", + "current_citInitial": 1, + "eqLabelWithNumbers": true, + "eqNumInitial": 0, + "hotkeys": { + "equation": "Ctrl-E", + "itemize": "Ctrl-I" + }, + "labels_anchors": false, + "latex_user_defs": false, + "report_style_numbering": false, + "user_envs_cfg": false + }, + "toc": { + "base_numbering": 1, + "nav_menu": {}, + "number_sections": false, + "sideBar": false, + "skip_h1_title": false, + "title_cell": "Table of Contents", + "title_sidebar": "Contents", + "toc_cell": false, + "toc_position": { + "height": "780px", + "left": "1279px", + "top": "168.667px", + "width": "341px" + }, + "toc_section_display": true, + "toc_window_display": false + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/code/09.machine_learning_with_sklearn.ipynb b/code/09.machine_learning_with_sklearn.ipynb deleted file mode 100644 index 5a89315..0000000 --- a/code/09.machine_learning_with_sklearn.ipynb +++ /dev/null @@ -1,3016 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "source": [ - "***\n", - "***\n", - "# 计算传播与机器学习\n", - "\n", - "***\n", - "***\n", - "\n", - "王成军\n", - "\n", - "wangchengjun@nju.edu.cn\n", - "\n", - "计算传播网 http://computational-communication.com" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "source": [ - "![](./img/machine.jpg)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "subslide" - } - }, - "source": [ - "## 1、 监督式学习\n", - "\n", - "工作机制:\n", - "- 这个算法由一个目标变量或结果变量(或因变量)组成。\n", - "- 这些变量由已知的一系列预示变量(自变量)预测而来。\n", - "- 利用这一系列变量,我们生成一个将输入值映射到期望输出值的函数。\n", - "- 这个训练过程会一直持续,直到模型在训练数据上获得期望的精确度。\n", - "- 监督式学习的例子有:回归、决策树、随机森林、K – 近邻算法、逻辑回归等。" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "subslide" - } - }, - "source": [ - "## 2、非监督式学习\n", - "\n", - "工作机制:\n", - "- 在这个算法中,没有任何目标变量或结果变量要预测或估计。\n", - "- 这个算法用在不同的组内聚类分析。\n", - "- 这种分析方式被广泛地用来细分客户,根据干预的方式分为不同的用户组。\n", - "- 非监督式学习的例子有:关联算法和 K–均值算法。" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "subslide" - } - }, - "source": [ - "## 3、强化学习\n", - "\n", - "工作机制:\n", - "- 这个算法训练机器进行决策。\n", - "- 它是这样工作的:机器被放在一个能让它通过反复试错来训练自己的环境中。\n", - "- 机器从过去的经验中进行学习,并且尝试利用了解最透彻的知识作出精确的商业判断。 \n", - "- 强化学习的例子有马尔可夫决策过程。alphago\n", - "\n", - "> Chess. Here, the agent decides upon a series of moves depending on the state of the board (the environment), and the\n", - "reward can be defined as win or lose at the end of the game:" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "source": [ - "" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "source": [ - "- 线性回归\n", - "- 逻辑回归\n", - "- 决策树\n", - "- SVM\n", - "- 朴素贝叶斯\n", - "---\n", - "- K最近邻算法\n", - "- K均值算法\n", - "- 随机森林算法\n", - "- 降维算法\n", - "- Gradient Boost 和 Adaboost 算法\n" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "source": [ - "> # 使用sklearn做线性回归\n", - "***\n", - "\n", - "王成军\n", - "\n", - "wangchengjun@nju.edu.cn\n", - "\n", - "计算传播网 http://computational-communication.com" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "subslide" - } - }, - "source": [ - "# 线性回归\n", - "- 通常用于估计连续性变量的实际数值(房价、呼叫次数、总销售额等)。\n", - "- 通过拟合最佳直线来建立自变量X和因变量Y的关系。\n", - "- 这条最佳直线叫做回归线,并且用 $Y= \\beta *X + C$ 这条线性等式来表示。\n", - "- 系数 $\\beta$ 和 C 可以通过最小二乘法获得" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T07:10:39.010055Z", - "start_time": "2018-04-29T07:10:39.002664Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [], - "source": [ - "%matplotlib inline\n", - "import sklearn\n", - "from sklearn import datasets\n", - "from sklearn import linear_model\n", - "import matplotlib.pyplot as plt\n", - "from sklearn.metrics import classification_report\n", - "from sklearn.preprocessing import scale" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T07:11:24.244682Z", - "start_time": "2018-04-29T07:11:24.234905Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [], - "source": [ - "# boston data\n", - "boston = datasets.load_boston()\n", - "y = boston.target\n", - "X = boston.data" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T07:11:45.142201Z", - "start_time": "2018-04-29T07:11:45.137656Z" - }, - "slideshow": { - "slide_type": "fragment" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "array(['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD',\n", - " 'TAX', 'PTRATIO', 'B', 'LSTAT'], \n", - " dtype='|t| [95.0% Conf. Int.]\n", - "-----------------------------------------------------------------------------------\n", - "Intercept 36.4911 5.104 7.149 0.000 26.462 46.520\n", - "boston.data[0] -0.1072 0.033 -3.276 0.001 -0.171 -0.043\n", - "boston.data[1] 0.0464 0.014 3.380 0.001 0.019 0.073\n", - "boston.data[2] 0.0209 0.061 0.339 0.735 -0.100 0.142\n", - "boston.data[3] 2.6886 0.862 3.120 0.002 0.996 4.381\n", - "boston.data[4] -17.7958 3.821 -4.658 0.000 -25.302 -10.289\n", - "boston.data[5] 3.8048 0.418 9.102 0.000 2.983 4.626\n", - "boston.data[6] 0.0008 0.013 0.057 0.955 -0.025 0.027\n", - "boston.data[7] -1.4758 0.199 -7.398 0.000 -1.868 -1.084\n", - "boston.data[8] 0.3057 0.066 4.608 0.000 0.175 0.436\n", - "boston.data[9] -0.0123 0.004 -3.278 0.001 -0.020 -0.005\n", - "boston.data[10] -0.9535 0.131 -7.287 0.000 -1.211 -0.696\n", - "boston.data[11] 0.0094 0.003 3.500 0.001 0.004 0.015\n", - "boston.data[12] -0.5255 0.051 -10.366 0.000 -0.625 -0.426\n", - "==============================================================================\n", - "Omnibus: 178.029 Durbin-Watson: 1.078\n", - "Prob(Omnibus): 0.000 Jarque-Bera (JB): 782.015\n", - "Skew: 1.521 Prob(JB): 1.54e-170\n", - "Kurtosis: 8.276 Cond. No. 1.51e+04\n", - "==============================================================================\n", - "\n", - "Warnings:\n", - "[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.\n", - "[2] The condition number is large, 1.51e+04. This might indicate that there are\n", - "strong multicollinearity or other numerical problems.\n" - ] - } - ], - "source": [ - "import numpy as np\n", - "import statsmodels.api as sm\n", - "import statsmodels.formula.api as smf\n", - "\n", - "# Fit regression model (using the natural log of one of the regressors)\n", - "results = smf.ols('boston.target ~ boston.data', data=boston).fit()\n", - "\n", - "print(results.summary())" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T07:13:21.823618Z", - "start_time": "2018-04-29T07:13:21.812795Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [], - "source": [ - "regr = linear_model.LinearRegression()\n", - "lm = regr.fit(boston.data, y)" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T07:13:29.286705Z", - "start_time": "2018-04-29T07:13:29.280511Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "(36.491103280363603,\n", - " array([ -1.07170557e-01, 4.63952195e-02, 2.08602395e-02,\n", - " 2.68856140e+00, -1.77957587e+01, 3.80475246e+00,\n", - " 7.51061703e-04, -1.47575880e+00, 3.05655038e-01,\n", - " -1.23293463e-02, -9.53463555e-01, 9.39251272e-03,\n", - " -5.25466633e-01]),\n", - " 0.74060774286494269)" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "lm.intercept_, lm.coef_, lm.score(boston.data, y)" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T07:14:24.251725Z", - "start_time": "2018-04-29T07:14:24.248401Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [], - "source": [ - "predicted = regr.predict(boston.data)" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T07:14:33.380349Z", - "start_time": "2018-04-29T07:14:32.952670Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "fig, ax = plt.subplots()\n", - "ax.scatter(y, predicted)\n", - "ax.plot([y.min(), y.max()], [y.min(), y.max()], 'k--', lw=4)\n", - "ax.set_xlabel('$Measured$', fontsize = 20)\n", - "ax.set_ylabel('$Predicted$', fontsize = 20)\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "source": [ - "## 训练集和测试集" - ] - }, - { - "cell_type": "code", - "execution_count": 190, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[ 6.32000000e-03, 1.80000000e+01, 2.31000000e+00, ...,\n", - " 1.53000000e+01, 3.96900000e+02, 4.98000000e+00],\n", - " [ 2.73100000e-02, 0.00000000e+00, 7.07000000e+00, ...,\n", - " 1.78000000e+01, 3.96900000e+02, 9.14000000e+00],\n", - " [ 2.72900000e-02, 0.00000000e+00, 7.07000000e+00, ...,\n", - " 1.78000000e+01, 3.92830000e+02, 4.03000000e+00],\n", - " ..., \n", - " [ 6.07600000e-02, 0.00000000e+00, 1.19300000e+01, ...,\n", - " 2.10000000e+01, 3.96900000e+02, 5.64000000e+00],\n", - " [ 1.09590000e-01, 0.00000000e+00, 1.19300000e+01, ...,\n", - " 2.10000000e+01, 3.93450000e+02, 6.48000000e+00],\n", - " [ 4.74100000e-02, 0.00000000e+00, 1.19300000e+01, ...,\n", - " 2.10000000e+01, 3.96900000e+02, 7.88000000e+00]])" - ] - }, - "execution_count": 190, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "boston.data" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T07:16:27.403480Z", - "start_time": "2018-04-29T07:16:27.398197Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [], - "source": [ - "from sklearn.cross_validation import train_test_split\n", - "Xs_train, Xs_test, y_train, y_test = train_test_split(boston.data,\n", - " boston.target, \n", - " test_size=0.2, \n", - " random_state=42)" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T07:16:43.427978Z", - "start_time": "2018-04-29T07:16:43.423656Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [], - "source": [ - "regr = linear_model.LinearRegression()\n", - "lm = regr.fit(Xs_train, y_train)" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T07:16:47.859814Z", - "start_time": "2018-04-29T07:16:47.854257Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "(30.288948339369036,\n", - " array([ -1.12463481e-01, 3.00810168e-02, 4.07309919e-02,\n", - " 2.78676719e+00, -1.72406347e+01, 4.43248784e+00,\n", - " -6.23998173e-03, -1.44848504e+00, 2.62113793e-01,\n", - " -1.06390978e-02, -9.16398679e-01, 1.24516469e-02,\n", - " -5.09349120e-01]),\n", - " 0.75088377867329148)" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "lm.intercept_, lm.coef_, lm.score(Xs_train, y_train)" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T07:17:35.601265Z", - "start_time": "2018-04-29T07:17:35.598315Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [], - "source": [ - "predicted = regr.predict(Xs_test)" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T07:17:43.752187Z", - "start_time": "2018-04-29T07:17:43.605493Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "fig, ax = plt.subplots()\n", - "ax.scatter(y_test, predicted)\n", - "ax.plot([y.min(), y.max()], [y.min(), y.max()], 'k--', lw=4)\n", - "ax.set_xlabel('$Measured$', fontsize = 20)\n", - "ax.set_ylabel('$Predicted$', fontsize = 20)\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "source": [ - "# 交叉验证" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "subslide" - } - }, - "source": [ - "# cross-validation \n", - " \n", - "k-fold CV, the training set is split into k smaller sets (other approaches are described below, but generally follow the same principles). The following procedure is followed for each of the k “folds”:\n", - "- A model is trained using k-1 of the folds as training data;\n", - "- the resulting model is validated on the remaining part of the data (i.e., it is used as a test set to compute a performance measure such as accuracy)." - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T07:21:10.344979Z", - "start_time": "2018-04-29T07:21:10.333153Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "-1.5787701857180245" - ] - }, - "execution_count": 17, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "from sklearn.cross_validation import cross_val_score\n", - "\n", - "regr = linear_model.LinearRegression()\n", - "scores = cross_val_score(regr, boston.data , boston.target, cv = 3)\n", - "scores.mean() " - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T07:25:40.617010Z", - "start_time": "2018-04-29T07:25:39.304291Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "scores = [cross_val_score(regr, data_X_scale,\\\n", - " boston.target,\\\n", - " cv = int(i)).mean() \\\n", - " for i in range(3, 50)]\n", - "plt.plot(range(3, 50), scores,'r-o')\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T07:25:34.856887Z", - "start_time": "2018-04-29T07:25:34.840623Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "0.45384871359695633" - ] - }, - "execution_count": 20, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "data_X_scale = scale(boston.data)\n", - "scores = cross_val_score(regr,data_X_scale, boston.target,\\\n", - " cv = 7)\n", - "scores.mean() " - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "source": [ - "# 使用天涯bbs数据" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": { - "ExecuteTime": { - "end_time": "2018-05-29T07:23:08.949140Z", - "start_time": "2018-05-29T07:23:08.554345Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
titlelinkauthorauthor_pageclickreplytime
0【民间语文第161期】宁波px启示:船进港湾人应上岸/post-free-2849477-1.shtml贾也http://www.tianya.cn/5049945019467527032012-10-29 07:59
1宁波镇海PX项目引发群体上访 当地政府发布说明(转载)/post-free-2839539-1.shtml无上卫士ABChttp://www.tianya.cn/743418358824410412012-10-24 12:41
\n", - "
" - ], - "text/plain": [ - " title link author \\\n", - "0 【民间语文第161期】宁波px启示:船进港湾人应上岸 /post-free-2849477-1.shtml 贾也 \n", - "1 宁波镇海PX项目引发群体上访 当地政府发布说明(转载) /post-free-2839539-1.shtml 无上卫士ABC \n", - "\n", - " author_page click reply time \n", - "0 http://www.tianya.cn/50499450 194675 2703 2012-10-29 07:59 \n", - "1 http://www.tianya.cn/74341835 88244 1041 2012-10-24 12:41 " - ] - }, - "execution_count": 1, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import pandas as pd\n", - "\n", - "df = pd.read_csv('../data/tianya_bbs_threads_list.txt', sep = \"\\t\", header=None)\n", - "df=df.rename(columns = {0:'title', 1:'link', 2:'author',3:'author_page', 4:'click', 5:'reply', 6:'time'})\n", - "df[:2]" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": { - "ExecuteTime": { - "end_time": "2018-05-29T07:23:27.984100Z", - "start_time": "2018-05-29T07:23:27.969145Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [], - "source": [ - "# 定义这个函数的目的是让读者感受到:\n", - "# 抽取不同的样本,得到的结果完全不同。\n", - "def randomSplit(dataX, dataY, num):\n", - " dataX_train = []\n", - " dataX_test = []\n", - " dataY_train = []\n", - " dataY_test = []\n", - " import random\n", - " test_index = random.sample(range(len(df)), num)\n", - " for k in range(len(dataX)):\n", - " if k in test_index:\n", - " dataX_test.append([dataX[k]])\n", - " dataY_test.append(dataY[k])\n", - " else:\n", - " dataX_train.append([dataX[k]])\n", - " dataY_train.append(dataY[k])\n", - " return dataX_train, dataX_test, dataY_train, dataY_test, " - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": { - "ExecuteTime": { - "end_time": "2018-05-29T07:23:28.537926Z", - "start_time": "2018-05-29T07:23:28.509765Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [ - { - "ename": "NameError", - "evalue": "name 'linear_model' is not defined", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 7\u001b[0m np.log(df.reply+1), 20)\n\u001b[1;32m 8\u001b[0m \u001b[0;31m# Create linear regression object\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 9\u001b[0;31m \u001b[0mregr\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mlinear_model\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mLinearRegression\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 10\u001b[0m \u001b[0;31m# Train the model using the training sets\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 11\u001b[0m \u001b[0mregr\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfit\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdata_X_train\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdata_y_train\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mNameError\u001b[0m: name 'linear_model' is not defined" - ] - } - ], - "source": [ - "import numpy as np\n", - "\n", - "# Use only one feature\n", - "data_X = df.reply\n", - "# Split the data into training/testing sets\n", - "data_X_train, data_X_test, data_y_train, data_y_test = randomSplit(np.log(df.click+1), \n", - " np.log(df.reply+1), 20)\n", - "# Create linear regression object\n", - "regr = linear_model.LinearRegression()\n", - "# Train the model using the training sets\n", - "regr.fit(data_X_train, data_y_train)\n", - "# Explained variance score: 1 is perfect prediction\n", - "print('Variance score: %.2f' % regr.score(data_X_test, data_y_test))" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": { - "ExecuteTime": { - "end_time": "2018-05-29T07:23:16.208659Z", - "start_time": "2018-05-29T07:23:16.054583Z" - } - }, - "outputs": [ - { - "ename": "NameError", - "evalue": "name 'data_X_train' is not defined", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mdata_X_train\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;36m3\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[0;31mNameError\u001b[0m: name 'data_X_train' is not defined" - ] - } - ], - "source": [ - "data_X_train[:3]\n" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T07:26:38.754002Z", - "start_time": "2018-04-29T07:26:38.751117Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [], - "source": [ - "y_true, y_pred = data_y_test, regr.predict(data_X_test)" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T07:26:41.635527Z", - "start_time": "2018-04-29T07:26:41.541620Z" - }, - "slideshow": { - "slide_type": "fragment" - } - }, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "plt.scatter(y_pred, y_true, color='black')\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T07:27:00.422795Z", - "start_time": "2018-04-29T07:27:00.326748Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# Plot outputs\n", - "plt.scatter(data_X_test, data_y_test, color='black')\n", - "plt.plot(data_X_test, regr.predict(data_X_test), color='blue', linewidth=3)\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T07:27:36.147084Z", - "start_time": "2018-04-29T07:27:36.142088Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "('Coefficients: \\n', array([ 0.68334304]))" - ] - }, - "execution_count": 29, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# The coefficients\n", - "'Coefficients: \\n', regr.coef_" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T07:27:48.770254Z", - "start_time": "2018-04-29T07:27:48.765411Z" - }, - "slideshow": { - "slide_type": "fragment" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "'Residual sum of squares: 0.40'" - ] - }, - "execution_count": 30, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# The mean square error\n", - "\"Residual sum of squares: %.2f\" % np.mean((regr.predict(data_X_test) - data_y_test) ** 2)" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T07:27:56.521151Z", - "start_time": "2018-04-29T07:27:56.496715Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [], - "source": [ - "df.click_log = [[np.log(df.click[i]+1)] for i in range(len(df))]\n", - "df.reply_log = [[np.log(df.reply[i]+1)] for i in range(len(df))]" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T07:28:02.712616Z", - "start_time": "2018-04-29T07:28:02.701169Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "'Variance score: 0.62'" - ] - }, - "execution_count": 32, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "from sklearn.cross_validation import train_test_split\n", - "Xs_train, Xs_test, y_train, y_test = train_test_split(df.click_log, df.reply_log,test_size=0.2, random_state=0)\n", - "\n", - "# Create linear regression object\n", - "regr = linear_model.LinearRegression()\n", - "# Train the model using the training sets\n", - "regr.fit(Xs_train, y_train)\n", - "# Explained variance score: 1 is perfect prediction\n", - "'Variance score: %.2f' % regr.score(Xs_test, y_test)" - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T07:28:16.645996Z", - "start_time": "2018-04-29T07:28:16.549017Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# Plot outputs\n", - "plt.scatter(Xs_test, y_test, color='black')\n", - "plt.plot(Xs_test, regr.predict(Xs_test), color='blue', linewidth=3)\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T07:28:41.441426Z", - "start_time": "2018-04-29T07:28:41.428476Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "-0.68370073919430563" - ] - }, - "execution_count": 34, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "from sklearn.cross_validation import cross_val_score\n", - "\n", - "regr = linear_model.LinearRegression()\n", - "scores = cross_val_score(regr, df.click_log, \\\n", - " df.reply_log, cv = 3)\n", - "scores.mean() " - ] - }, - { - "cell_type": "code", - "execution_count": 35, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T07:29:00.237224Z", - "start_time": "2018-04-29T07:29:00.220565Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "-0.71881497228209845" - ] - }, - "execution_count": 35, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "regr = linear_model.LinearRegression()\n", - "scores = cross_val_score(regr, df.click_log, \n", - " df.reply_log, cv =5)\n", - "scores.mean() " - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "source": [ - "> # 使用sklearn做logistic回归\n", - "***\n", - "\n", - "王成军\n", - "\n", - "wangchengjun@nju.edu.cn\n", - "\n", - "计算传播网 http://computational-communication.com" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "subslide" - } - }, - "source": [ - "- logistic回归是一个分类算法而不是一个回归算法。\n", - "- 可根据已知的一系列因变量估计离散数值(比方说二进制数值 0 或 1 ,是或否,真或假)。\n", - "- 简单来说,它通过将数据拟合进一个逻辑函数(logistic function)来预估一个事件出现的概率。\n", - "- 因此,它也被叫做逻辑回归。因为它预估的是概率,所以它的输出值大小在 0 和 1 之间(正如所预计的一样)。" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "subslide" - } - }, - "source": [ - "$$odds= \\frac{p}{1-p} = \\frac{probability\\: of\\: event\\: occurrence} {probability \\:of \\:not\\: event\\: occurrence}$$" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "fragment" - } - }, - "source": [ - "$$ln(odds)= ln(\\frac{p}{1-p})$$" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "fragment" - } - }, - "source": [ - "$$logit(x) = ln(\\frac{p}{1-p}) = b_0+b_1X_1+b_2X_2+b_3X_3....+b_kX_k$$" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "subslide" - } - }, - "source": [ - "![](./img/logistic.jpg)" - ] - }, - { - "cell_type": "code", - "execution_count": 50, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T07:46:50.277195Z", - "start_time": "2018-04-29T07:46:50.272229Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [], - "source": [ - "repost = []\n", - "for i in df.title:\n", - " if u'转载' in i:\n", - " repost.append(1)\n", - " else:\n", - " repost.append(0)" - ] - }, - { - "cell_type": "code", - "execution_count": 51, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T07:47:06.292994Z", - "start_time": "2018-04-29T07:47:06.270715Z" - }, - "slideshow": { - "slide_type": "fragment" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "[[194675, 2703], [88244, 1041], [82779, 625]]" - ] - }, - "execution_count": 51, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "data_X = [[df.click[i], df.reply[i]] for i in range(len(df))]\n", - "data_X[:3]" - ] - }, - { - "cell_type": "code", - "execution_count": 52, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T07:47:45.269303Z", - "start_time": "2018-04-29T07:47:45.259792Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "0.61241970021413272" - ] - }, - "execution_count": 52, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "from sklearn.linear_model import LogisticRegression\n", - "df['repost'] = repost\n", - "model = LogisticRegression()\n", - "model.fit(data_X,df.repost)\n", - "model.score(data_X,df.repost)" - ] - }, - { - "cell_type": "code", - "execution_count": 53, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T07:47:59.648431Z", - "start_time": "2018-04-29T07:47:59.633936Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [], - "source": [ - "def randomSplitLogistic(dataX, dataY, num):\n", - " dataX_train = []\n", - " dataX_test = []\n", - " dataY_train = []\n", - " dataY_test = []\n", - " import random\n", - " test_index = random.sample(range(len(df)), num)\n", - " for k in range(len(dataX)):\n", - " if k in test_index:\n", - " dataX_test.append(dataX[k])\n", - " dataY_test.append(dataY[k])\n", - " else:\n", - " dataX_train.append(dataX[k])\n", - " dataY_train.append(dataY[k])\n", - " return dataX_train, dataX_test, dataY_train, dataY_test, " - ] - }, - { - "cell_type": "code", - "execution_count": 54, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T07:48:27.726443Z", - "start_time": "2018-04-29T07:48:27.710922Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "'Variance score: 0.45'" - ] - }, - "execution_count": 54, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Split the data into training/testing sets\n", - "data_X_train, data_X_test, data_y_train, data_y_test = randomSplitLogistic(data_X, df.repost, 20)\n", - "# Create logistic regression object\n", - "log_regr = LogisticRegression()\n", - "# Train the model using the training sets\n", - "log_regr.fit(data_X_train, data_y_train)\n", - "# Explained variance score: 1 is perfect prediction\n", - "'Variance score: %.2f' % log_regr.score(data_X_test, data_y_test)" - ] - }, - { - "cell_type": "code", - "execution_count": 55, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T07:48:56.873331Z", - "start_time": "2018-04-29T07:48:56.870219Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [], - "source": [ - "y_true, y_pred = data_y_test, log_regr.predict(data_X_test)\n" - ] - }, - { - "cell_type": "code", - "execution_count": 43, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T07:39:12.344043Z", - "start_time": "2018-04-29T07:39:12.338223Z" - }, - "slideshow": { - "slide_type": "fragment" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "([1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],\n", - " array([0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]))" - ] - }, - "execution_count": 43, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "y_true, y_pred" - ] - }, - { - "cell_type": "code", - "execution_count": 44, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T07:39:13.175680Z", - "start_time": "2018-04-29T07:39:13.171386Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " precision recall f1-score support\n", - "\n", - " 0 0.50 0.17 0.25 6\n", - " 1 0.72 0.93 0.81 14\n", - "\n", - "avg / total 0.66 0.70 0.64 20\n", - "\n" - ] - } - ], - "source": [ - "print(classification_report(y_true, y_pred))" - ] - }, - { - "cell_type": "code", - "execution_count": 56, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T07:51:43.039620Z", - "start_time": "2018-04-29T07:51:43.034812Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [], - "source": [ - "from sklearn.cross_validation import train_test_split\n", - "Xs_train, Xs_test, y_train, y_test = train_test_split(data_X, df.repost, test_size=0.2, random_state=42)" - ] - }, - { - "cell_type": "code", - "execution_count": 57, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T07:51:47.690742Z", - "start_time": "2018-04-29T07:51:47.683127Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "'Variance score: 0.60'" - ] - }, - "execution_count": 57, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Create logistic regression object\n", - "log_regr = LogisticRegression()\n", - "# Train the model using the training sets\n", - "log_regr.fit(Xs_train, y_train)\n", - "# Explained variance score: 1 is perfect prediction\n", - "'Variance score: %.2f' % log_regr.score(Xs_test, y_test)" - ] - }, - { - "cell_type": "code", - "execution_count": 58, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T07:51:55.780061Z", - "start_time": "2018-04-29T07:51:55.771924Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Logistic score for test set: 0.595745\n", - "Logistic score for training set: 0.613941\n", - " precision recall f1-score support\n", - "\n", - " 0 1.00 0.03 0.05 39\n", - " 1 0.59 1.00 0.74 55\n", - "\n", - "avg / total 0.76 0.60 0.46 94\n", - "\n" - ] - } - ], - "source": [ - "print('Logistic score for test set: %f' % log_regr.score(Xs_test, y_test))\n", - "print('Logistic score for training set: %f' % log_regr.score(Xs_train, y_train))\n", - "y_true, y_pred = y_test, log_regr.predict(Xs_test)\n", - "print(classification_report(y_true, y_pred))" - ] - }, - { - "cell_type": "code", - "execution_count": 59, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T07:52:53.880925Z", - "start_time": "2018-04-29T07:52:53.866672Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "0.53333333333333333" - ] - }, - "execution_count": 59, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "logre = LogisticRegression()\n", - "scores = cross_val_score(logre, data_X, df.repost, cv = 3)\n", - "scores.mean() " - ] - }, - { - "cell_type": "code", - "execution_count": 60, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T07:53:26.825100Z", - "start_time": "2018-04-29T07:53:26.810871Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "0.62948717948717947" - ] - }, - "execution_count": 60, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "logre = LogisticRegression()\n", - "data_X_scale = scale(data_X)\n", - "# The importance of preprocessing in data science and the machine learning pipeline I: \n", - "scores = cross_val_score(logre, data_X_scale, df.repost, cv = 3)\n", - "scores.mean() " - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "source": [ - "> # 使用sklearn实现贝叶斯预测\n", - "***\n", - "\n", - "王成军\n", - "\n", - "wangchengjun@nju.edu.cn\n", - "\n", - "计算传播网 http://computational-communication.com" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "subslide" - } - }, - "source": [ - "# Naive Bayes algorithm\n", - "\n", - "It is a classification technique based on Bayes’ Theorem with an assumption of independence among predictors. \n", - "\n", - "In simple terms, a Naive Bayes classifier assumes that the presence of a particular feature in a class is unrelated to the presence of any other feature. \n", - "\n", - "why it is known as ‘Naive’? For example, a fruit may be considered to be an apple if it is red, round, and about 3 inches in diameter. Even if these features depend on each other or upon the existence of the other features, all of these properties independently contribute to the probability that this fruit is an apple." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "subslide" - } - }, - "source": [ - "贝叶斯定理为使用$p(c)$, $p(x)$, $p(x|c)$ 计算后验概率$P(c|x)$提供了方法:" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "fragment" - } - }, - "source": [ - "$$\n", - "p(c|x) = \\frac{p(x|c) p(c)}{p(x)}\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "fragment" - } - }, - "source": [ - "- P(c|x) is the posterior probability of class (c, target) given predictor (x, attributes).\n", - "- P(c) is the prior probability of class.\n", - "- P(x|c) is the likelihood which is the probability of predictor given class.\n", - "- P(x) is the prior probability of predictor." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "subslide" - } - }, - "source": [ - "![](./img/Bayes_41.png)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "subslide" - } - }, - "source": [ - "Step 1: Convert the data set into a frequency table\n", - "\n", - "Step 2: Create Likelihood table by finding the probabilities like:\n", - "- p(Overcast) = 0.29, p(rainy) = 0.36, p(sunny) = 0.36\n", - "- p(playing) = 0.64, p(rest) = 0.36\n", - "\n", - "Step 3: Now, use Naive Bayesian equation to calculate the posterior probability for each class. The class with the highest posterior probability is the outcome of prediction." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "subslide" - } - }, - "source": [ - "## Problem: Players will play if weather is sunny. Is this statement is correct?\n", - "\n", - "We can solve it using above discussed method of posterior probability.\n", - "\n", - "$P(Yes | Sunny) = \\frac{P( Sunny | Yes) * P(Yes) } {P (Sunny)}$\n", - "\n", - "Here we have P (Sunny |Yes) = 3/9 = 0.33, P(Sunny) = 5/14 = 0.36, P( Yes)= 9/14 = 0.64\n", - "\n", - "Now, $P (Yes | Sunny) = \\frac{0.33 * 0.64}{0.36} = 0.60$, which has higher probability." - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": { - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "'ABCMeta BaseDiscreteNB BaseEstimator BaseNB BernoulliNB ClassifierMixin GaussianNB LabelBinarizer MultinomialNB __all__ __builtins__ __doc__ __file__ __name__ __package__ _check_partial_fit_first_call abstractmethod binarize check_X_y check_array check_is_fitted in1d issparse label_binarize logsumexp np safe_sparse_dot six'" - ] - }, - "execution_count": 17, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "from sklearn import naive_bayes\n", - "' '.join(dir(naive_bayes)) " - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "fragment" - } - }, - "source": [ - "- naive_bayes.GaussianNB\tGaussian Naive Bayes (GaussianNB)\n", - "- naive_bayes.MultinomialNB([alpha, ...])\tNaive Bayes classifier for multinomial models\n", - "- naive_bayes.BernoulliNB([alpha, binarize, ...])\tNaive Bayes classifier for multivariate Bernoulli models." - ] - }, - { - "cell_type": "code", - "execution_count": 61, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T08:02:37.644606Z", - "start_time": "2018-04-29T08:02:37.635952Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [], - "source": [ - "#Import Library of Gaussian Naive Bayes model\n", - "from sklearn.naive_bayes import GaussianNB\n", - "import numpy as np\n", - "\n", - "#assigning predictor and target variables\n", - "x= np.array([[-3,7],[1,5], [1,2], [-2,0], [2,3], [-4,0], [-1,1], [1,1], [-2,2], [2,7], [-4,1], [-2,7]])\n", - "Y = np.array([3, 3, 3, 3, 4, 3, 3, 4, 3, 4, 4, 4])" - ] - }, - { - "cell_type": "code", - "execution_count": 62, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T08:02:52.828101Z", - "start_time": "2018-04-29T08:02:52.818463Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "array([4, 3])" - ] - }, - "execution_count": 62, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "#Create a Gaussian Classifier\n", - "model = GaussianNB()\n", - "\n", - "# Train the model using the training sets \n", - "model.fit(x[:8], Y[:8])\n", - "\n", - "#Predict Output \n", - "predicted= model.predict([[1,2],[3,4]])\n", - "predicted" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "subslide" - } - }, - "source": [ - "# cross-validation \n", - " \n", - "k-fold CV, the training set is split into k smaller sets (other approaches are described below, but generally follow the same principles). The following procedure is followed for each of the k “folds”:\n", - "- A model is trained using k-1 of the folds as training data;\n", - "- the resulting model is validated on the remaining part of the data (i.e., it is used as a test set to compute a performance measure such as accuracy)." - ] - }, - { - "cell_type": "code", - "execution_count": 63, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T08:04:04.297675Z", - "start_time": "2018-04-29T08:04:04.273413Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "array([41, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", - " 0, 0, 0])" - ] - }, - "execution_count": 63, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "data_X_train, data_X_test, data_y_train, data_y_test = randomSplit(df.click, df.reply, 20)\n", - "# Train the model using the training sets \n", - "model.fit(data_X_train, data_y_train)\n", - "\n", - "#Predict Output \n", - "predicted= model.predict(data_X_test)\n", - "predicted" - ] - }, - { - "cell_type": "code", - "execution_count": 64, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T08:04:34.184513Z", - "start_time": "2018-04-29T08:04:34.178511Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "0.65000000000000002" - ] - }, - "execution_count": 64, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "model.score(data_X_test, data_y_test)" - ] - }, - { - "cell_type": "code", - "execution_count": 66, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T08:05:04.297453Z", - "start_time": "2018-04-29T08:05:04.249311Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/Users/datalab/Applications/anaconda/lib/python3.5/site-packages/sklearn/cross_validation.py:516: Warning: The least populated class in y has only 1 members, which is too few. The minimum number of labels for any class cannot be less than n_folds=7.\n", - " % (min_labels, self.n_folds)), Warning)\n" - ] - }, - { - "data": { - "text/plain": [ - "0.53413410073295453" - ] - }, - "execution_count": 66, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "from sklearn.cross_validation import cross_val_score\n", - "\n", - "model = GaussianNB()\n", - "scores = cross_val_score(model, [[c] for c in df.click],\\\n", - " df.reply, cv = 7)\n", - "scores.mean() " - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "source": [ - "> # 使用sklearn实现决策树\n", - "***\n", - "\n", - "王成军\n", - "\n", - "wangchengjun@nju.edu.cn\n", - "\n", - "计算传播网 http://computational-communication.com" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "subslide" - } - }, - "source": [ - "# 决策树\n", - "- 这个监督式学习算法通常被用于分类问题。\n", - "- 它同时适用于分类变量和连续因变量。\n", - "- 在这个算法中,我们将总体分成两个或更多的同类群。\n", - "- 这是根据最重要的属性或者自变量来分成尽可能不同的组别。\n" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "subslide" - } - }, - "source": [ - "![](./img/tree.png)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "subslide" - } - }, - "source": [ - "![](./img/playtree.jpg)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "subslide" - } - }, - "source": [ - "## 在上图中你可以看到,根据多种属性,人群被分成了不同的四个小组,来判断 “他们会不会去玩”。\n", - "### 为了把总体分成不同组别,需要用到许多技术,比如说 Gini、Information Gain、Chi-square、entropy。" - ] - }, - { - "cell_type": "code", - "execution_count": 67, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T08:10:20.871345Z", - "start_time": "2018-04-29T08:10:20.855125Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [], - "source": [ - "from sklearn import tree\n", - "model = tree.DecisionTreeClassifier(criterion='gini')" - ] - }, - { - "cell_type": "code", - "execution_count": 68, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T08:10:49.988277Z", - "start_time": "2018-04-29T08:10:49.973060Z" - }, - "slideshow": { - "slide_type": "fragment" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "0.91275167785234901" - ] - }, - "execution_count": 68, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "data_X_train, data_X_test, data_y_train, data_y_test = randomSplitLogistic(data_X, df.repost, 20)\n", - "model.fit(data_X_train,data_y_train)\n", - "model.score(data_X_train,data_y_train)" - ] - }, - { - "cell_type": "code", - "execution_count": 69, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T08:11:12.730866Z", - "start_time": "2018-04-29T08:11:12.725782Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "array([0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0])" - ] - }, - "execution_count": 69, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Predict\n", - "model.predict(data_X_test)" - ] - }, - { - "cell_type": "code", - "execution_count": 70, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T08:11:28.411441Z", - "start_time": "2018-04-29T08:11:28.397481Z" - }, - "slideshow": { - "slide_type": "fragment" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "0.33461538461538459" - ] - }, - "execution_count": 70, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# crossvalidation\n", - "scores = cross_val_score(model, data_X, df.repost, cv = 3)\n", - "scores.mean() " - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "source": [ - "> # 使用sklearn实现SVM支持向量机\n", - "***\n", - "\n", - "王成军\n", - "\n", - "wangchengjun@nju.edu.cn\n", - "\n", - "计算传播网 http://computational-communication.com" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "subslide" - } - }, - "source": [ - "![](./img/svm.jpg)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "subslide" - } - }, - "source": [ - "- 将每个数据在N维空间中用点标出(N是你所有的特征总数),每个特征的值是一个坐标的值。\n", - " - 举个例子,如果我们只有身高和头发长度两个特征,我们会在二维空间中标出这两个变量,每个点有两个坐标(这些坐标叫做支持向量)。" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "subslide" - } - }, - "source": [ - "![](./img/xyplot.png)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "subslide" - } - }, - "source": [ - "- 现在,我们会找到将两组不同数据分开的一条直线。\n", - " - 两个分组中距离最近的两个点到这条线的距离同时最优化。" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "subslide" - } - }, - "source": [ - "![](./img/sumintro.png)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "subslide" - } - }, - "source": [ - "## 上面示例中的黑线将数据分类优化成两个小组\n", - "- 两组中距离最近的点(图中A、B点)到达黑线的距离满足最优条件。\n", - " - 这条直线就是我们的分割线。接下来,测试数据落到直线的哪一边,我们就将它分到哪一类去。" - ] - }, - { - "cell_type": "code", - "execution_count": 71, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T08:17:29.788250Z", - "start_time": "2018-04-29T08:17:29.785022Z" - } - }, - "outputs": [], - "source": [ - "from sklearn import svm\n", - "# Create SVM classification object \n", - "model=svm.SVC() " - ] - }, - { - "cell_type": "code", - "execution_count": 72, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T08:17:31.035310Z", - "start_time": "2018-04-29T08:17:31.030713Z" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "'LinearSVC LinearSVR NuSVC NuSVR OneClassSVM SVC SVR __all__ __builtins__ __cached__ __doc__ __file__ __loader__ __name__ __package__ __path__ __spec__ base bounds classes l1_min_c liblinear libsvm libsvm_sparse'" - ] - }, - "execution_count": 72, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "' '.join(dir(svm))" - ] - }, - { - "cell_type": "code", - "execution_count": 73, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T08:17:41.872379Z", - "start_time": "2018-04-29T08:17:41.849759Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "0.90380313199105144" - ] - }, - "execution_count": 73, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "data_X_train, data_X_test, data_y_train, data_y_test = randomSplitLogistic(data_X, df.repost, 20)\n", - "model.fit(data_X_train,data_y_train)\n", - "model.score(data_X_train,data_y_train)" - ] - }, - { - "cell_type": "code", - "execution_count": 74, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T08:17:47.661313Z", - "start_time": "2018-04-29T08:17:47.655841Z" - }, - "slideshow": { - "slide_type": "fragment" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1])" - ] - }, - "execution_count": 74, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Predict\n", - "model.predict(data_X_test)" - ] - }, - { - "cell_type": "code", - "execution_count": 75, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T08:18:00.419986Z", - "start_time": "2018-04-29T08:17:58.671257Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [], - "source": [ - "# crossvalidation\n", - "scores = []\n", - "cvs = [3, 5, 10, 25, 50, 75, 100]\n", - "for i in cvs:\n", - " score = cross_val_score(model, data_X, df.repost,\n", - " cv = i)\n", - " scores.append(score.mean() ) # Try to tune cv\n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": 76, - "metadata": { - "ExecuteTime": { - "end_time": "2018-04-29T08:18:05.493658Z", - "start_time": "2018-04-29T08:18:05.359658Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "plt.plot(cvs, scores, 'b-o')\n", - "plt.xlabel('$cv$', fontsize = 20)\n", - "plt.ylabel('$Score$', fontsize = 20)\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "source": [ - "\n", - "\n", - "> # 泰坦尼克号数据分析\n", - "\n", - "王成军\n", - "\n", - "wangchengjun@nju.edu.cn\n", - "\n", - "计算传播网 http://computational-communication.com" - ] - }, - { - "cell_type": "code", - "execution_count": 40, - "metadata": { - "ExecuteTime": { - "end_time": "2018-05-29T07:31:28.492497Z", - "start_time": "2018-05-29T07:31:28.488728Z" - }, - "slideshow": { - "slide_type": "slide" - } - }, - "outputs": [], - "source": [ - "import numpy as np\n", - "from sklearn import tree\n", - "import warnings \n", - "warnings.filterwarnings(\"ignore\") \n" - ] - }, - { - "cell_type": "code", - "execution_count": 43, - "metadata": { - "ExecuteTime": { - "end_time": "2018-06-06T07:02:49.855926Z", - "start_time": "2018-06-06T07:02:49.705773Z" - }, - "slideshow": { - "slide_type": "slide" - } - }, - "outputs": [], - "source": [ - "import pandas as pd\n", - "train = pd.read_csv('../data/tatanic_train.csv', \n", - " sep = \",\")" - ] - }, - { - "cell_type": "code", - "execution_count": 44, - "metadata": { - "ExecuteTime": { - "end_time": "2018-06-06T07:02:52.803564Z", - "start_time": "2018-06-06T07:02:52.759733Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Unnamed: 0PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
00103Braund, Mr. Owen Harrismale22.010A/5 211717.2500NaNS
11211Cumings, Mrs. John Bradley (Florence Briggs Th...female38.010PC 1759971.2833C85C
22313Heikkinen, Miss. Lainafemale26.000STON/O2. 31012827.9250NaNS
33411Futrelle, Mrs. Jacques Heath (Lily May Peel)female35.01011380353.1000C123S
44503Allen, Mr. William Henrymale35.0003734508.0500NaNS
\n", - "
" - ], - "text/plain": [ - " Unnamed: 0 PassengerId Survived Pclass \\\n", - "0 0 1 0 3 \n", - "1 1 2 1 1 \n", - "2 2 3 1 3 \n", - "3 3 4 1 1 \n", - "4 4 5 0 3 \n", - "\n", - " Name Sex Age SibSp \\\n", - "0 Braund, Mr. Owen Harris male 22.0 1 \n", - "1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 \n", - "2 Heikkinen, Miss. Laina female 26.0 0 \n", - "3 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 \n", - "4 Allen, Mr. William Henry male 35.0 0 \n", - "\n", - " Parch Ticket Fare Cabin Embarked \n", - "0 0 A/5 21171 7.2500 NaN S \n", - "1 0 PC 17599 71.2833 C85 C \n", - "2 0 STON/O2. 3101282 7.9250 NaN S \n", - "3 0 113803 53.1000 C123 S \n", - "4 0 373450 8.0500 NaN S " - ] - }, - "execution_count": 44, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "train.head() " - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "metadata": { - "ExecuteTime": { - "end_time": "2018-05-29T07:28:58.070575Z", - "start_time": "2018-05-29T07:28:57.897862Z" - }, - "slideshow": { - "slide_type": "slide" - } - }, - "outputs": [], - "source": [ - "train[\"Age\"] = train[\"Age\"].fillna(train[\"Age\"].median())\n", - "train[\"Fare\"] = train[\"Fare\"].fillna(train[\"Fare\"].median())\n", - "#Convert the male and female groups to integer form\n", - "train[\"Sex\"][train[\"Sex\"] == \"male\"] = 0\n", - "train[\"Sex\"][train[\"Sex\"] == \"female\"] = 1\n", - "#Impute the Embarked variable\n", - "train[\"Embarked\"] = train[\"Embarked\"].fillna('S')\n", - "#Convert the Embarked classes to integer form\n", - "train[\"Embarked\"][train[\"Embarked\"] == \"S\"] = 0\n", - "train[\"Embarked\"][train[\"Embarked\"] == \"C\"] = 1\n", - "train[\"Embarked\"][train[\"Embarked\"] == \"Q\"] = 2" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "metadata": { - "ExecuteTime": { - "end_time": "2018-05-29T07:28:08.358884Z", - "start_time": "2018-05-29T07:28:08.346226Z" - }, - "slideshow": { - "slide_type": "slide" - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[ 0.12294397 0.31274009 0.23680307 0.32751287]\n", - "0.977553310887\n" - ] - } - ], - "source": [ - "#Create the target and features numpy arrays: target, features_one\n", - "target = train['Survived'].values\n", - "features_one = train[[\"Pclass\", \"Sex\", \"Age\", \"Fare\"]].values\n", - "\n", - "#Fit your first decision tree: my_tree_one\n", - "my_tree_one = tree.DecisionTreeClassifier()\n", - "my_tree_one = my_tree_one.fit(features_one, target)\n", - "#Look at the importance of the included features and print the score\n", - "print(my_tree_one.feature_importances_)\n", - "print(my_tree_one.score(features_one, target))" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "metadata": { - "ExecuteTime": { - "end_time": "2018-05-29T07:28:15.915998Z", - "start_time": "2018-05-29T07:28:15.705994Z" - }, - "slideshow": { - "slide_type": "slide" - } - }, - "outputs": [], - "source": [ - "test = pd.read_csv('../data/tatanic_test.csv', sep = \",\")\n", - "# Impute the missing value with the median\n", - "test.Fare[152] = test.Fare.median()\n", - "test[\"Age\"] = test[\"Age\"].fillna(test[\"Age\"].median())\n", - "#Convert the male and female groups to integer form\n", - "test[\"Sex\"][test[\"Sex\"] == \"male\"] = 0\n", - "test[\"Sex\"][test[\"Sex\"] == \"female\"] = 1\n", - "\n", - "#Impute the Embarked variable\n", - "test[\"Embarked\"] = test[\"Embarked\"].fillna('S')\n", - "#Convert the Embarked classes to integer form\n", - "test[\"Embarked\"][test[\"Embarked\"] == \"S\"] = 0\n", - "test[\"Embarked\"][test[\"Embarked\"] == \"C\"] = 1\n", - "test[\"Embarked\"][test[\"Embarked\"] == \"Q\"] = 2\n", - "\n", - "# Extract the features from the test set: Pclass, Sex, Age, and Fare.\n", - "test_features = test[[\"Pclass\",\"Sex\", \"Age\", \"Fare\"]].values\n", - "\n", - "# Make your prediction using the test set\n", - "my_prediction = my_tree_one.predict(test_features)\n", - "\n", - "# Create a data frame with two columns: PassengerId & Survived. Survived contains your predictions\n", - "PassengerId =np.array(test['PassengerId']).astype(int)\n", - "my_solution = pd.DataFrame(my_prediction, PassengerId, columns = [\"Survived\"])\n" - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "metadata": { - "ExecuteTime": { - "end_time": "2018-05-29T07:28:18.081288Z", - "start_time": "2018-05-29T07:28:18.074414Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Survived
8920
8930
8941
\n", - "
" - ], - "text/plain": [ - " Survived\n", - "892 0\n", - "893 0\n", - "894 1" - ] - }, - "execution_count": 33, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "my_solution[:3]" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": { - "ExecuteTime": { - "end_time": "2018-05-29T07:25:44.488717Z", - "start_time": "2018-05-29T07:25:44.484381Z" - }, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "(418, 1)" - ] - }, - "execution_count": 17, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Check that your data frame has 418 entries\n", - "my_solution.shape" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "metadata": { - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [], - "source": [ - "# Write your solution to a csv file with the name my_solution.csv \n", - "my_solution.to_csv(\"../data/tatanic_solution_one.csv\", \n", - " index_label = [\"PassengerId\"])" - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "metadata": { - "ExecuteTime": { - "end_time": "2018-05-29T07:28:26.996353Z", - "start_time": "2018-05-29T07:28:26.982601Z" - }, - "slideshow": { - "slide_type": "slide" - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.905723905724\n" - ] - } - ], - "source": [ - "# Create a new array with the added features: features_two\n", - "features_two = train[[\"Pclass\",\"Age\",\"Sex\",\"Fare\",\\\n", - " \"SibSp\", \"Parch\", \"Embarked\"]].values\n", - "\n", - "#Control overfitting by setting \"max_depth\" to 10 and \"min_samples_split\" to 5 : my_tree_two\n", - "max_depth = 10\n", - "min_samples_split = 5\n", - "my_tree_two = tree.DecisionTreeClassifier(max_depth = max_depth, \n", - " min_samples_split = min_samples_split, \n", - " random_state = 1)\n", - "my_tree_two = my_tree_two.fit(features_two, target)\n", - "\n", - "#Print the score of the new decison tree\n", - "print(my_tree_two.score(features_two, target))" - ] - }, - { - "cell_type": "code", - "execution_count": 35, - "metadata": { - "ExecuteTime": { - "end_time": "2018-05-29T07:28:28.033226Z", - "start_time": "2018-05-29T07:28:28.018293Z" - }, - "slideshow": { - "slide_type": "slide" - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.979797979798\n" - ] - } - ], - "source": [ - "# create a new train set with the new variable\n", - "train_two = train\n", - "train_two['family_size'] = train.SibSp + train.Parch + 1\n", - "\n", - "# Create a new decision tree my_tree_three\n", - "features_three = train[[\"Pclass\", \"Sex\", \"Age\", \\\n", - " \"Fare\", \"SibSp\", \"Parch\", \"family_size\"]].values\n", - "\n", - "my_tree_three = tree.DecisionTreeClassifier()\n", - "my_tree_three = my_tree_three.fit(features_three, target)\n", - "\n", - "# Print the score of this decision tree\n", - "print(my_tree_three.score(features_three, target))\n" - ] - }, - { - "cell_type": "code", - "execution_count": 36, - "metadata": { - "ExecuteTime": { - "end_time": "2018-05-29T07:28:32.678968Z", - "start_time": "2018-05-29T07:28:32.465958Z" - }, - "slideshow": { - "slide_type": "slide" - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.939393939394\n", - "418\n", - "[0 0 0]\n" - ] - } - ], - "source": [ - "#Import the `RandomForestClassifier`\n", - "from sklearn.ensemble import RandomForestClassifier\n", - "\n", - "#We want the Pclass, Age, Sex, Fare,SibSp, Parch, and Embarked variables\n", - "features_forest = train[[\"Pclass\", \"Age\", \"Sex\", \"Fare\", \"SibSp\", \"Parch\", \"Embarked\"]].values\n", - "\n", - "#Building the Forest: my_forest\n", - "n_estimators = 100\n", - "forest = RandomForestClassifier(max_depth = 10, min_samples_split=2, \n", - " n_estimators = n_estimators, random_state = 1)\n", - "my_forest = forest.fit(features_forest, target)\n", - "\n", - "#Print the score of the random forest\n", - "print(my_forest.score(features_forest, target))\n", - "\n", - "#Compute predictions and print the length of the prediction vector:test_features, pred_forest\n", - "test_features = test[[\"Pclass\", \"Age\", \"Sex\", \"Fare\", \"SibSp\", \"Parch\", \"Embarked\"]].values\n", - "pred_forest = my_forest.predict(test_features)\n", - "print(len(test_features))\n", - "print(pred_forest[:3])" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "metadata": { - "ExecuteTime": { - "end_time": "2018-05-29T07:26:25.602062Z", - "start_time": "2018-05-29T07:26:25.572689Z" - }, - "slideshow": { - "slide_type": "slide" - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[ 0.14130255 0.17906027 0.41616727 0.17938711 0.05039699 0.01923751\n", - " 0.0144483 ]\n", - "[ 0.10384741 0.20139027 0.31989322 0.24602858 0.05272693 0.04159232\n", - " 0.03452128]\n", - "0.905723905724\n", - "0.939393939394\n" - ] - } - ], - "source": [ - "#Request and print the `.feature_importances_` attribute\n", - "print(my_tree_two.feature_importances_)\n", - "print(my_forest.feature_importances_)\n", - "\n", - "#Compute and print the mean accuracy score for both models\n", - "print(my_tree_two.score(features_two, target))\n", - "print(my_forest.score(features_two, target))" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": true, - "slideshow": { - "slide_type": "slide" - } - }, - "source": [ - "# 阅读材料\n", - "机器学习算法的要点(附 Python 和 R 代码)http://blog.csdn.net/a6225301/article/details/50479672\n", - "\n", - "The \"Python Machine Learning\" book code repository and info resource https://github.com/rasbt/python-machine-learning-book\n", - "\n", - "An Introduction to Statistical Learning (James, Witten, Hastie, Tibshirani, 2013) : Python code https://github.com/JWarmenhoven/ISLR-python\n", - "\n", - "BuildingMachineLearningSystemsWithPython https://github.com/luispedro/BuildingMachineLearningSystemsWithPython" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "source": [ - "# 作业\n", - "https://www.datacamp.com/community/tutorials/the-importance-of-preprocessing-in-data-science-and-the-machine-learning-pipeline-i-centering-scaling-and-k-nearest-neighbours" - ] - } - ], - "metadata": { - "celltoolbar": "Slideshow", - "kernelspec": { - "display_name": "Python [conda env:anaconda]", - "language": "python", - "name": "conda-env-anaconda-py" - }, - "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.4" - }, - "latex_envs": { - "bibliofile": "biblio.bib", - "cite_by": "apalike", - "current_citInitial": 1, - "eqLabelWithNumbers": true, - "eqNumInitial": 0 - }, - "toc": { - "base_numbering": 1, - "nav_menu": {}, - "number_sections": false, - "sideBar": false, - "skip_h1_title": false, - "title_cell": "Table of Contents", - "title_sidebar": "Contents", - "toc_cell": false, - "toc_position": { - "height": "780px", - "left": "1279px", - "top": "168.667px", - "width": "341px" - }, - "toc_section_display": false, - "toc_window_display": true - } - }, - "nbformat": 4, - "nbformat_minor": 1 -}