"
+ ],
+ "text/plain": [
+ " City name Population Area square miles Population density\n",
+ "0 San Francisco 852469 46.87 18187.945381\n",
+ "1 San Jose 1015785 176.53 5754.177760\n",
+ "2 Sacramento 485199 97.92 4955.055147"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 15
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "text",
+ "id": "6qh63m-ayb-c"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "## Exercise #1\n",
+ "\n",
+ "Modify the `cities` table by adding a new boolean column that is True if and only if *both* of the following are True:\n",
+ "\n",
+ " * The city is named after a saint.\n",
+ " * The city has an area greater than 50 square miles.\n",
+ "\n",
+ "**Note:** Boolean `Series` are combined using the bitwise, rather than the traditional boolean, operators. For example, when performing *logical and*, use `&` instead of `and`.\n",
+ "\n",
+ "**Hint:** \"San\" in Spanish means \"saint.\""
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "code",
+ "id": "zCOn8ftSyddH",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 141
+ },
+ "outputId": "1f6ade20-a41b-4f97-b9fa-10584b426881"
+ },
+ "cell_type": "code",
+ "source": [
+ "# Your code here\n",
+ "cities['Is wide and has saint name'] = (cities['Area square miles'] > 50) & cities['City name'].apply(lambda name: name.startswith('San'))\n",
+ "cities"
+ ],
+ "execution_count": 16,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ "
City name
\n",
+ "
Population
\n",
+ "
Area square miles
\n",
+ "
Population density
\n",
+ "
Is wide and has saint name
\n",
+ "
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
0
\n",
+ "
San Francisco
\n",
+ "
852469
\n",
+ "
46.87
\n",
+ "
18187.945381
\n",
+ "
False
\n",
+ "
\n",
+ "
\n",
+ "
1
\n",
+ "
San Jose
\n",
+ "
1015785
\n",
+ "
176.53
\n",
+ "
5754.177760
\n",
+ "
True
\n",
+ "
\n",
+ "
\n",
+ "
2
\n",
+ "
Sacramento
\n",
+ "
485199
\n",
+ "
97.92
\n",
+ "
4955.055147
\n",
+ "
False
\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " City name Population Area square miles Population density \\\n",
+ "0 San Francisco 852469 46.87 18187.945381 \n",
+ "1 San Jose 1015785 176.53 5754.177760 \n",
+ "2 Sacramento 485199 97.92 4955.055147 \n",
+ "\n",
+ " Is wide and has saint name \n",
+ "0 False \n",
+ "1 True \n",
+ "2 False "
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 16
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "text",
+ "id": "YHIWvc9Ms-Ll"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "### Solution\n",
+ "\n",
+ "Click below for a solution."
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "code",
+ "id": "T5OlrqtdtCIb",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 141
+ },
+ "outputId": "bdcd30d7-1b56-41fe-bb04-76cc76c7e653"
+ },
+ "cell_type": "code",
+ "source": [
+ "cities['Is wide and has saint name'] = (cities['Area square miles'] > 50) & cities['City name'].apply(lambda name: name.startswith('San'))\n",
+ "cities"
+ ],
+ "execution_count": 17,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ "
City name
\n",
+ "
Population
\n",
+ "
Area square miles
\n",
+ "
Population density
\n",
+ "
Is wide and has saint name
\n",
+ "
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
0
\n",
+ "
San Francisco
\n",
+ "
852469
\n",
+ "
46.87
\n",
+ "
18187.945381
\n",
+ "
False
\n",
+ "
\n",
+ "
\n",
+ "
1
\n",
+ "
San Jose
\n",
+ "
1015785
\n",
+ "
176.53
\n",
+ "
5754.177760
\n",
+ "
True
\n",
+ "
\n",
+ "
\n",
+ "
2
\n",
+ "
Sacramento
\n",
+ "
485199
\n",
+ "
97.92
\n",
+ "
4955.055147
\n",
+ "
False
\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " City name Population Area square miles Population density \\\n",
+ "0 San Francisco 852469 46.87 18187.945381 \n",
+ "1 San Jose 1015785 176.53 5754.177760 \n",
+ "2 Sacramento 485199 97.92 4955.055147 \n",
+ "\n",
+ " Is wide and has saint name \n",
+ "0 False \n",
+ "1 True \n",
+ "2 False "
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 17
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "text",
+ "id": "f-xAOJeMiXFB"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "## Indexes\n",
+ "Both `Series` and `DataFrame` objects also define an `index` property that assigns an identifier value to each `Series` item or `DataFrame` row. \n",
+ "\n",
+ "By default, at construction, *pandas* assigns index values that reflect the ordering of the source data. Once created, the index values are stable; that is, they do not change when data is reordered."
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "code",
+ "id": "2684gsWNinq9",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 35
+ },
+ "outputId": "6a9f066d-9031-40d7-e757-ce1414bbf238"
+ },
+ "cell_type": "code",
+ "source": [
+ "city_names.index"
+ ],
+ "execution_count": 18,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "RangeIndex(start=0, stop=3, step=1)"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 18
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "code",
+ "id": "F_qPe2TBjfWd",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 35
+ },
+ "outputId": "d5fb533e-4af1-4672-b9be-046cd9c25ab2"
+ },
+ "cell_type": "code",
+ "source": [
+ "cities.index"
+ ],
+ "execution_count": 19,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "RangeIndex(start=0, stop=3, step=1)"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 19
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "text",
+ "id": "hp2oWY9Slo_h"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "Call `DataFrame.reindex` to manually reorder the rows. For example, the following has the same effect as sorting by city name:"
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "code",
+ "id": "sN0zUzSAj-U1",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 141
+ },
+ "outputId": "d0322ce9-b058-4f54-b11e-95d35d3e20db"
+ },
+ "cell_type": "code",
+ "source": [
+ "cities.reindex([2, 0, 1])"
+ ],
+ "execution_count": 20,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ "
City name
\n",
+ "
Population
\n",
+ "
Area square miles
\n",
+ "
Population density
\n",
+ "
Is wide and has saint name
\n",
+ "
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
2
\n",
+ "
Sacramento
\n",
+ "
485199
\n",
+ "
97.92
\n",
+ "
4955.055147
\n",
+ "
False
\n",
+ "
\n",
+ "
\n",
+ "
0
\n",
+ "
San Francisco
\n",
+ "
852469
\n",
+ "
46.87
\n",
+ "
18187.945381
\n",
+ "
False
\n",
+ "
\n",
+ "
\n",
+ "
1
\n",
+ "
San Jose
\n",
+ "
1015785
\n",
+ "
176.53
\n",
+ "
5754.177760
\n",
+ "
True
\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " City name Population Area square miles Population density \\\n",
+ "2 Sacramento 485199 97.92 4955.055147 \n",
+ "0 San Francisco 852469 46.87 18187.945381 \n",
+ "1 San Jose 1015785 176.53 5754.177760 \n",
+ "\n",
+ " Is wide and has saint name \n",
+ "2 False \n",
+ "0 False \n",
+ "1 True "
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 20
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "text",
+ "id": "-GQFz8NZuS06"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "Reindexing is a great way to shuffle (randomize) a `DataFrame`. In the example below, we take the index, which is array-like, and pass it to NumPy's `random.permutation` function, which shuffles its values in place. Calling `reindex` with this shuffled array causes the `DataFrame` rows to be shuffled in the same way.\n",
+ "Try running the following cell multiple times!"
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "code",
+ "id": "mF8GC0k8uYhz",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 141
+ },
+ "outputId": "58d07058-0188-400e-d08c-d35590e074da"
+ },
+ "cell_type": "code",
+ "source": [
+ "cities.reindex(np.random.permutation(cities.index))"
+ ],
+ "execution_count": 21,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ "
City name
\n",
+ "
Population
\n",
+ "
Area square miles
\n",
+ "
Population density
\n",
+ "
Is wide and has saint name
\n",
+ "
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
1
\n",
+ "
San Jose
\n",
+ "
1015785
\n",
+ "
176.53
\n",
+ "
5754.177760
\n",
+ "
True
\n",
+ "
\n",
+ "
\n",
+ "
0
\n",
+ "
San Francisco
\n",
+ "
852469
\n",
+ "
46.87
\n",
+ "
18187.945381
\n",
+ "
False
\n",
+ "
\n",
+ "
\n",
+ "
2
\n",
+ "
Sacramento
\n",
+ "
485199
\n",
+ "
97.92
\n",
+ "
4955.055147
\n",
+ "
False
\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " City name Population Area square miles Population density \\\n",
+ "1 San Jose 1015785 176.53 5754.177760 \n",
+ "0 San Francisco 852469 46.87 18187.945381 \n",
+ "2 Sacramento 485199 97.92 4955.055147 \n",
+ "\n",
+ " Is wide and has saint name \n",
+ "1 True \n",
+ "0 False \n",
+ "2 False "
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 21
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "text",
+ "id": "fSso35fQmGKb"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "For more information, see the [Index documentation](http://pandas.pydata.org/pandas-docs/stable/indexing.html#index-objects)."
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "text",
+ "id": "8UngIdVhz8C0"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "## Exercise #2\n",
+ "\n",
+ "The `reindex` method allows index values that are not in the original `DataFrame`'s index values. Try it and see what happens if you use such values! Why do you think this is allowed?"
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "code",
+ "id": "PN55GrDX0jzO",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 171
+ },
+ "outputId": "cc6495e8-83ab-4c10-c8fb-2f3650ed05ae"
+ },
+ "cell_type": "code",
+ "source": [
+ "# Your code here\n",
+ "cities.reindex([0, 4, 5, 2])"
+ ],
+ "execution_count": 22,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ "
City name
\n",
+ "
Population
\n",
+ "
Area square miles
\n",
+ "
Population density
\n",
+ "
Is wide and has saint name
\n",
+ "
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
0
\n",
+ "
San Francisco
\n",
+ "
852469.0
\n",
+ "
46.87
\n",
+ "
18187.945381
\n",
+ "
False
\n",
+ "
\n",
+ "
\n",
+ "
4
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
5
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
2
\n",
+ "
Sacramento
\n",
+ "
485199.0
\n",
+ "
97.92
\n",
+ "
4955.055147
\n",
+ "
False
\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " City name Population Area square miles Population density \\\n",
+ "0 San Francisco 852469.0 46.87 18187.945381 \n",
+ "4 NaN NaN NaN NaN \n",
+ "5 NaN NaN NaN NaN \n",
+ "2 Sacramento 485199.0 97.92 4955.055147 \n",
+ "\n",
+ " Is wide and has saint name \n",
+ "0 False \n",
+ "4 NaN \n",
+ "5 NaN \n",
+ "2 False "
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 22
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "text",
+ "id": "TJffr5_Jwqvd"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "### Solution\n",
+ "\n",
+ "Click below for the solution."
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "text",
+ "id": "8oSvi2QWwuDH"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "If your `reindex` input array includes values not in the original `DataFrame` index values, `reindex` will add new rows for these \"missing\" indices and populate all corresponding columns with `NaN` values:"
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "code",
+ "id": "yBdkucKCwy4x",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 171
+ },
+ "outputId": "14fa2073-d33e-4cad-f952-ff7ee0e05755"
+ },
+ "cell_type": "code",
+ "source": [
+ "cities.reindex([0, 4, 5, 2])"
+ ],
+ "execution_count": 23,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ "
City name
\n",
+ "
Population
\n",
+ "
Area square miles
\n",
+ "
Population density
\n",
+ "
Is wide and has saint name
\n",
+ "
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
0
\n",
+ "
San Francisco
\n",
+ "
852469.0
\n",
+ "
46.87
\n",
+ "
18187.945381
\n",
+ "
False
\n",
+ "
\n",
+ "
\n",
+ "
4
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
5
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
2
\n",
+ "
Sacramento
\n",
+ "
485199.0
\n",
+ "
97.92
\n",
+ "
4955.055147
\n",
+ "
False
\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " City name Population Area square miles Population density \\\n",
+ "0 San Francisco 852469.0 46.87 18187.945381 \n",
+ "4 NaN NaN NaN NaN \n",
+ "5 NaN NaN NaN NaN \n",
+ "2 Sacramento 485199.0 97.92 4955.055147 \n",
+ "\n",
+ " Is wide and has saint name \n",
+ "0 False \n",
+ "4 NaN \n",
+ "5 NaN \n",
+ "2 False "
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 23
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "text",
+ "id": "2l82PhPbwz7g"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "This behavior is desirable because indexes are often strings pulled from the actual data (see the [*pandas* reindex\n",
+ "documentation](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.reindex.html) for an example\n",
+ "in which the index values are browser names).\n",
+ "\n",
+ "In this case, allowing \"missing\" indices makes it easy to reindex using an external list, as you don't have to worry about\n",
+ "sanitizing the input."
+ ]
+ }
+ ]
+}
\ No newline at end of file
From c2db7d40051f7a17e7b8c364d7516b86d5becf0f Mon Sep 17 00:00:00 2001
From: Subham <40177225+loneWolf148@users.noreply.github.com>
Date: Sat, 23 Feb 2019 21:09:01 +0530
Subject: [PATCH 02/11] Created using Colaboratory
---
first_steps_with_tensor_flow.ipynb | 1651 ++++++++++++++++++++++++++++
1 file changed, 1651 insertions(+)
create mode 100644 first_steps_with_tensor_flow.ipynb
diff --git a/first_steps_with_tensor_flow.ipynb b/first_steps_with_tensor_flow.ipynb
new file mode 100644
index 0000000..2f0a0b5
--- /dev/null
+++ b/first_steps_with_tensor_flow.ipynb
@@ -0,0 +1,1651 @@
+{
+ "nbformat": 4,
+ "nbformat_minor": 0,
+ "metadata": {
+ "colab": {
+ "name": "first_steps_with_tensor_flow.ipynb",
+ "version": "0.3.2",
+ "provenance": [],
+ "collapsed_sections": [
+ "JndnmDMp66FL",
+ "ajVM7rkoYXeL",
+ "ci1ISxxrZ7v0"
+ ],
+ "include_colab_link": true
+ },
+ "kernelspec": {
+ "name": "python2",
+ "display_name": "Python 2"
+ }
+ },
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "view-in-github",
+ "colab_type": "text"
+ },
+ "source": [
+ ""
+ ]
+ },
+ {
+ "metadata": {
+ "id": "JndnmDMp66FL",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "#### Copyright 2017 Google LLC."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "hMqWDc_m6rUC",
+ "colab_type": "code",
+ "cellView": "both",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "# Licensed under the Apache License, Version 2.0 (the \"License\");\n",
+ "# you may not use this file except in compliance with the License.\n",
+ "# You may obtain a copy of the License at\n",
+ "#\n",
+ "# https://www.apache.org/licenses/LICENSE-2.0\n",
+ "#\n",
+ "# Unless required by applicable law or agreed to in writing, software\n",
+ "# distributed under the License is distributed on an \"AS IS\" BASIS,\n",
+ "# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n",
+ "# See the License for the specific language governing permissions and\n",
+ "# limitations under the License."
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "4f3CKqFUqL2-",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "# First Steps with TensorFlow"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "Bd2Zkk1LE2Zr",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "**Learning Objectives:**\n",
+ " * Learn fundamental TensorFlow concepts\n",
+ " * Use the `LinearRegressor` class in TensorFlow to predict median housing price, at the granularity of city blocks, based on one input feature\n",
+ " * Evaluate the accuracy of a model's predictions using Root Mean Squared Error (RMSE)\n",
+ " * Improve the accuracy of a model by tuning its hyperparameters"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "MxiIKhP4E2Zr",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "The [data](https://developers.google.com/machine-learning/crash-course/california-housing-data-description) is based on 1990 census data from California."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "6TjLjL9IU80G",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "## Setup\n",
+ "In this first cell, we'll load the necessary libraries."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "rVFf5asKE2Zt",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "from __future__ import print_function\n",
+ "\n",
+ "import math\n",
+ "\n",
+ "from IPython import display\n",
+ "from matplotlib import cm\n",
+ "from matplotlib import gridspec\n",
+ "from matplotlib import pyplot as plt\n",
+ "import numpy as np\n",
+ "import pandas as pd\n",
+ "from sklearn import metrics\n",
+ "import tensorflow as tf\n",
+ "from tensorflow.python.data import Dataset\n",
+ "\n",
+ "tf.logging.set_verbosity(tf.logging.ERROR)\n",
+ "pd.options.display.max_rows = 10\n",
+ "pd.options.display.float_format = '{:.1f}'.format"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "ipRyUHjhU80Q",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "Next, we'll load our data set."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "9ivCDWnwE2Zx",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "california_housing_dataframe = pd.read_csv(\"https://download.mlcc.google.com/mledu-datasets/california_housing_train.csv\", sep=\",\")"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "vVk_qlG6U80j",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "We'll randomize the data, just to be sure not to get any pathological ordering effects that might harm the performance of Stochastic Gradient Descent. Additionally, we'll scale `median_house_value` to be in units of thousands, so it can be learned a little more easily with learning rates in a range that we usually use."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "r0eVyguIU80m",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 435
+ },
+ "outputId": "a4b00c48-500e-45ce-eeca-0ebe541ad62d"
+ },
+ "cell_type": "code",
+ "source": [
+ "california_housing_dataframe = california_housing_dataframe.reindex(\n",
+ " np.random.permutation(california_housing_dataframe.index))\n",
+ "california_housing_dataframe[\"median_house_value\"] /= 1000.0\n",
+ "california_housing_dataframe"
+ ],
+ "execution_count": 4,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/html": [
+ "
"
+ ],
+ "text/plain": [
+ " longitude latitude housing_median_age total_rooms total_bedrooms \\\n",
+ "count 17000.0 17000.0 17000.0 17000.0 17000.0 \n",
+ "mean -119.6 35.6 28.6 2643.7 539.4 \n",
+ "std 2.0 2.1 12.6 2179.9 421.5 \n",
+ "min -124.3 32.5 1.0 2.0 1.0 \n",
+ "25% -121.8 33.9 18.0 1462.0 297.0 \n",
+ "50% -118.5 34.2 29.0 2127.0 434.0 \n",
+ "75% -118.0 37.7 37.0 3151.2 648.2 \n",
+ "max -114.3 42.0 52.0 37937.0 6445.0 \n",
+ "\n",
+ " population households median_income median_house_value \n",
+ "count 17000.0 17000.0 17000.0 17000.0 \n",
+ "mean 1429.6 501.2 3.9 207.3 \n",
+ "std 1147.9 384.5 1.9 116.0 \n",
+ "min 3.0 1.0 0.5 15.0 \n",
+ "25% 790.0 282.0 2.6 119.4 \n",
+ "50% 1167.0 409.0 3.5 180.4 \n",
+ "75% 1721.0 605.2 4.8 265.0 \n",
+ "max 35682.0 6082.0 15.0 500.0 "
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 5
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "Lr6wYl2bt2Ep",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "## Build the First Model\n",
+ "\n",
+ "In this exercise, we'll try to predict `median_house_value`, which will be our label (sometimes also called a target). We'll use `total_rooms` as our input feature.\n",
+ "\n",
+ "**NOTE:** Our data is at the city block level, so this feature represents the total number of rooms in that block.\n",
+ "\n",
+ "To train our model, we'll use the [LinearRegressor](https://www.tensorflow.org/api_docs/python/tf/estimator/LinearRegressor) interface provided by the TensorFlow [Estimator](https://www.tensorflow.org/get_started/estimator) API. This API takes care of a lot of the low-level model plumbing, and exposes convenient methods for performing model training, evaluation, and inference."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "0cpcsieFhsNI",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "### Step 1: Define Features and Configure Feature Columns"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "EL8-9d4ZJNR7",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "In order to import our training data into TensorFlow, we need to specify what type of data each feature contains. There are two main types of data we'll use in this and future exercises:\n",
+ "\n",
+ "* **Categorical Data**: Data that is textual. In this exercise, our housing data set does not contain any categorical features, but examples you might see would be the home style, the words in a real-estate ad.\n",
+ "\n",
+ "* **Numerical Data**: Data that is a number (integer or float) and that you want to treat as a number. As we will discuss more later sometimes you might want to treat numerical data (e.g., a postal code) as if it were categorical.\n",
+ "\n",
+ "In TensorFlow, we indicate a feature's data type using a construct called a **feature column**. Feature columns store only a description of the feature data; they do not contain the feature data itself.\n",
+ "\n",
+ "To start, we're going to use just one numeric input feature, `total_rooms`. The following code pulls the `total_rooms` data from our `california_housing_dataframe` and defines the feature column using `numeric_column`, which specifies its data is numeric:"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "rhEbFCZ86cDZ",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "# Define the input feature: total_rooms.\n",
+ "my_feature = california_housing_dataframe[[\"total_rooms\"]]\n",
+ "\n",
+ "# Configure a numeric feature column for total_rooms.\n",
+ "feature_columns = [tf.feature_column.numeric_column(\"total_rooms\")]"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "K_3S8teX7Rd2",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "**NOTE:** The shape of our `total_rooms` data is a one-dimensional array (a list of the total number of rooms for each block). This is the default shape for `numeric_column`, so we don't have to pass it as an argument."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "UMl3qrU5MGV6",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "### Step 2: Define the Target"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "cw4nrfcB7kyk",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "Next, we'll define our target, which is `median_house_value`. Again, we can pull it from our `california_housing_dataframe`:"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "l1NvvNkH8Kbt",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "# Define the label.\n",
+ "targets = california_housing_dataframe[\"median_house_value\"]"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "4M-rTFHL2UkA",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "### Step 3: Configure the LinearRegressor"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "fUfGQUNp7jdL",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "Next, we'll configure a linear regression model using LinearRegressor. We'll train this model using the `GradientDescentOptimizer`, which implements Mini-Batch Stochastic Gradient Descent (SGD). The `learning_rate` argument controls the size of the gradient step.\n",
+ "\n",
+ "**NOTE:** To be safe, we also apply [gradient clipping](https://developers.google.com/machine-learning/glossary/#gradient_clipping) to our optimizer via `clip_gradients_by_norm`. Gradient clipping ensures the magnitude of the gradients do not become too large during training, which can cause gradient descent to fail. "
+ ]
+ },
+ {
+ "metadata": {
+ "id": "ubhtW-NGU802",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 139
+ },
+ "outputId": "46cea246-4e75-472e-c0df-89e62a847964"
+ },
+ "cell_type": "code",
+ "source": [
+ "# Use gradient descent as the optimizer for training the model.\n",
+ "my_optimizer=tf.train.GradientDescentOptimizer(learning_rate=0.0000001)\n",
+ "my_optimizer = tf.contrib.estimator.clip_gradients_by_norm(my_optimizer, 5.0)\n",
+ "\n",
+ "# Configure the linear regression model with our feature columns and optimizer.\n",
+ "# Set a learning rate of 0.0000001 for Gradient Descent.\n",
+ "linear_regressor = tf.estimator.LinearRegressor(\n",
+ " feature_columns=feature_columns,\n",
+ " optimizer=my_optimizer\n",
+ ")"
+ ],
+ "execution_count": 8,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "WARNING: The TensorFlow contrib module will not be included in TensorFlow 2.0.\n",
+ "For more information, please see:\n",
+ " * https://github.com/tensorflow/community/blob/master/rfcs/20180907-contrib-sunset.md\n",
+ " * https://github.com/tensorflow/addons\n",
+ "If you depend on functionality not listed there, please file an issue.\n",
+ "\n"
+ ],
+ "name": "stdout"
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "-0IztwdK2f3F",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "### Step 4: Define the Input Function"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "S5M5j6xSCHxx",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "To import our California housing data into our `LinearRegressor`, we need to define an input function, which instructs TensorFlow how to preprocess\n",
+ "the data, as well as how to batch, shuffle, and repeat it during model training.\n",
+ "\n",
+ "First, we'll convert our *pandas* feature data into a dict of NumPy arrays. We can then use the TensorFlow [Dataset API](https://www.tensorflow.org/programmers_guide/datasets) to construct a dataset object from our data, and then break\n",
+ "our data into batches of `batch_size`, to be repeated for the specified number of epochs (num_epochs). \n",
+ "\n",
+ "**NOTE:** When the default value of `num_epochs=None` is passed to `repeat()`, the input data will be repeated indefinitely.\n",
+ "\n",
+ "Next, if `shuffle` is set to `True`, we'll shuffle the data so that it's passed to the model randomly during training. The `buffer_size` argument specifies\n",
+ "the size of the dataset from which `shuffle` will randomly sample.\n",
+ "\n",
+ "Finally, our input function constructs an iterator for the dataset and returns the next batch of data to the LinearRegressor."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "RKZ9zNcHJtwc",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "def my_input_fn(features, targets, batch_size=1, shuffle=True, num_epochs=None):\n",
+ " \"\"\"Trains a linear regression model of one feature.\n",
+ " \n",
+ " Args:\n",
+ " features: pandas DataFrame of features\n",
+ " targets: pandas DataFrame of targets\n",
+ " batch_size: Size of batches to be passed to the model\n",
+ " shuffle: True or False. Whether to shuffle the data.\n",
+ " num_epochs: Number of epochs for which data should be repeated. None = repeat indefinitely\n",
+ " Returns:\n",
+ " Tuple of (features, labels) for next data batch\n",
+ " \"\"\"\n",
+ " \n",
+ " # Convert pandas data into a dict of np arrays.\n",
+ " features = {key:np.array(value) for key,value in dict(features).items()} \n",
+ " \n",
+ " # Construct a dataset, and configure batching/repeating.\n",
+ " ds = Dataset.from_tensor_slices((features,targets)) # warning: 2GB limit\n",
+ " ds = ds.batch(batch_size).repeat(num_epochs)\n",
+ " \n",
+ " # Shuffle the data, if specified.\n",
+ " if shuffle:\n",
+ " ds = ds.shuffle(buffer_size=10000)\n",
+ " \n",
+ " # Return the next batch of data.\n",
+ " features, labels = ds.make_one_shot_iterator().get_next()\n",
+ " return features, labels"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "wwa6UeA1V5F_",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "**NOTE:** We'll continue to use this same input function in later exercises. For more\n",
+ "detailed documentation of input functions and the `Dataset` API, see the [TensorFlow Programmer's Guide](https://www.tensorflow.org/programmers_guide/datasets)."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "4YS50CQb2ooO",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "### Step 5: Train the Model"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "yP92XkzhU803",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "We can now call `train()` on our `linear_regressor` to train the model. We'll wrap `my_input_fn` in a `lambda`\n",
+ "so we can pass in `my_feature` and `target` as arguments (see this [TensorFlow input function tutorial](https://www.tensorflow.org/get_started/input_fn#passing_input_fn_data_to_your_model) for more details), and to start, we'll\n",
+ "train for 100 steps."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "5M-Kt6w8U803",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "_ = linear_regressor.train(\n",
+ " input_fn = lambda:my_input_fn(my_feature, targets),\n",
+ " steps=100\n",
+ ")"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "7Nwxqxlx2sOv",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "### Step 6: Evaluate the Model"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "KoDaF2dlJQG5",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "Let's make predictions on that training data, to see how well our model fit it during training.\n",
+ "\n",
+ "**NOTE:** Training error measures how well your model fits the training data, but it **_does not_** measure how well your model **_generalizes to new data_**. In later exercises, you'll explore how to split your data to evaluate your model's ability to generalize.\n"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "pDIxp6vcU809",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 52
+ },
+ "outputId": "89194691-5a67-44c2-b693-7ba9fe7589a4"
+ },
+ "cell_type": "code",
+ "source": [
+ "# Create an input function for predictions.\n",
+ "# Note: Since we're making just one prediction for each example, we don't \n",
+ "# need to repeat or shuffle the data here.\n",
+ "prediction_input_fn =lambda: my_input_fn(my_feature, targets, num_epochs=1, shuffle=False)\n",
+ "\n",
+ "# Call predict() on the linear_regressor to make predictions.\n",
+ "predictions = linear_regressor.predict(input_fn=prediction_input_fn)\n",
+ "\n",
+ "# Format predictions as a NumPy array, so we can calculate error metrics.\n",
+ "predictions = np.array([item['predictions'][0] for item in predictions])\n",
+ "\n",
+ "# Print Mean Squared Error and Root Mean Squared Error.\n",
+ "mean_squared_error = metrics.mean_squared_error(predictions, targets)\n",
+ "root_mean_squared_error = math.sqrt(mean_squared_error)\n",
+ "print(\"Mean Squared Error (on training data): %0.3f\" % mean_squared_error)\n",
+ "print(\"Root Mean Squared Error (on training data): %0.3f\" % root_mean_squared_error)"
+ ],
+ "execution_count": 11,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "Mean Squared Error (on training data): 56367.025\n",
+ "Root Mean Squared Error (on training data): 237.417\n"
+ ],
+ "name": "stdout"
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "AKWstXXPzOVz",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "Is this a good model? How would you judge how large this error is?\n",
+ "\n",
+ "Mean Squared Error (MSE) can be hard to interpret, so we often look at Root Mean Squared Error (RMSE)\n",
+ "instead. A nice property of RMSE is that it can be interpreted on the same scale as the original targets.\n",
+ "\n",
+ "Let's compare the RMSE to the difference of the min and max of our targets:"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "7UwqGbbxP53O",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 87
+ },
+ "outputId": "e6d0eed7-7299-4fc4-94b8-a33a2e999217"
+ },
+ "cell_type": "code",
+ "source": [
+ "min_house_value = california_housing_dataframe[\"median_house_value\"].min()\n",
+ "max_house_value = california_housing_dataframe[\"median_house_value\"].max()\n",
+ "min_max_difference = max_house_value - min_house_value\n",
+ "\n",
+ "print(\"Min. Median House Value: %0.3f\" % min_house_value)\n",
+ "print(\"Max. Median House Value: %0.3f\" % max_house_value)\n",
+ "print(\"Difference between Min. and Max.: %0.3f\" % min_max_difference)\n",
+ "print(\"Root Mean Squared Error: %0.3f\" % root_mean_squared_error)"
+ ],
+ "execution_count": 12,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "Min. Median House Value: 14.999\n",
+ "Max. Median House Value: 500.001\n",
+ "Difference between Min. and Max.: 485.002\n",
+ "Root Mean Squared Error: 237.417\n"
+ ],
+ "name": "stdout"
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "JigJr0C7Pzit",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "Our error spans nearly half the range of the target values. Can we do better?\n",
+ "\n",
+ "This is the question that nags at every model developer. Let's develop some basic strategies to reduce model error.\n",
+ "\n",
+ "The first thing we can do is take a look at how well our predictions match our targets, in terms of overall summary statistics."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "941nclxbzqGH",
+ "colab_type": "code",
+ "cellView": "both",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 294
+ },
+ "outputId": "3d87d750-bada-4ae8-ea6e-024847c871e8"
+ },
+ "cell_type": "code",
+ "source": [
+ "calibration_data = pd.DataFrame()\n",
+ "calibration_data[\"predictions\"] = pd.Series(predictions)\n",
+ "calibration_data[\"targets\"] = pd.Series(targets)\n",
+ "calibration_data.describe()"
+ ],
+ "execution_count": 13,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ "
predictions
\n",
+ "
targets
\n",
+ "
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
count
\n",
+ "
17000.0
\n",
+ "
17000.0
\n",
+ "
\n",
+ "
\n",
+ "
mean
\n",
+ "
0.1
\n",
+ "
207.3
\n",
+ "
\n",
+ "
\n",
+ "
std
\n",
+ "
0.1
\n",
+ "
116.0
\n",
+ "
\n",
+ "
\n",
+ "
min
\n",
+ "
0.0
\n",
+ "
15.0
\n",
+ "
\n",
+ "
\n",
+ "
25%
\n",
+ "
0.1
\n",
+ "
119.4
\n",
+ "
\n",
+ "
\n",
+ "
50%
\n",
+ "
0.1
\n",
+ "
180.4
\n",
+ "
\n",
+ "
\n",
+ "
75%
\n",
+ "
0.2
\n",
+ "
265.0
\n",
+ "
\n",
+ "
\n",
+ "
max
\n",
+ "
1.9
\n",
+ "
500.0
\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " predictions targets\n",
+ "count 17000.0 17000.0\n",
+ "mean 0.1 207.3\n",
+ "std 0.1 116.0\n",
+ "min 0.0 15.0\n",
+ "25% 0.1 119.4\n",
+ "50% 0.1 180.4\n",
+ "75% 0.2 265.0\n",
+ "max 1.9 500.0"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 13
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "E2-bf8Hq36y8",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "Okay, maybe this information is helpful. How does the mean value compare to the model's RMSE? How about the various quantiles?\n",
+ "\n",
+ "We can also visualize the data and the line we've learned. Recall that linear regression on a single feature can be drawn as a line mapping input *x* to output *y*.\n",
+ "\n",
+ "First, we'll get a uniform random sample of the data so we can make a readable scatter plot."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "SGRIi3mAU81H",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "sample = california_housing_dataframe.sample(n=300)"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "N-JwuJBKU81J",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "Next, we'll plot the line we've learned, drawing from the model's bias term and feature weight, together with the scatter plot. The line will show up red."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "7G12E76-339G",
+ "colab_type": "code",
+ "cellView": "both",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 361
+ },
+ "outputId": "ec51b770-665b-4f37-c673-2fa7d5979fdf"
+ },
+ "cell_type": "code",
+ "source": [
+ "# Get the min and max total_rooms values.\n",
+ "x_0 = sample[\"total_rooms\"].min()\n",
+ "x_1 = sample[\"total_rooms\"].max()\n",
+ "\n",
+ "# Retrieve the final weight and bias generated during training.\n",
+ "weight = linear_regressor.get_variable_value('linear/linear_model/total_rooms/weights')[0]\n",
+ "bias = linear_regressor.get_variable_value('linear/linear_model/bias_weights')\n",
+ "\n",
+ "# Get the predicted median_house_values for the min and max total_rooms values.\n",
+ "y_0 = weight * x_0 + bias \n",
+ "y_1 = weight * x_1 + bias\n",
+ "\n",
+ "# Plot our regression line from (x_0, y_0) to (x_1, y_1).\n",
+ "plt.plot([x_0, x_1], [y_0, y_1], c='r')\n",
+ "\n",
+ "# Label the graph axes.\n",
+ "plt.ylabel(\"median_house_value\")\n",
+ "plt.xlabel(\"total_rooms\")\n",
+ "\n",
+ "# Plot a scatter plot from our data sample.\n",
+ "plt.scatter(sample[\"total_rooms\"], sample[\"median_house_value\"])\n",
+ "\n",
+ "# Display graph.\n",
+ "plt.show()"
+ ],
+ "execution_count": 15,
+ "outputs": [
+ {
+ "output_type": "display_data",
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ }
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "t0lRt4USU81L",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "This initial line looks way off. See if you can look back at the summary stats and see the same information encoded there.\n",
+ "\n",
+ "Together, these initial sanity checks suggest we may be able to find a much better line."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "AZWF67uv0HTG",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "## Tweak the Model Hyperparameters\n",
+ "For this exercise, we've put all the above code in a single function for convenience. You can call the function with different parameters to see the effect.\n",
+ "\n",
+ "In this function, we'll proceed in 10 evenly divided periods so that we can observe the model improvement at each period.\n",
+ "\n",
+ "For each period, we'll compute and graph training loss. This may help you judge when a model is converged, or if it needs more iterations.\n",
+ "\n",
+ "We'll also plot the feature weight and bias term values learned by the model over time. This is another way to see how things converge."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "wgSMeD5UU81N",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "def train_model(learning_rate, steps, batch_size, input_feature=\"total_rooms\"):\n",
+ " \"\"\"Trains a linear regression model of one feature.\n",
+ " \n",
+ " Args:\n",
+ " learning_rate: A `float`, the learning rate.\n",
+ " steps: A non-zero `int`, the total number of training steps. A training step\n",
+ " consists of a forward and backward pass using a single batch.\n",
+ " batch_size: A non-zero `int`, the batch size.\n",
+ " input_feature: A `string` specifying a column from `california_housing_dataframe`\n",
+ " to use as input feature.\n",
+ " \"\"\"\n",
+ " \n",
+ " periods = 10\n",
+ " steps_per_period = steps / periods\n",
+ "\n",
+ " my_feature = input_feature\n",
+ " my_feature_data = california_housing_dataframe[[my_feature]]\n",
+ " my_label = \"median_house_value\"\n",
+ " targets = california_housing_dataframe[my_label]\n",
+ "\n",
+ " # Create feature columns.\n",
+ " feature_columns = [tf.feature_column.numeric_column(my_feature)]\n",
+ " \n",
+ " # Create input functions.\n",
+ " training_input_fn = lambda:my_input_fn(my_feature_data, targets, batch_size=batch_size)\n",
+ " prediction_input_fn = lambda: my_input_fn(my_feature_data, targets, num_epochs=1, shuffle=False)\n",
+ " \n",
+ " # Create a linear regressor object.\n",
+ " my_optimizer = tf.train.GradientDescentOptimizer(learning_rate=learning_rate)\n",
+ " my_optimizer = tf.contrib.estimator.clip_gradients_by_norm(my_optimizer, 5.0)\n",
+ " linear_regressor = tf.estimator.LinearRegressor(\n",
+ " feature_columns=feature_columns,\n",
+ " optimizer=my_optimizer\n",
+ " )\n",
+ "\n",
+ " # Set up to plot the state of our model's line each period.\n",
+ " plt.figure(figsize=(15, 6))\n",
+ " plt.subplot(1, 2, 1)\n",
+ " plt.title(\"Learned Line by Period\")\n",
+ " plt.ylabel(my_label)\n",
+ " plt.xlabel(my_feature)\n",
+ " sample = california_housing_dataframe.sample(n=300)\n",
+ " plt.scatter(sample[my_feature], sample[my_label])\n",
+ " colors = [cm.coolwarm(x) for x in np.linspace(-1, 1, periods)]\n",
+ "\n",
+ " # Train the model, but do so inside a loop so that we can periodically assess\n",
+ " # loss metrics.\n",
+ " print(\"Training model...\")\n",
+ " print(\"RMSE (on training data):\")\n",
+ " root_mean_squared_errors = []\n",
+ " for period in range (0, periods):\n",
+ " # Train the model, starting from the prior state.\n",
+ " linear_regressor.train(\n",
+ " input_fn=training_input_fn,\n",
+ " steps=steps_per_period\n",
+ " )\n",
+ " # Take a break and compute predictions.\n",
+ " predictions = linear_regressor.predict(input_fn=prediction_input_fn)\n",
+ " predictions = np.array([item['predictions'][0] for item in predictions])\n",
+ " \n",
+ " # Compute loss.\n",
+ " root_mean_squared_error = math.sqrt(\n",
+ " metrics.mean_squared_error(predictions, targets))\n",
+ " # Occasionally print the current loss.\n",
+ " print(\" period %02d : %0.2f\" % (period, root_mean_squared_error))\n",
+ " # Add the loss metrics from this period to our list.\n",
+ " root_mean_squared_errors.append(root_mean_squared_error)\n",
+ " # Finally, track the weights and biases over time.\n",
+ " # Apply some math to ensure that the data and line are plotted neatly.\n",
+ " y_extents = np.array([0, sample[my_label].max()])\n",
+ " \n",
+ " weight = linear_regressor.get_variable_value('linear/linear_model/%s/weights' % input_feature)[0]\n",
+ " bias = linear_regressor.get_variable_value('linear/linear_model/bias_weights')\n",
+ "\n",
+ " x_extents = (y_extents - bias) / weight\n",
+ " x_extents = np.maximum(np.minimum(x_extents,\n",
+ " sample[my_feature].max()),\n",
+ " sample[my_feature].min())\n",
+ " y_extents = weight * x_extents + bias\n",
+ " plt.plot(x_extents, y_extents, color=colors[period]) \n",
+ " print(\"Model training finished.\")\n",
+ "\n",
+ " # Output a graph of loss metrics over periods.\n",
+ " plt.subplot(1, 2, 2)\n",
+ " plt.ylabel('RMSE')\n",
+ " plt.xlabel('Periods')\n",
+ " plt.title(\"Root Mean Squared Error vs. Periods\")\n",
+ " plt.tight_layout()\n",
+ " plt.plot(root_mean_squared_errors)\n",
+ "\n",
+ " # Output a table with calibration data.\n",
+ " calibration_data = pd.DataFrame()\n",
+ " calibration_data[\"predictions\"] = pd.Series(predictions)\n",
+ " calibration_data[\"targets\"] = pd.Series(targets)\n",
+ " display.display(calibration_data.describe())\n",
+ "\n",
+ " print(\"Final RMSE (on training data): %0.2f\" % root_mean_squared_error)"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "kg8A4ArBU81Q",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "## Task 1: Achieve an RMSE of 180 or Below\n",
+ "\n",
+ "Tweak the model hyperparameters to improve loss and better match the target distribution.\n",
+ "If, after 5 minutes or so, you're having trouble beating a RMSE of 180, check the solution for a possible combination."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "UzoZUSdLIolF",
+ "colab_type": "code",
+ "cellView": "both",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "train_model(\n",
+ " learning_rate=0.00001,\n",
+ " steps=100,\n",
+ " batch_size=1\n",
+ ")"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "ajVM7rkoYXeL",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "### Solution\n",
+ "\n",
+ "Click below for one possible solution."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "T3zmldDwYy5c",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 957
+ },
+ "outputId": "9f0813e1-930d-4fca-975a-479c7abc7ecd"
+ },
+ "cell_type": "code",
+ "source": [
+ "train_model(\n",
+ " learning_rate=0.00002,\n",
+ " steps=500,\n",
+ " batch_size=5\n",
+ ")"
+ ],
+ "execution_count": 19,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "Training model...\n",
+ "RMSE (on training data):\n",
+ " period 00 : 225.63\n",
+ " period 01 : 214.42\n",
+ " period 02 : 204.04\n",
+ " period 03 : 194.97\n",
+ " period 04 : 186.60\n",
+ " period 05 : 180.53\n",
+ " period 06 : 175.00\n",
+ " period 07 : 172.26\n",
+ " period 08 : 169.21\n",
+ " period 09 : 167.45\n",
+ "Model training finished.\n"
+ ],
+ "name": "stdout"
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ " predictions targets\n",
+ "count 17000.0 17000.0\n",
+ "mean 115.8 207.3\n",
+ "std 95.5 116.0\n",
+ "min 0.1 15.0\n",
+ "25% 64.0 119.4\n",
+ "50% 93.2 180.4\n",
+ "75% 138.0 265.0\n",
+ "max 1661.6 500.0"
+ ],
+ "text/html": [
+ "
"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ }
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "kMQD0Uq3RqTX",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "The calibration data shows most scatter points aligned to a line. The line is almost vertical, but we'll come back to that later. Right now let's focus on the ones that deviate from the line. We notice that they are relatively few in number.\n",
+ "\n",
+ "If we plot a histogram of `rooms_per_person`, we find that we have a few outliers in our input data:"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "POTM8C_ER1Oc",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 347
+ },
+ "outputId": "344c1c9e-6a9e-4fb3-b069-2547ed7a9a12"
+ },
+ "cell_type": "code",
+ "source": [
+ "plt.subplot(1, 2, 2)\n",
+ "_ = california_housing_dataframe[\"rooms_per_person\"].hist()"
+ ],
+ "execution_count": 12,
+ "outputs": [
+ {
+ "output_type": "display_data",
+ "data": {
+ "image/png": "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\nVcX69eu5dOkS6enpeL3eW7NCEYmwjE/nAfo2MJ1bMrfbwVLf4Zj8vl1rH43J68wU025jJ2PaXsT0\nll5EZi8FL2IQBS9iEAUvYhAFL2IQBS9iEAUvYhAFL2IQBS9iEAUvYhAFL2IQBS9iEAUvYhAFL2IQ\nBS9iEAUvYhAFL2IQBS9iEAUvYhAFL2IQBS9iEAUvYhAFL2IQBS9iEAUvYpBpBX/mzBmWLFnC3r17\nAfj00095+umnKSsr4+mnn44c9dzc3Mzy5cspKiri0KFDAITDYXw+HyUlJZSVldHd3Q3A6dOnKS4u\npri4mA0bNtyKtYnIVaYMfnh4mE2bNpGTkxMZ27p1KytWrGDv3r0UFBTwhz/8geHhYerr69m9ezd7\n9uyhoaGBgYEBjhw5gtPpZP/+/VRUVFBXVwdAdXU1VVVVHDhwgPPnz3Ps2LFbt0oRAaYRvM1mY8eO\nHROOc96wYQOPPfYYAElJSQwMDNDZ2UlqaioOhwO73U5mZiaBQAC/309BQQEAXq+XQCDA2NgYPT09\npKWlAZCfn4/f778V6xORK0wZvNVqxW63TxhLTEwkPj6eixcvsm/fPpYuXUooFMLlckWucblcBIPB\nCeNxcXFYLBZCoRBOpzNybXJycuSxQERunSmPi76eixcvsnr1ah566CFycnL485//POH71zuU9lrj\n0znANikpEas1PrrJRmGyEzhni7mwhljRXlwWdfC/+MUvWLBgAc899xwAHo+HUCgU+X5fXx8ZGRl4\nPB6CwSApKSmEw2HGx8dxu90MDAxEru3t7Z3wyHAt/f3DU84pln/U2X68sGlHJE/GtL2I+XHRzc3N\nJCQk8Pzzz0fG0tPT6erqYnBwkKGhIQKBAFlZWeTm5tLS0gJAe3s72dnZJCQksHDhQk6ePAlAW1sb\neXl50UxFRG7AlO/wp06dora2lp6eHqxWK62trfz73//ma1/7GitXrgTgvvvuY+PGjfh8PsrLy7FY\nLFRWVuJwOCgsLKSjo4OSkhJsNhs1NTUAVFVVsX79ei5dukR6ejper/fWrlREsIxP5wH6NjCdWzK3\n28FS3+GY/L5dax+NyevMFNNuYydj2l7E/JZeRGYnBS9iEAUvYhAFL2IQBS9iEAUvYhAFL2IQBS9i\nEAUvYhAFL2IQBS9iEAUvYhAFL2IQBS9iEAUvYhAFL2IQBS9iEAUvYhAFL2IQBS9iEAUvYhAFL2IQ\nBS9iEAUvYhAFL2KQaQV/5swZlixZwt69ewH49NNPWblyJaWlpbzwwguMjY0Bl8+cW758OUVFRRw6\ndAiAcDiMz+ejpKSEsrIyuru7ATh9+jTFxcUUFxezYcOGW7E2EbnKlMEPDw+zadMmcnJyImPbtm2j\ntLSUffv2sWDBApqamhgeHqa+vp7du3ezZ88eGhoaGBgY4MiRIzidTvbv309FRQV1dXUAVFdXU1VV\nxYEDBzh//jzHjh27dasUEWAawdtsNnbs2DHhOOcTJ06wePFiAPLz8/H7/XR2dpKamorD4cBut5OZ\nmUkgEMDv91NQUACA1+slEAgwNjZGT08PaWlpE15DRG6tKU+PtVqtWK0TLxsZGcFmswGQnJxMMBgk\nFArhcrki17hcri+Nx8XFYbFYCIVCOJ3OyLX/eY3JJCUlYrXGT39lNymWZ83PlLmwhljRXlw2ZfBT\nud7hszcyPp0DbPv7h6e8JpZ/1Nl+2qhpJ6ZOxrS9iPnpsYmJiYyOjgLQ29uLx+PB4/EQCoUi1/T1\n9UXG//PuHQ6HGR8fx+12MzAwELn2P68hIrdWVMF7vV5aW1sBaGtrIy8vj/T0dLq6uhgcHGRoaIhA\nIEBWVha5ubm0tLQA0N7eTnZ2NgkJCSxcuJCTJ09OeA0RubWmvKU/deoUtbW19PT0YLVaaW1t5dVX\nX2Xt2rU0NjYyf/58li1bRkJCAj6fj/LyciwWC5WVlTgcDgoLC+no6KCkpASbzUZNTQ0AVVVVrF+/\nnkuXLpGeno7X673lixUxnWV8Og/Qt4HpPIO53Q6W+g7H5PftWvtoTF5nppj23DoZ0/Yi5s/wIjI7\nKXgRgyh4EYMoeBGDKHgRgyh4EYMoeBGDKHgRgyh4EYMoeBGDKHgRgyh4EYMoeBGDKHgRgyh4EYMo\neBGDKHgRgyh4EYMoeBGDKHgRgyh4EYMoeBGDKHgRgyh4EYNEdZjk0NAQa9as4fPPPyccDlNZWYnb\n7Wbjxo0A3H///fzqV78CYOfOnbS0tGCxWHjuuef43ve+x7lz5/D5fJw7d47ExETq6uqYN29ezBYl\nItcWVfB/+tOfuPfee/H5fPT29vLUU0/hdrupqqoiLS0Nn8/HsWPHWLhwIe+88w4HDhzg/PnzlJaW\nsmjRIhoaGvjud7/LT3/6UxobG9mxYwcvvfRSrNcmIleJ6pY+KSkpcvrr4OAg8+bNo6enh7S0NADy\n8/Px+/2cOHGCvLw8bDYbLpeLb3zjG3z00Uf4/X4KCgomXCsit15Uwf/gBz/g7NmzFBQUUFZWxurV\nq3E6nZHvJycnEwwGCYVCuFyuyLjL5frSeHJyMn19fTe5DBGZjqhu6Q8fPsz8+fP5/e9/z+nTpyMn\nxf7H9c6nvNb4dM+yTEpKxGqNj2a6UZnsQL7ZYi6sIVa0F5dFFXwgEGDRokUApKSk8MUXX3DhwoXI\n93t7e/F4PHg8Hj755JNrjgeDQRwOR2RsKv39w1NeE8s/6mw/bdS0E1MnY9pexPz02AULFtDZ2QlA\nT08Pd9xxB/fddx8nT54EoK2tjby8PB566CGOHj3K2NgYvb299PX18a1vfYvc3FxaWlomXCsit15U\n7/BPPvkkVVVVlJWVceHCBTZu3Ijb7Wb9+vVcunSJ9PR0vF4vACtWrKCsrAyLxcLGjRuJi4tj5cqV\nvPTSS5SWluJ0OtmyZUtMFyUi12YZn+5D9Aybzi2Z2+1gqe9wTH7frrWPxuR1Zoppt7GTMW0vYn5L\nLyKzk4IXMYiCFzGIghcxiIIXMYiCFzGIghcxiIIXMYiCFzGIghcxiIIXMYiCFzGIghcxiIIXMYiC\nFzGIghcxiIIXMYiCFzGIghcxiIIXMYiCFzGIghcxiIIXMYiCFzGIghcxSFRHTQE0Nzezc+dOrFYr\nzz//PPfffz+rV6/m4sWLuN1utmzZgs1mo7m5mYaGBuLi4lixYgVFRUWEw2HWrl3L2bNniY+P55VX\nXuGee+6J5bpE5Bqieofv7++nvr6effv2sX37dv7yl7+wbds2SktL2bdvHwsWLKCpqYnh4WHq6+vZ\nvXs3e/bsoaGhgYGBAY4cOYLT6WT//v1UVFRQV1cX63WJyDVEFbzf7ycnJ4c777wTj8fDpk2bOHHi\nBIsXLwYgPz8fv99PZ2cnqampOBwO7HY7mZmZBAIB/H4/BQUFAHi9XgKBQOxWJCLXFdUt/b/+9S9G\nR0epqKhgcHCQVatWMTIygs1mAyA5OZlgMEgoFMLlckV+zuVyfWk8Li4Oi8XC2NhY5OdF5NaI+hl+\nYGCA3/zmN5w9e5af/OQnXHkI7fUOpL3R8SslJSVitcZHN9koTHYC52wxF9YQK9qLy6IKPjk5me98\n5ztYrVa++c1vcscddxAfH8/o6Ch2u53e3l48Hg8ej4dQKBT5ub6+PjIyMvB4PASDQVJSUgiHw4yP\nj0/57t7fPzzlvGL5R53txwubdkTyZEzbi5gfF71o0SLee+89Ll26RH9/P8PDw3i9XlpbWwFoa2sj\nLy+P9PR0urq6GBwcZGhoiEAgQFZWFrm5ubS0tADQ3t5OdnZ2NNMQkRsU1Tv83XffzWOPPcaKFSsA\nWLduHampqaxZs4bGxkbmz5/PsmXLSEhIwOfzUV5ejsViobKyEofDQWFhIR0dHZSUlGCz2aipqYnp\nokTk2izj03mAvg1M55bM7Xaw1Hc4Jr9v19pHY/I6M8W029jJmLYXMb+lF5HZScGLGETBixhEwYsY\nRMGLGETBixhEwYsYRMGLGETBixhEwYsYRMGLGETBixhEwYsYRMGLGETBixhEwYsYRMGLGETBixhE\nwYsYRMGLGETBixhEwYsYRMGLGETBixhEwYsY5KaCHx0dZcmSJfzxj3/k008/ZeXKlZSWlvLCCy8w\nNjYGQHNzM8uXL6eoqIhDhw4BEA6H8fl8lJSUUFZWRnd3982vRESmdFPBv/HGG9x1110AbNu2jdLS\nUvbt28eCBQtoampieHiY+vp6du/ezZ49e2hoaGBgYIAjR47gdDrZv38/FRUV1NXVxWQxIjK5qIP/\n+OOP+eijj3jkkUcAOHHiBIsXLwYgPz8fv99PZ2cnqampOBwO7HY7mZmZBAIB/H4/BQUFAHi9XgKB\nwM2vRESmFNXpsQC1tbX88pe/5O233wZgZGQkcsZ7cnIywWCQUCiEy+WK/IzL5frSeFxcHBaLhbGx\nsUnPiE9KSsRqjY92ujcslmfNz5S5sIZY0V5cFlXwb7/9NhkZGdxzzz3X/P71DqS90fEr9fcPT3lN\nLP+os/20UdNOTJ2MaXsxWQdRBX/06FG6u7s5evQon332GTabjcTEREZHR7Hb7fT29uLxePB4PIRC\nocjP9fX1kZGRgcfjIRgMkpKSQjgcZnx8fNJ3dxGJjaie4bdu3cpbb73FwYMHKSoq4tlnn8Xr9dLa\n2gpAW1sbeXl5pKen09XVxeDgIENDQwQCAbKyssjNzaWlpQWA9vZ2srOzY7ciEbmuqJ/hr7Zq1SrW\nrFlDY2Mj8+fPZ9myZSQkJODz+SgvL8disVBZWYnD4aCwsJCOjg5KSkqw2WzU1NTEahoiMgnL+HQe\noG8D03kGc7sdLPUdjsnv27X20Zi8zkwx7bl1MqbtxWTP8PqknYhBFLyIQRS8iEEUvIhBFLyIQRS8\niEEUvIhBFLyIQRS8iEEUvIhBFLyIQRS8iEEUvIhBFLyIQRS8iEEUvIhBFLyIQRS8iEEUvIhBFLyI\nQRS8iEEUvIhBFLyIQRS8iEGiPnlm8+bNvP/++1y4cIFnnnmG1NRUVq9ezcWLF3G73WzZsgWbzUZz\nczMNDQ3ExcWxYsUKioqKCIfDrF27lrNnzxIfH88rr7xy3YMpRSR2ogr+vffe48MPP6SxsZH+/n5+\n/OMfk5OTQ2lpKY8//ji//vWvaWpqYtmyZdTX19PU1ERCQgJPPPEEBQUFtLe343Q6qaur429/+xt1\ndXVs3bo11msTkatEdUv/4IMP8tprrwHgdDoZGRnhxIkTLF68GID8/Hz8fj+dnZ2kpqbicDiw2+1k\nZmYSCATw+/0UFBQA4PV6CQQCMVqOiEwmquDj4+NJTEwEoKmpiYcffpiRkZHIkc/JyckEg0FCoRAu\nlyvycy6X60vjcXFxWCwWxsbGbnYtIjKFmzo99t1336WpqYldu3bx/e9/PzJ+vfMpb3T8SklJiVit\n8dFNNAqTHcg3W8yFNcSK9uKyqIM/fvw427dvZ+fOnTgcDhITExkdHcVut9Pb24vH48Hj8RAKhSI/\n09fXR0ZGBh6Ph2AwSEpKCuFwmPHx8cjdwfX09w9POadY/lFn+2mjpp2YOhnT9iLmp8eeO3eOzZs3\n8+abbzJv3jzg8rN4a2srAG1tbeTl5ZGenk5XVxeDg4MMDQ0RCATIysoiNzeXlpYWANrb28nOzo5m\nGiJyg6J6h3/nnXfo7+/nxRdfjIzV1NSwbt06GhsbmT9/PsuWLSMhIQGfz0d5eTkWi4XKykocDgeF\nhYV0dHRQUlKCzWajpqYmZgsSkeuzjE/nAfo2MJ1bMrfbwVLf4Zj8vl1rH43J68wU025jJ2PaXsT8\nll5EZicFL2IQBS9iEAUvYhAFL2IQBS9iEAUvYhAFL2IQBS9iEAUvYhAFL2IQBS9iEAUvYhAFL2IQ\nBS9iEAUvYhAFL2IQBS9iEAUvYhAFL2IQBS9iEAUvYhAFL2IQBS9iEAUvYpCbOj32Zr388st0dnZi\nsVioqqoiLS1tJqcjMufNWPB///vf+ec//0ljYyMff/wxVVVVNDY2ztR0RIwwY7f0fr+fJUuWAHDf\nfffx+eefc/78+ZmajogRZuwdPhQK8cADD0S+drlcBINB7rzzzpma0gT/W/N/Mz2FL5ntB1zKzJvR\nZ/grTXWI7WQnYl7pz3X/E4vpzAnT3TMTaC8um7Fbeo/HQygUinzd19eH2+2eqemIGGHGgs/NzaW1\ntRWADz74AI/Hc9vczovMVTN2S5+ZmckDDzxAcXExFouFDRs2zNRURIxhGZ/q4VlE5gx90k7EIApe\nxCC3zb+Wu1mmf0x38+bNvP/++1y4cIFnnnmG1NRUVq9ezcWLF3G73WzZsgWbzTbT0/zKjI6O8sMf\n/pBnn32WnJwco/fiSnPiHf7Kj+lWV1dTXV0901P6Sr333nt8+OGHNDY2snPnTl5++WW2bdtGaWkp\n+/btY8GCBTQ1Nc30NL9Sb7zxBnfddReA8XtxpTkRvOkf033wwQd57bXXAHA6nYyMjHDixAkWL14M\nQH5+Pn6/fyan+JX6+OOP+eijj3jkkUcAjN6Lq82J4EOhEElJSZGv//MxXVPEx8eTmJgIQFNTEw8/\n/DAjIyOR29bk5GSj9qO2tpa1a9dGvjZ5L642J4K/mqn/pvHdd9+lqamJ9evXTxg3aT/efvttMjIy\nuOeee675fZP24lrmxD+008d04fjx42zfvp2dO3ficDhITExkdHQUu91Ob28vHo9npqf4lTh69Cjd\n3d0cPXqUzz77DJvNZuxeXMuceIc3/WO6586dY/Pmzbz55pvMmzcPAK/XG9mTtrY28vLyZnKKX5mt\nW7fy1ltvcfDgQYqKinj22WeN3YtrmRPv8KZ/TPedd96hv7+fF198MTJWU1PDunXraGxsZP78+Sxb\ntmwGZzizVq1axZo1a7QX6KO1IkaZE7f0IjI9Cl7EIApexCAKXsQgCl7EIApexCAKXsQgCl7EIP8P\nfIzt3Nflkr4AAAAASUVORK5CYII=\n",
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ }
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "9l0KYpBQu8ed",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "## Task 3: Clip Outliers\n",
+ "\n",
+ "See if you can further improve the model fit by setting the outlier values of `rooms_per_person` to some reasonable minimum or maximum.\n",
+ "\n",
+ "For reference, here's a quick example of how to apply a function to a Pandas `Series`:\n",
+ "\n",
+ " clipped_feature = my_dataframe[\"my_feature_name\"].apply(lambda x: max(x, 0))\n",
+ "\n",
+ "The above `clipped_feature` will have no values less than `0`."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "rGxjRoYlHbHC",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 347
+ },
+ "outputId": "4f3db186-0a2d-4f47-fcb3-809bc90e38d9"
+ },
+ "cell_type": "code",
+ "source": [
+ "# YOUR CODE HERE\n",
+ "california_housing_dataframe[\"rooms_per_person\"] = (\n",
+ " california_housing_dataframe[\"rooms_per_person\"]).apply(lambda x: min(x, 5))\n",
+ "\n",
+ "_ = california_housing_dataframe[\"rooms_per_person\"].hist()"
+ ],
+ "execution_count": 13,
+ "outputs": [
+ {
+ "output_type": "display_data",
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ "
"
+ ],
+ "text/plain": [
+ " median_house_value\n",
+ "count 5000.0\n",
+ "mean 229.5\n",
+ "std 122.5\n",
+ "min 15.0\n",
+ "25% 130.4\n",
+ "50% 213.0\n",
+ "75% 303.2\n",
+ "max 500.0"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 7
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "z3TZV1pgfZ1n",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "## Task 1: Examine the Data\n",
+ "Okay, let's look at the data above. We have `9` input features that we can use.\n",
+ "\n",
+ "Take a quick skim over the table of values. Everything look okay? See how many issues you can spot. Don't worry if you don't have a background in statistics; common sense will get you far.\n",
+ "\n",
+ "After you've had a chance to look over the data yourself, check the solution for some additional thoughts on how to verify data."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "4Xp9NhOCYSuz",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "### Solution\n",
+ "\n",
+ "Click below for the solution."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "gqeRmK57YWpy",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "Let's check our data against some baseline expectations:\n",
+ "\n",
+ "* For some values, like `median_house_value`, we can check to see if these values fall within reasonable ranges (keeping in mind this was 1990 data — not today!).\n",
+ "\n",
+ "* For other values, like `latitude` and `longitude`, we can do a quick check to see if these line up with expected values from a quick Google search.\n",
+ "\n",
+ "If you look closely, you may see some oddities:\n",
+ "\n",
+ "* `median_income` is on a scale from about 3 to 15. It's not at all clear what this scale refers to—looks like maybe some log scale? It's not documented anywhere; all we can assume is that higher values correspond to higher income.\n",
+ "\n",
+ "* The maximum `median_house_value` is 500,001. This looks like an artificial cap of some kind.\n",
+ "\n",
+ "* Our `rooms_per_person` feature is generally on a sane scale, with a 75th percentile value of about 2. But there are some very large values, like 18 or 55, which may show some amount of corruption in the data.\n",
+ "\n",
+ "We'll use these features as given for now. But hopefully these kinds of examples can help to build a little intuition about how to check data that comes to you from an unknown source."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "fXliy7FYZZRm",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "## Task 2: Plot Latitude/Longitude vs. Median House Value"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "aJIWKBdfsDjg",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "Let's take a close look at two features in particular: **`latitude`** and **`longitude`**. These are geographical coordinates of the city block in question.\n",
+ "\n",
+ "This might make a nice visualization — let's plot `latitude` and `longitude`, and use color to show the `median_house_value`."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "5_LD23bJ06TW",
+ "colab_type": "code",
+ "cellView": "both",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 499
+ },
+ "outputId": "35b9c046-72c6-4745-e060-9c642aa39534"
+ },
+ "cell_type": "code",
+ "source": [
+ "plt.figure(figsize=(13, 8))\n",
+ "\n",
+ "ax = plt.subplot(1, 2, 1)\n",
+ "ax.set_title(\"Validation Data\")\n",
+ "\n",
+ "ax.set_autoscaley_on(False)\n",
+ "ax.set_ylim([32, 43])\n",
+ "ax.set_autoscalex_on(False)\n",
+ "ax.set_xlim([-126, -112])\n",
+ "plt.scatter(validation_examples[\"longitude\"],\n",
+ " validation_examples[\"latitude\"],\n",
+ " cmap=\"coolwarm\",\n",
+ " c=validation_targets[\"median_house_value\"] / validation_targets[\"median_house_value\"].max())\n",
+ "\n",
+ "ax = plt.subplot(1,2,2)\n",
+ "ax.set_title(\"Training Data\")\n",
+ "\n",
+ "ax.set_autoscaley_on(False)\n",
+ "ax.set_ylim([32, 43])\n",
+ "ax.set_autoscalex_on(False)\n",
+ "ax.set_xlim([-126, -112])\n",
+ "plt.scatter(training_examples[\"longitude\"],\n",
+ " training_examples[\"latitude\"],\n",
+ " cmap=\"coolwarm\",\n",
+ " c=training_targets[\"median_house_value\"] / training_targets[\"median_house_value\"].max())\n",
+ "_ = plt.plot()"
+ ],
+ "execution_count": 8,
+ "outputs": [
+ {
+ "output_type": "display_data",
+ "data": {
+ "image/png": "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\nYII=\n",
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ }
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "32_DbjnfXJlC",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "Wait a second...this should have given us a nice map of the state of California, with red showing up in expensive areas like the San Francisco and Los Angeles.\n",
+ "\n",
+ "The training set sort of does, compared to a [real map](https://www.google.com/maps/place/California/@37.1870174,-123.7642688,6z/data=!3m1!4b1!4m2!3m1!1s0x808fb9fe5f285e3d:0x8b5109a227086f55), but the validation set clearly doesn't.\n",
+ "\n",
+ "**Go back up and look at the data from Task 1 again.**\n",
+ "\n",
+ "Do you see any other differences in the distributions of features or targets between the training and validation data?"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "pECTKgw5ZvFK",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "### Solution\n",
+ "\n",
+ "Click below for the solution."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "49NC4_KIZxk_",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "Looking at the tables of summary stats above, it's easy to wonder how anyone would do a useful data check. What's the right 75th percentile value for total_rooms per city block?\n",
+ "\n",
+ "The key thing to notice is that for any given feature or column, the distribution of values between the train and validation splits should be roughly equal.\n",
+ "\n",
+ "The fact that this is not the case is a real worry, and shows that we likely have a fault in the way that our train and validation split was created."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "025Ky0Dq9ig0",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "## Task 3: Return to the Data Importing and Pre-Processing Code, and See if You Spot Any Bugs\n",
+ "If you do, go ahead and fix the bug. Don't spend more than a minute or two looking. If you can't find the bug, check the solution."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "JFsd2eWHAMdy",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "When you've found and fixed the issue, re-run `latitude` / `longitude` plotting cell above and confirm that our sanity checks look better.\n",
+ "\n",
+ "By the way, there's an important lesson here.\n",
+ "\n",
+ "**Debugging in ML is often *data debugging* rather than code debugging.**\n",
+ "\n",
+ "If the data is wrong, even the most advanced ML code can't save things."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "dER2_43pWj1T",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "### Solution\n",
+ "\n",
+ "Click below for the solution."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "BnEVbYJvW2wu",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "The code that randomizes the data (`np.random.permutation`) is commented out, so we're not doing any randomization prior to splitting the data.\n",
+ "\n",
+ "If we don't randomize the data properly before creating training and validation splits, then we may be in trouble if the data is given to us in some sorted order, which appears to be the case here."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "xCdqLpQyAos2",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "## Task 4: Train and Evaluate a Model\n",
+ "\n",
+ "**Spend 5 minutes or so trying different hyperparameter settings. Try to get the best validation performance you can.**\n",
+ "\n",
+ "Next, we'll train a linear regressor using all the features in the data set, and see how well we do.\n",
+ "\n",
+ "Let's define the same input function we've used previously for loading the data into a TensorFlow model.\n"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "rzcIPGxxgG0t",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "def my_input_fn(features, targets, batch_size=1, shuffle=True, num_epochs=None):\n",
+ " \"\"\"Trains a linear regression model of multiple features.\n",
+ " \n",
+ " Args:\n",
+ " features: pandas DataFrame of features\n",
+ " targets: pandas DataFrame of targets\n",
+ " batch_size: Size of batches to be passed to the model\n",
+ " shuffle: True or False. Whether to shuffle the data.\n",
+ " num_epochs: Number of epochs for which data should be repeated. None = repeat indefinitely\n",
+ " Returns:\n",
+ " Tuple of (features, labels) for next data batch\n",
+ " \"\"\"\n",
+ " \n",
+ " # Convert pandas data into a dict of np arrays.\n",
+ " features = {key:np.array(value) for key,value in dict(features).items()} \n",
+ " \n",
+ " # Construct a dataset, and configure batching/repeating.\n",
+ " ds = Dataset.from_tensor_slices((features,targets)) # warning: 2GB limit\n",
+ " ds = ds.batch(batch_size).repeat(num_epochs)\n",
+ " \n",
+ " # Shuffle the data, if specified.\n",
+ " if shuffle:\n",
+ " ds = ds.shuffle(10000)\n",
+ " \n",
+ " # Return the next batch of data.\n",
+ " features, labels = ds.make_one_shot_iterator().get_next()\n",
+ " return features, labels"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "CvrKoBmNgRCO",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "Because we're now working with multiple input features, let's modularize our code for configuring feature columns into a separate function. (For now, this code is fairly simple, as all our features are numeric, but we'll build on this code as we use other types of features in future exercises.)"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "wEW5_XYtgZ-H",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "def construct_feature_columns(input_features):\n",
+ " \"\"\"Construct the TensorFlow Feature Columns.\n",
+ "\n",
+ " Args:\n",
+ " input_features: The names of the numerical input features to use.\n",
+ " Returns:\n",
+ " A set of feature columns\n",
+ " \"\"\" \n",
+ " return set([tf.feature_column.numeric_column(my_feature)\n",
+ " for my_feature in input_features])"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "D0o2wnnzf8BD",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "Next, go ahead and complete the `train_model()` code below to set up the input functions and calculate predictions.\n",
+ "\n",
+ "**NOTE:** It's okay to reference the code from the previous exercises, but make sure to call `predict()` on the appropriate data sets.\n",
+ "\n",
+ "Compare the losses on training data and validation data. With a single raw feature, our best root mean squared error (RMSE) was of about 180.\n",
+ "\n",
+ "See how much better you can do now that we can use multiple features.\n",
+ "\n",
+ "Check the data using some of the methods we've looked at before. These might include:\n",
+ "\n",
+ " * Comparing distributions of predictions and actual target values\n",
+ "\n",
+ " * Creating a scatter plot of predictions vs. target values\n",
+ "\n",
+ " * Creating two scatter plots of validation data using `latitude` and `longitude`:\n",
+ " * One plot mapping color to actual target `median_house_value`\n",
+ " * A second plot mapping color to predicted `median_house_value` for side-by-side comparison."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "UXt0_4ZTEf4V",
+ "colab_type": "code",
+ "cellView": "both",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 131
+ },
+ "outputId": "56c5f486-9f60-478c-8e22-a285c83e38cc"
+ },
+ "cell_type": "code",
+ "source": [
+ "def train_model(\n",
+ " learning_rate,\n",
+ " steps,\n",
+ " batch_size,\n",
+ " training_examples,\n",
+ " training_targets,\n",
+ " validation_examples,\n",
+ " validation_targets):\n",
+ " \"\"\"Trains a linear regression model of multiple features.\n",
+ " \n",
+ " In addition to training, this function also prints training progress information,\n",
+ " as well as a plot of the training and validation loss over time.\n",
+ " \n",
+ " Args:\n",
+ " learning_rate: A `float`, the learning rate.\n",
+ " steps: A non-zero `int`, the total number of training steps. A training step\n",
+ " consists of a forward and backward pass using a single batch.\n",
+ " batch_size: A non-zero `int`, the batch size.\n",
+ " training_examples: A `DataFrame` containing one or more columns from\n",
+ " `california_housing_dataframe` to use as input features for training.\n",
+ " training_targets: A `DataFrame` containing exactly one column from\n",
+ " `california_housing_dataframe` to use as target for training.\n",
+ " validation_examples: A `DataFrame` containing one or more columns from\n",
+ " `california_housing_dataframe` to use as input features for validation.\n",
+ " validation_targets: A `DataFrame` containing exactly one column from\n",
+ " `california_housing_dataframe` to use as target for validation.\n",
+ " \n",
+ " Returns:\n",
+ " A `LinearRegressor` object trained on the training data.\n",
+ " \"\"\"\n",
+ "\n",
+ " periods = 10\n",
+ " steps_per_period = steps / periods\n",
+ " \n",
+ " # Create a linear regressor object.\n",
+ " my_optimizer = tf.train.GradientDescentOptimizer(learning_rate=learning_rate)\n",
+ " my_optimizer = tf.contrib.estimator.clip_gradients_by_norm(my_optimizer, 5.0)\n",
+ " linear_regressor = tf.estimator.LinearRegressor(\n",
+ " feature_columns=construct_feature_columns(training_examples),\n",
+ " optimizer=my_optimizer\n",
+ " )\n",
+ " \n",
+ " # 1. Create input functions.\n",
+ " training_input_fn = # YOUR CODE HERE\n",
+ " predict_training_input_fn = # YOUR CODE HERE\n",
+ " predict_validation_input_fn = # YOUR CODE HERE\n",
+ " \n",
+ " # Train the model, but do so inside a loop so that we can periodically assess\n",
+ " # loss metrics.\n",
+ " print(\"Training model...\")\n",
+ " print(\"RMSE (on training data):\")\n",
+ " training_rmse = []\n",
+ " validation_rmse = []\n",
+ " for period in range (0, periods):\n",
+ " # Train the model, starting from the prior state.\n",
+ " linear_regressor.train(\n",
+ " input_fn=training_input_fn,\n",
+ " steps=steps_per_period,\n",
+ " )\n",
+ " # 2. Take a break and compute predictions.\n",
+ " training_predictions = # YOUR CODE HERE\n",
+ " validation_predictions = # YOUR CODE HERE\n",
+ " \n",
+ " # Compute training and validation loss.\n",
+ " training_root_mean_squared_error = math.sqrt(\n",
+ " metrics.mean_squared_error(training_predictions, training_targets))\n",
+ " validation_root_mean_squared_error = math.sqrt(\n",
+ " metrics.mean_squared_error(validation_predictions, validation_targets))\n",
+ " # Occasionally print the current loss.\n",
+ " print(\" period %02d : %0.2f\" % (period, training_root_mean_squared_error))\n",
+ " # Add the loss metrics from this period to our list.\n",
+ " training_rmse.append(training_root_mean_squared_error)\n",
+ " validation_rmse.append(validation_root_mean_squared_error)\n",
+ " print(\"Model training finished.\")\n",
+ "\n",
+ " # Output a graph of loss metrics over periods.\n",
+ " plt.ylabel(\"RMSE\")\n",
+ " plt.xlabel(\"Periods\")\n",
+ " plt.title(\"Root Mean Squared Error vs. Periods\")\n",
+ " plt.tight_layout()\n",
+ " plt.plot(training_rmse, label=\"training\")\n",
+ " plt.plot(validation_rmse, label=\"validation\")\n",
+ " plt.legend()\n",
+ "\n",
+ " return linear_regressor"
+ ],
+ "execution_count": 11,
+ "outputs": [
+ {
+ "output_type": "error",
+ "ename": "SyntaxError",
+ "evalue": "ignored",
+ "traceback": [
+ "\u001b[0;36m File \u001b[0;32m\"\"\u001b[0;36m, line \u001b[0;32m44\u001b[0m\n\u001b[0;31m training_input_fn = # YOUR CODE HERE\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n"
+ ]
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "zFFRmvUGh8wd",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 627
+ },
+ "outputId": "3004b22a-c334-4535-8f30-313e57efe7d1"
+ },
+ "cell_type": "code",
+ "source": [
+ "linear_regressor = train_model(\n",
+ " # TWEAK THESE VALUES TO SEE HOW MUCH YOU CAN IMPROVE THE RMSE\n",
+ " learning_rate=0.00001,\n",
+ " steps=100,\n",
+ " batch_size=1,\n",
+ " training_examples=training_examples,\n",
+ " training_targets=training_targets,\n",
+ " validation_examples=validation_examples,\n",
+ " validation_targets=validation_targets)"
+ ],
+ "execution_count": 17,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "Training model...\n",
+ "RMSE (on training data):\n",
+ " period 00 : 226.06\n",
+ " period 01 : 224.68\n",
+ " period 02 : 223.29\n",
+ " period 03 : 221.92\n",
+ " period 04 : 220.55\n",
+ " period 05 : 219.21\n",
+ " period 06 : 217.86\n",
+ " period 07 : 216.53\n",
+ " period 08 : 215.20\n",
+ " period 09 : 213.88\n",
+ "Model training finished.\n"
+ ],
+ "name": "stdout"
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjAAAAGACAYAAACz01iHAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJzs3Xl80/X9B/DXN1dzpzmbHtwoKHLb\nCaLIITf+GALVqegcc24DFWXzGro5T+rUqYDIHEPdhXaoOPFi6AQ3dFBEjnKfvZPeTVrapt/fH0m/\nybctpWDTJuX1fDx80HzyzTff9NvCy8/1FkRRFEFEREQURxRdfQFERERE54oBhoiIiOIOAwwRERHF\nHQYYIiIiijsMMERERBR3GGCIiIgo7qi6+gKIYtmAAQPQs2dPKJVKAEAgEEB6ejqWLl0KvV5/3ud9\n6623kJGR0aJ9/fr1eOihh7Bq1SqMHz9eaq+trcWVV16JyZMn45lnnjnv922vkydP4qmnnsKxY8cA\nADqdDosWLcK1114b9fc+FytXrsTJkydbfE+++uorLFiwAGlpaS1e89FHH3XW5X0nubm5mDhxIvr0\n6QMAEEURDocDv/rVr3DppZee07mee+45pKSk4Ac/+EG7X/Pee+8hKysLb7755jm9F1FnYYAhOos3\n33wTbrcbAFBXV4d7770Xr776Ku69997zOp/H48Frr73WaoABgOTkZPzzn/+UBZjPPvsMZrP5vN7v\nfPziF7/ArFmzsGrVKgDArl27cNttt+HDDz9EcnJyp13Hd5GcnBw3YeVMlEql7DNs3LgRCxcuxMcf\nfwyNRtPu8yxZsiQal0fUpTiERHQONBoNrr76auTk5AAATp8+jUcffRRTpkzBtGnT8MwzzyAQCAAA\n9u/fjxtvvBFTp07FrFmzsGXLFgDAjTfeiPz8fEydOhV1dXUt3mPEiBH46quvUFNTI7Vt3LgRY8aM\nkR7X1dXhiSeewJQpUzBhwgQpaADAzp07cf3112Pq1KmYPn06/vOf/wAI/h/9VVddhTfeeAPXXXcd\nrr76amzcuLHVz3nw4EEMHTpUejx06FB8/PHHUpBbvnw5rrnmGnz/+9/H6tWrMWHCBADAgw8+iJUr\nV0qvi3x8tut66qmncMsttwAAduzYgTlz5mDSpEnIyMjAqVOnAAR7ohYvXozx48fjlltuQWFh4Vnu\nWOvWr1+PRYsW4bbbbkNmZia++uor3Hjjjbjnnnukf+w//PBDzJw5E1OnTsWtt96KkydPAgBefvll\nLF26FHPnzsXatWtl573nnnuwZs0a6XFOTg6uuuoqNDY24oUXXsCUKVMwZcoU3HrrrSgqKjrn654+\nfTpqa2tx9OhRAMC6deswdepUTJgwAffddx9qa2sBBL/vTz/9NK677jp8+OGHsvtwpp/LxsZG/Pa3\nv8W4ceMwd+5c7N+/X3rfr7/+GrNnz8b06dMxbdo0fPjhh+d87UQdTiSiM7r44ovFgoIC6XF5ebl4\n8803iytXrhRFURRfffVV8Y477hDr6+vFmpoacc6cOeK7774rBgIBcdq0aeL7778viqIofvvtt2J6\nerpYVVUlbtu2Tbz22mtbfb9//OMf4gMPPCD+4he/kF5bVVUlTpw4UXz77bfFBx54QBRFUVy+fLl4\n2223iadPnxZ9Pp/4/e9/X9y8ebMoiqI4c+ZM8Z///KcoiqL4zjvvSO916tQp8dJLLxXffPNNURRF\ncePGjeKkSZNavY677rpLHD9+vPj666+Lhw8flj134MAB8fLLLxeLi4vF+vp68Wc/+5k4fvx4URRF\n8YEHHhBXrFghHRv5uK3rGjRokLh+/Xrp86anp4tbt24VRVEU33//fXH27NmiKIrin//8Z/Hmm28W\n6+vrxdLSUnH8+PHS9yRSW9/jpu/zsGHDxGPHjknHDx48WPzPf/4jiqIo5uXliSNHjhSPHz8uiqIo\n/vGPfxRvu+02URRF8aWXXhKvuuoqsaSkpMV5P/jgA/Hmm2+WHr/44ovi448/Lh48eFCcPHmyWFdX\nJ4qiKL7xxhviO++8c8bra/q+XHLJJS3a09PTxSNHjoj/+9//xNGjR4uFhYWiKIriI488Ij7zzDOi\nKAa/79ddd51YW1srPV6xYkWbP5eff/65OHnyZLG6ulqsqakR586dK95yyy2iKIri9ddfL3711Vei\nKIrisWPHxPvuu6/NayfqDOyBITqL+fPnY+rUqZg4cSImTpyIUaNG4Y477gAAfP7558jIyIBKpYJW\nq8V1112HL7/8Erm5ufB6vZgxYwYAYPDgwUhJScHu3bvb9Z4zZszAP//5TwDApk2bMH78eCgU4V/X\nzz77DDfddBM0Gg30ej1mzZqFTz75BADw7rvvYtq0aQCAkSNHSr0XANDQ0IDrr78eADBo0CDk5+e3\n+v7PPvssbr75Zrz//vuYOXMmJkyYgL/97W8Agr0j6enpcDqdUKlUmDlzZrs+U1vXVV9fj0mTJknn\nT0pKknqcZs6ciZMnTyI/Px/bt2/HpEmToFKpYLVaZcNszRUUFGDq1Kmy/yLnyvTu3Ru9e/eWHmu1\nWowePRoA8OWXX+KKK65Ar169AADz5s3DV199hYaGBgDBHimbzdbiPceNG4d9+/ahvLwcAPDpp59i\n6tSpMJvNKC0txfvvv4+KigrMnz8f3//+99v1fWsiiiLWrVuHpKQk9O7dG5s3b8b06dORlJQEAPjB\nD34g/QwAwOjRo5GQkCA7R1s/l//73/9wzTXXwGAwQKvVSvcKAOx2O959910cOXIEvXv3xnPPPXdO\n104UDZwDQ3QWTXNgSktLpeEPlSr4q1NaWgqLxSIda7FYUFJSgtLSUphMJgiCID3X9I+Yw+E463uO\nGTMGS5cuRXl5OT744AP8/Oc/lybUAkBVVRWefvppPP/88wCCQ0pDhgwBALz//vt444034PP50NjY\nCDGi3JlSqZQmHysUCjQ2Nrb6/gkJCViwYAEWLFiAyspKfPTRR3jqqaeQlpaGiooK2Xwcu91+1s/T\nnusyGo0AgMrKSpw6dQpTp06VntdoNCgtLUVFRQVMJpPUbjab4fP5Wn2/s82BibxvzR+XlZXJPqPJ\nZIIoiigrK2v1tU30ej2uvPJKfP755xg5ciQqKysxcuRICIKAl19+GWvWrMHjjz+O9PR0PPbYY2ed\nTxQIBKTvgyiK6N+/P1auXAmFQoGqqip8+umn2Lp1q/R8fX39GT8fgDZ/LisqKuByuWTtTZ566im8\n8soruP3226HVanHffffJ7g9RV2CAIWonm82G+fPn49lnn8Urr7wCAHA4HNL/bQNAeXk5HA4H7HY7\nKioqIIqi9I9FeXl5u/+xV6vVGD9+PN59912cOHECw4cPlwUYl8uFH/3oRy16IIqKirB06VK8/fbb\nuOSSS3D8+HFMmTLlnD5naWkpcnJypB4Qs9mMjIwMbNmyBQcPHoTJZEJVVZXs+CbNQ1FFRcU5X5fL\n5ULfvn2xfv36Fs+ZzeYzvndHstvt2Llzp/S4oqICCoUCVqv1rK+dMmUKPv30U5SVlWHKlCnS/R81\nahRGjRoFv9+PZcuW4Xe/+91ZezKaT+KN5HK5MHv2bDzwwAPn9LnO9HPZ1vfW4XDgkUcewSOPPIKt\nW7firrvuwtVXXw2DwdDu9ybqaBxCIjoHt99+O3bu3Imvv/4aQHDIICsrC4FAAH6/H++99x6uueYa\npKWlwe12S5Nks7Oz4fV6MWTIEKhUKvj9fmk44kxmzJiBP/zhD60uXZ44cSLefvttBAIBiKKIlStX\n4osvvkBpaSn0ej369u2LhoYGrFu3DgDO2EvRmtraWtx9993S5E4AOHHiBHbt2oXLL78cw4cPx/bt\n21FaWoqGhga8++670nFOp1Oa/Hnq1ClkZ2cDwDld19ChQ+HxeLBr1y7pPL/85S8hiiKGDRuGzZs3\nIxAIoLS0FF988UW7P9e5GDNmDLZv3y4Nc/3973/HmDFjpJ63towfPx47d+7Epk2bpGGYrVu34rHH\nHkNjYyP0ej0GDhwo6wU5HxMmTMAnn3wiBY1NmzZh9erVbb6mrZ/L4cOHY+vWraipqUFNTY0UnOrr\n6zF//nwUFxcDCA49qlQq2ZAmUVdgDwzROTAajfjJT36CZcuWISsrC/Pnz8epU6cwY8YMCIKAqVOn\nYtq0aRAEAc8//zx+/etfY/ny5dDpdHjxxReh1+sxYMAAWCwWjBkzBu+88w5SUlJafa/vfe97EAQB\n06dPb/HcTTfdhNzcXMyYMQOiKOKyyy7DbbfdBr1ej7Fjx2LKlCmw2+148MEHkZ2djfnz5+Oll15q\n12dMSUnBK6+8gpdeeglPPPEERFGE0WjEQw89JK1MuuGGGzB79mxYrVZMnjwZhw4dAgBkZGRg0aJF\nmDx5Mi699FKpl2XgwIHtvi6tVouXXnoJjz/+OHw+H9RqNe655x4IgoCMjAxs374d1157LVJSUnDt\ntdfKeg0iNc2BaS4zM/Os3wO3240nnngCP//5z1FfX4+0tDQ8/vjj7fr+GY1GDBo0CAcOHMCwYcMA\nAOnp6fjggw8wZcoUaDQa2Gw2PPXUUwCA+++/X1pJdC4GDRqEn/70p5g/fz4aGxtht9vx2GOPtfma\ntn4ux48fj88//xxTp06Fw+HANddcg+3bt0OtVmPu3Ln44Q9/CCDYy7Z06VLodLpzul6ijiaIkQPR\nRETnaPv27bj//vuxefPmrr4UIrqAsA+QiIiI4g4DDBEREcUdDiERERFR3GEPDBEREcUdBhgiIiKK\nO3G5jNrjaX3ZZEewWvUoK/NH7fx0/nhvYhPvS+zivYldvDft43Sazvgce2CaUamUXX0JdAa8N7GJ\n9yV28d7ELt6b744BhoiIiOJOVIeQMjMzsWPHDjQ0NODOO+/E+PHj8eCDD+LEiRMwGAx46aWXYLFY\nsGHDBrz++utQKBTIyMjAvHnzonlZREREFOeiFmC2bduGQ4cOYd26dSgrK8Ps2bPh8XhgtVrx3HPP\nYd26ddi+fTtGjx6NFStWICsrS9qyetKkSUhMTIzWpREREVGci1qASU9Px5AhQwAEK8jW1NTgs88+\nw9133w0gWEsFAP773/9i8ODBMJmCE3VGjBiB7Ozsc64LQkRERBeOqM2BUSqV0Ov1AICsrCyMHTsW\neXl5+OKLLzB//nzce++9KC8vh9frhc1mk15ns9ng8XiidVlERETUDUR9GfWmTZuQlZWFNWvWYN68\neejTpw8WLVqElStX4tVXX8Wll14qO749GwNbrfqozuBua9kWdS3em9jE+xK7eG9iF+/NdxPVALNl\nyxasWrUKr732GkwmExwOB9LT0wEAV111FV5++WWMGzcOXq9Xek1xcbFUgv5Morl23uk0RXWfGTp/\nvDexifcldvHexC7em/bpkn1gqqqqkJmZiVdffVWakDt27Fhs2bIFALB371706dMHQ4cOxe7du1FZ\nWQmfz4fs7Gxcfvnl0bosIiKibu/zz//VruNefPE55OfnnfH5Bx+8r6MuqcNFrQdm48aNKCsrw+LF\ni6W2ZcuW4ZlnnkFWVhb0ej2WLVsGrVaLJUuWYMGCBRAEAQsXLpQm9BIREdG5KSjIx6ZNH2PcuIln\nPfaee5a0+fwzzzzfUZfV4eKyGnU0u93YrRe7eG9iE+9L7OK9iV3RvDe//OU9yMnZi4qKCkyePA0F\nBfn4/e9X4umnfwuPpxg1NTX40Y9+gjFjrsaiRT/Bfffdj88++xd8vmqcPHkCeXm5uPvuJRg9egxm\nzJiIDz74FxYt+gnS069AdvZ2lJeXY9myF+BwOPDb3z6CwsICDB48BJs3b8I772zs0M/S1hBSXNZC\nIiIiigdvbT6M/+0vbtGuVAoIBM6v/yB9oAsZE/qf8fkf/GA+1q9/C3369MPJk8excuVrKCsrxfe+\nNwrTps1EXl4uHnnkQYwZc7XsdcXFRfjd717Ctm3/wXvv/QOjR4+RPW8wGPDii6/glVdexhdfbEZK\nShrq6k5j9eq1+PLLLXjrrb+d1+c5XwwwEUpqSpFzfB/0ARPchiQkKDVdfUlERETn7ZJLBgEATCYz\ncnL2YsOG9RAEBSorK1ocO2RIcAGNy+VCdXV1i+eHDh0uPV9RUYETJ45h8OChAIDRo8dAqezc+k4M\nMBE+Ov4v/Kfgf9Jjh9aGZKMbKQY3kg1JSDG64dI7oVbw20ZERGeXMaF/q70lnTW8p1arAQCffvoR\nKisrsWLFa6isrMSPfzy/xbGRAaS12SXNnxdFEQpFsE0QBAiC0NGX3yb+SxxhVv/puCz1IhwsPIF8\nXxEKqgux27sPu737pGMUggIunSMUbJKC4cbohlNnh0JgbUwiIupaCoUCgUBA1lZeXo7k5BQoFAr8\n+9+bUV9f/53fJzU1TVrt9PXX21q8Z7QxwEQwqg24NuVqDDWH96GpqqtGga8Q+dVFyPcVSl8X+oux\nM+K1aoUKbr2rRY+NNSGx01MpERFduHr16oMDB/YjOTlF2sZk3LgJePDB+7Bv3x7MmPF/cLlc+NOf\n/vCd3ufKK6/GBx9swM9+tgDDh4+E2WzpiMtvN65CaqY93XqiKKL8dAXyfYXIry5EgS8Ybgp9Rahv\nbJAdq1UmINngRooxKfinwY0UoxsmjTFqn6G74oqK2MT7Ert4b2JXd7g3lZUVyM7ejnHjJsLjKcY9\n9/wMf/3rPzr0PbgKqYMJggCrNhFWbSIG2QdK7Y1iI7w1JdLwU76vEPm+IpyoOoVjlSdk5zCqDdLw\nU0qotybZkASdStfZH4eIiOic6fUGbN68CX/965sQxUbcdVfnbnrHHphmopGK6xsbUOz3hEJNaCiq\nuhDe2tIWx1oTEpFsDM6tCQacJLj1SdAo1R16TfGoO/wfS3fE+xK7eG9iF+9N+7AHpoupFSqkGpOR\nakyWtZ8O1KHQV4T8UG9NQejrfSUHsK/kgHScAAFOnV3qrUkODUO5dA4oFZ27bI2IiCgWMMB0oQSl\nBr3MPdDL3EPW7qv3S2GmwBcKN9VF2OXZg12ePdJxSkGJJL0zNPwUmjhscMOus3JFFBERdWsMMDHI\noNajf2If9E/sI7WJoojKuipp+Ekaigr9GUmjUMMdCjMpxvDEYbPGxBVRRETULTDAxAlBEGBJMMOS\nYMYltoul9kaxEaW15aHl3ZFDUQU4WZUrO4dBrQ+FmeTQxOHgn1qVtrM/DhER0XfCABPnFIICDp0N\nDp0Ngx2XSu2BxgCKa7zhUFNdiDxfIQ6XH8Oh8qOyc9i1VmleTWoo4CTpnZxfQ0TUjc2dex3eeGMd\n/vGPtzB8+AhcdtkQ6Tm/349bb70BWVnvn/H1n3/+L4wbNxEbN74Pg8GIa64Z3xmXLWGA6aaUCiWS\nDUlINiRhJIZK7acDdREb8xUEA051IfaU5GBPSU749RHzayKHomxaK4ehiIi6kfnzf3jOrykoyMem\nTR9j3LiJmD79uo6/qHZggLnAJCg16G3uid7mnrL2qrpqqbcmv7pAmmPTfH5NeGM++fwao9rQmR+D\niIjO4Ec/uhlPPfUc3G43CgsL8NBDS+B0ulBTU4Pa2lrce+8vcemll0nHP/nkbzBu3EQMGzYcv/rV\n/airq5MKOwLAJ598iKysdVAqFejdux8eeOBXeP75ZcjJ2Ys//ekPaGxsRGJiIubMuQErV76I3bt3\noaEhgDlzMjB16gwsWvQTpKdfgezs7SgvL8eyZS/A7XZ/58/JAEMAAJPGiAG2/hhgCxcdC86vKUNe\ndaG0IirPV9jqxnwWjQkpxuRQCYVkpBrccBu4fw0RXdjWH/4ndhbvbtGuVAgINJ7fNmzDXYNxff+Z\nZ3x+7Njx+PLLLzBnTga2bPk3xo4dj379LsLYseOwY8f/8Je/vI4nn3y2xes+/vhD9O3bD3ffvQT/\n+tcn2LTpYwBATU0NnnvuZZhMJixceAeOHDmMH/xgPtavfwu3334H/vjHVwEA33yTjaNHj+CVV9ag\npqYGt912I8aOHQcAMBgMePHFV/DKKy/jiy82IyPjpvP67JEYYOiMgvNr7HDo7BjqHCS11zc2oMhX\nLJVSaPozp/QgckoPSscJEODU26VN+VKMyUhh4UsioqgaO3Y8li//PebMycDWrf/GokX34u9/fxN/\n+9ubqK+vh1bb+sKN48ePYtiwkQCA4cNHSu1msxkPPbQEAHDixDFUVJS3+vr9+/dh2LARAACdTofe\nvfvi1KlTAIChQ4cDAFwuFyoqKjrkczLA0DlTK1RIM6UgzZQia69pqJHPrQkFm2/8e/BNxP41aoVK\ntsw71ZCMZGMSLBoz59cQUbdyff+ZrfaWRHMn3r59+6GkxIOiokJUVVVhy5bP4XC48Mgjj2P//n1Y\nvvz3rb5OFAGFIvh3cGOod6i+vh7PP5+JtWv/CrvdgfvvX3zG9xUEAZF7+zc01EvnUyrDi0I6qgAA\nAwx1GJ1Kh36JvdEvsbfUJooiKuoqkde0KV91cI5Nga8Ip6ryZK83qPTS3JpkgxupoT91XOZNRHRO\nRo++CqtXr8TVV1+D8vIy9Ot3EQDg3//+DA0NDa2+pmfPXti/Pwfjxk1EdvZ2AIDf74NSqYTd7kBR\nUSH2789BQ0MDNBoNAoGA7PUDBw7C66//EfPn/xB+vx95eblIS+vZ2lt1CAYYiipBEJCYYEFiggWD\n7AOk9kBjAN6aEuRF7l9T3foyb5vWihSDG/1dPWERgku+3Xon1JxfQ0TUqmuuGY+f/vRHWLv2b6it\nrcETT/wan322CXPmZGDTpk/wwQcbWrxm6tQZePjhX+Cee36GIUOGBfcfsyQiPf0K/PjHt6J//4tw\n003z8dJLz+Pll1/FgQP78dJLz8FgMAIAhg4dhgEDBmLhwjvQ0NCAn/50EXS66BUoZjHHZlhgq2vV\nBeqkMgqRc2wq6+T3RIAAl94RLqEQqhPlZH2oTsffmdjFexO7eG/ah8UcKW5ozlAfqrrOhxp1Jfbl\nHZNqQ+X7ClHk341vPOEZ/ipBCRfrQxERdXsMMBQXjBoD+jjdcArhit5N82sKqotCRS/PXh+qqbcm\n2RDssUlMsHDiMBFRHGKAobgVOb/mEru8PlRZbbmsp6Yp1DSvD6VVapFiTJL11qQY3TBpjJ39cYiI\n6BwwwFC3oxAUsOtssLdSH8pbU4J8X7jHpqC6EMcrT+FohXxjPqPaIOutCYabJOjV+s7+OERE1AoG\nGLpgKBVKJBlcSDK4MByDpfb6xgYU+z0oqJYPQ7W2IioxwSLVmGrqrXEbkpCg1HT2xyEiuqAxwNAF\nT61QIdWYjFRjsqz9dKAOhb4iqcemaTiq+Y7DAGDX2qShqJRQj02SwQW1gr9iRETRwL9dic4g4Qwr\novz1NSj0Ny31Dg5DFfiKsNubg93ecEVvhaCAU+eQhp+SQ8UvnTo7l3oTEX1HDDBE50iv1qGvpTf6\nWnrL2qvqqkO7DUfMsfEVoshf3GKpd5LBJRuGSjG4YdUmcqk3EVE7McAQdRCTxgiTpj8utoYrejct\n9Q7vNhwchir0FSGvukD2+gSlRlre3dRbk2xww6wxcqk3EVEzDDBEURS51PvSiFIKjWIjSmvLZDWi\nCnxFOFmVi+OVJ2XnMKj1UphJMYbn2OjV0duim4go1jHAEHUBhaCAQ2eHQ2fHUOcgqb2hsQHFfq9s\nmXe+r/UaUYkJlmCYMYaGogxuuA0uaLgiioguAAwwRDFEpVBJFblHRrTXBepQ6CuW1Ycq8BVhX+kB\n7Cs9IB0nQIBDZ5Pm1jT12rhYI4qIuhkGGKI4oFFq0NOchp7mNFm7v94f3pivafJwdSF2efdil3ev\ndJxSUCIpokZUSmiTPpuWNaKIKD4xwBDFMb1aj/6JfdA/sY/UJooiKptWRPkKZRv0tagRpdSEV0NF\nTB42a0ycOExEMY0BhqibEQQBlgQTLAkmDLRdJLUHJw6XS700TcNQuVX5OFF5SnYOg0ovza0JTx5m\nKQUiih0MMEQXiODEYRscrdSI8tR4g700TauifIU4Un4ch8uPyc7RVEohOHk4GGpM1n6d/VGIiBhg\niC50SoUSbkMS3IYkjHANkdrrAvUo8hdLvTVN+9g0L6UgbBdg11qRbAxX9GYpBSKKNv7tQkSt0ijV\n6GFKRQ9Tqqy9pqEGBb5wKQVvnQcnyvKw27sPu737pOOCpRTsUjXvpureXBFFRB2BAYaIzolOJS+l\n4HSa4PFUhUspRNSHyvcVoci/W1ZKoWlFVDDUNO1jkwSHzs4VUUTUbgwwRNQh2iqlUNAs1BRIK6J2\nSceqFSok6V0R5RSCAcfGGlFE1AoGGCKKmshSCpfYLpbaRVGUVkQV+IpCwaYQhb5i5Fbny86hUWqQ\nrG8KNOE5NokJFi71JrqAMcAQUacTBAF2nRV2nRWXOS6R2hvFRnhrSkOhplCaa5NXnY8TVfKl3jqV\nVppb0zTPJsXohknN4pdEFwIGGCKKGQpBAZfeAZfeIasRFbnUO3I46njlKRytOCE7R7j4ZTjYJBuT\nYFQbOvvjEFEUMcAQUcyLXOodqb6xAcV+T4v5Na0VvzRrTLIhqOCybxd0Klb1JopHDDBEFLfUChVS\njclINSbL2usCdSj0F6OgOjy/psBXhANlh3Gg7LDsWGtCYngoKrQ5n9uQhARW9SaKaQwwRNTtaJQa\n9DSloadJXvyytqEWBb7iFnNsmlf1BgC71oYUY8QwlMENt94JtVLdmR+FiM6AAYaILhhalRZ9LD3R\nx9JT1h5Z1Ts4xybYc7Pbm4Pd3hzpOAECnPrw5nwpoWDj0jug4q7DRJ2Kv3FEdMFrrao3gNDmfOEh\nqGCwKcQu/x7s8uyRjgtOPnbKQk2yIQlOnZ27DhNFCQMMEdEZBDfnM+LiiIKVoiiisq6qRagp8BWh\n0FeEnRGvVwlKJBlc8qXeBjfsOis35yP6jhhgiIjOgSAIsCSYYUkwt9icr+x0eXhjvupwqMmrLpCd\nQ61QI9ngktWJatp1mHvYELUPAwwRUQcQBAE2rRU2rRWD7AOl9kaxEaW1ZbJQkx+qGXWyKk92Dq0y\nAe6mwpcRtaIsGjODDVEzDDBERFGkEBRw6Oxw6OwY7LhUag80BuCtLZX2sGkKNiercnG88qTsHDqV\nrsX8mhSjGyaNsbM/DlHMYIBLletIAAAgAElEQVQhIuoCSkWwKneS3olhGCy1NzQ2oNjvlUJN0/ya\nYxUncLTiuOwcRrWhRSmFZEMSDGp9J38aos7HAENEFENUChVSjG6kGN2y9vpAPYr8nvDk4VBJhdZ2\nHbZoTEg2uNHXkYZEhU0qhMldh6k7YYAhIooDaqUaaaYUpJlSZO2nA3Uo8hVLwSbfV4iC6iLsLzuE\n/WWHZMcmJlhaFMBMNrigVWk786MQdQgGGCKiOJag1KCnOQ09zfJdh2saalGrrkJO3rGI4agi5JQe\nRE7pQdmx1oREqZemqVYUyylQrItqgMnMzMSOHTvQ0NCAO++8E5s3b8bevXuRmJgIAFiwYAHGjRuH\nDRs24PXXX4dCoUBGRgbmzZsXzcsiIur2dCotejqcsIpOWbu/vgaF/uD+NZHDUftKDmBfSbicgoDg\nqqpwj02wqrdbnwQNyylQDIhagNm2bRsOHTqEdevWoaysDLNnz8aoUaNw3333Yfz48dJxfr8fK1as\nQFZWFtRqNebOnYtJkyZJIYeIiDqOXq1DX0tv9LX0lrX76v2yScNN5RT2lORgT4m8nIJdZwtX9Q79\nl8Q6UdTJohZg0tPTMWTIEACA2WxGTU0NAoFAi+N27dqFwYMHw2QyAQBGjBiB7OxsTJgwIVqXRkRE\nzRjOUk6h+aqob7178a13r3Rc8zpRkcGGdaIoGgRRFMVov8m6deuwfft2KJVKeDwe1NfXw26345FH\nHsGXX36J3bt34+GHHwYA/P73v0dycjJuuOGGM56voSEAlYr1RYiIuoIoiqg4XYXcinycqijAqcqC\n0Nf58NXXyI5VCgq4TS70MKcgzZKMHpZk9DCnwG1yQcU6UfQdRD0Wb9q0CVlZWVizZg327NmDxMRE\nXHLJJVi9ejWWL1+O4cOHy45vT54qK/NH63LhdJrg8VRF7fx0/nhvYhPvS+yK7r0RkKRIRZI1FZdb\ngy2iKKKirjJimXe45yavshDIDb9aKSjh0juknpqmISnHBVIAk7837eN0ms74XFQDzJYtW7Bq1Sq8\n9tprMJlMGD16tPTchAkT8Jvf/AZTpkyB1+uV2ouLizFs2LBoXhYREUWBIAhITLAgMcHSok5U+ekK\n2VBUvq8QhaGvI8kLYIb/c+jsLIBJMlELMFVVVcjMzMTatWulCbl33XUX7r//fvTo0QNfffUVLrro\nIgwdOhRLly5FZWUllEolsrOzpeEkIiKKf4IgwKpNhFWbiEvtA6R2URRRWlsenjgc+q/1ApgqJOmb\nBxtW9r6QRS3AbNy4EWVlZVi8eLHUdv3112Px4sXQ6XTQ6/V4+umnodVqsWTJEixYsACCIGDhwoXS\nhF4iIuq+BEGAXWeFXWfFZY5LpPZgAcxQsKkuQr6vCIW+QhT6i5FbnS87h1qhhrtFj02wsjeDTffW\nKZN4O1o0xw05Lhm7eG9iE+9L7Opu96ZRbIS3prTFiqgivwcNjQ2yYzVKDdyt9NjYtIkxUdm7u92b\naOmyOTBEREQdRSEo4NI74NI7MNQ5SGpvFBvhqSmR5tRI82yqC3CyKld2jgSlBu5moSbFkITEBEtM\nBBtqPwYYIiKKawpBIVX2Huq8TGoPNAbgrSlpto9NEXKr8nGi8pTsHFqlFsmhoajIgMNgE7sYYIiI\nqFtSKoIrmpIMLgzDYKk90BiAp8aL/GbB5kRVLo5VnpSdQ6fSwq0Pl1JoCjYWjZnBposxwBAR0QVF\nqVDCHeppidTQ2IBiv7dFj82JqlM4VnlCdqxOpWux1DvZ4IZZY2Sw6SQMMERERABUChVSjG6kGN2y\n9vrGBhT7PS1KKhyrOIGjFcdlxxpU+uAQlFTdOxhsTBpjJ36SCwMDDBERURvUChVSjclINSbL2usD\n9Siu8aKgWr6PzdGK4zhScUx2rFFtkPXWXCL2ga7eDKPG0JkfpVthgCEiIjoPaqW61WBTF6hHkd/T\nYoO+w+XHcKj8aPCgg8E/TGpjs/k1wZIKBrW+kz9N/GGAISIi6kAapRo9TCnoYUqRtdcF6lDoL0ZB\ndREqxDIc8ZxCga8IB8uP4GD5EdmxZo2pxfyaZEMS9GpdZ36UmMYAQ0RE1Ak0Sg16mtLQ05Qm28ju\ndKCuxR42Bb4iHCg7jANlh2XnsGjMrfTYuKBTXXjBhgGGiIioCyUoNehl7oFe5h6y9tqGWqnHJjLY\n7C87hP1lh2THJiZYWvTWJBtc0Kq0nflROhUDDBERUQzSqrTobe6J3uaesvaahtpWe2xySg8ip/Sg\n7FhrQqKstybFkIQkvQtaVUJnfpSoYIAhIiKKIzqVFn0svdDH0kvW7q+vQaG/qFmPTSH2lRzAvpID\nsmPtWmuz3pokuA0uaJSazvwo3wkDDBERUTegV+vQ19IbfS29Ze2+en+L3poCXyH2lOzHnpL90nEC\nhGCwMcqDTZLeBY1S3cmf5uwYYIiIiLoxg1qP/ol90D+xj6y9ut7XoremwFeE3d4c7PbmSMcJEODQ\n2WShJhhsnFB3YbBhgCEiIroAGdUGXGTti4usfWXtVXXVLXprCnxF+Na7F99690rHCRDg1NtxhXsk\npvae2NmXzwBDREREYSaNESaNERdb+0ltoiiiqr46oscmvEnfkWblFDoLAwwRERG1SRAEmDUmmG0m\nDLD17+rLAQAouvoCiIiIiM4VAwwRERHFHQYYIiIiijsMMERERBR3GGCIiIgo7jDAEBERUdxhgCEi\nIqK4wwBDREREcYcBhoiIiOIOAwwRERHFHQYYIiIiijsMMERERBR3GGCIiIgo7jDAEBERUdxhgCEi\nIqK4wwBDREREcYcBhoiIiOIOAwwRERHFHQYYIiIiijsMMERERBR3GGCIiIgo7jDAEBERUdxhgCEi\nIqK4wwBDREREcYcBhoiIiOIOAwwRERHFHQYYIiIiijsMMERERBR3GGCIiIgo7jDAEBERUdxhgCEi\nIqK4wwBDREREcYcBhoiIiOIOAwwRERHFHQYYIiIiijsMMERERBR3GGCIiIgo7jDAEBERUdxhgCEi\nIqK4E9UAk5mZiRtuuAFz5szBJ598IrVv2bIFAwYMkB5v2LABc+bMwbx58/D2229H85KIiIioG1BF\n68Tbtm3DoUOHsG7dOpSVlWH27NmYPHkyTp8+jdWrV8PpdAIA/H4/VqxYgaysLKjVasydOxeTJk1C\nYmJitC6NiIiI4lzUemDS09Px4osvAgDMZjNqamoQCASwatUq3HTTTdBoNACAXbt2YfDgwTCZTNBq\ntRgxYgSys7OjdVlERETUDUQtwCiVSuj1egBAVlYWxo4di5MnT2L//v2YNm2adJzX64XNZpMe22w2\neDyeaF0WERERdQNRG0JqsmnTJmRlZWHNmjVYsmQJli5d2ubxoiie9ZxWqx4qlbKjLrEFp9MUtXPT\nd8N7E5t4X2IX703s4r35bqIaYLZs2YJVq1bhtddeg9/vx9GjR/GLX/wCAFBcXIxbbrkFd911F7xe\nr/Sa4uJiDBs2rM3zlpX5o3bNTqcJHk9V1M5P54/3JjbxvsQu3pvYxXvTPm2FvKgFmKqqKmRmZmLt\n2rXShNxNmzZJz0+YMAF//vOfUVtbi6VLl6KyshJKpRLZ2dl4+OGHo3VZRERE1A1ELcBs3LgRZWVl\nWLx4sdS2bNkypKSkyI7TarVYsmQJFixYAEEQsHDhQphM7FYjIiKiMxPE9kw6iTHR7HZjt17s4r2J\nTbwvsYv3Jnbx3rRPW0NI3ImXiIiI4g4DDBEREcUdBhgiIiKKOwwwREREFHcYYIiIiCjunHeAOX78\neAdeBhEREVH7tRlgbr/9dtnjlStXSl8/+uij0bkiIiIiorNoM8A0NDTIHm/btk36Og63jyEiIqJu\nos0AIwiC7HFkaGn+HBEREVFnOac5MAwtREREFAvarIVUUVGB//73v9LjyspKbNu2DaIoorKyMuoX\nR0RERNSaNgOM2WyWTdw1mUxYsWKF9DURERFRV2gzwLz55puddR1ERERE7dbmHJjq6mqsXbtWevz3\nv/8ds2bNwt133w2v1xvtayMiIiJqVZsB5tFHH0VJSQkA4NixY3j++efxwAMP4Morr8STTz7ZKRdI\nRERE1FybAebUqVNYsmQJAODjjz/G1KlTceWVV+LGG29kDwwRERF1mTYDjF6vl77++uuvMWrUKOkx\nl1QTERFRV2kzwAQCAZSUlODkyZPYuXMnxowZAwDw+XyoqanplAskIiIiaq7NVUh33HEHpk+fjtra\nWixatAgWiwW1tbW46aabkJGR0VnXSERERCTTZoC55pprsHXrVpw+fRpGoxEAoNVq8ctf/hJXXXVV\np1wgERERUXNtBpj8/Hzp68idd/v27Yv8/HykpKRE78qIiIiIzqDNADNhwgT06dMHTqcTQMtijm+8\n8UZ0r46IiIioFW0GmGXLluG9996Dz+fDjBkzMHPmTNhsts66NiIiIqJWtRlgZs2ahVmzZqGgoADv\nvPMObr75ZqSmpmLWrFmYNGkStFptZ10nERERkaTNZdRNkpOT8fOf/xwffvghpkyZgieeeIKTeImI\niKjLtNkD06SyshIbNmzA+vXrEQgEcOedd2LmzJnRvjYiIiKiVrUZYLZu3Yp//OMf2LNnDyZPnoxn\nnnkGF198cWddGxEREVGr2gwwP/7xj9G7d2+MGDECpaWl+NOf/iR7/umnn47qxRERERG1ps0A07RM\nuqysDFarVfZcbm5u9K6KiIiIqA1tBhiFQoF7770Xp0+fhs1mw6uvvopevXrhz3/+M1avXo3rr7++\ns66TiIiISNJmgHnhhRewdu1a9OvXD//617/w6KOPorGxERaLBW+//XZnXSMRERGRTJvLqBUKBfr1\n6wcAmDhxIvLy8nDrrbdi+fLlSEpK6pQLJCIiImquzQAjCILscXJyMiZNmhTVCyIiIiI6m3ZtZNek\neaAhIiIi6gptzoHZuXMnxo0bJz0uKSnBuHHjIIoiBEHA559/HuXLIyIiImqpzQDz0UcfddZ1EBER\nEbVbmwEmNTW1s66DiIiIqN3OaQ4MERERUSxggCEiIqK4wwBDREREcYcBhoiIiOIOAwwRERHFHQYY\nIiIiijsMMERERBR3GGCIiIgo7jDAEBERUdxhgCEiIqK4wwBDREREcYcBhoiIiOIOAwwRERHFHQYY\nIiIiijsMMERERBR3GGCIiIgo7jDAEBERUdxhgCEiIqK4wwBDREREcYcBhoiIiOKOKponz8zMxI4d\nO9DQ0IA777wTTqcTmZmZUKlU0Gg0ePbZZ2Gz2bBhwwa8/vrrUCgUyMjIwLx586J5WURERBTnohZg\ntm3bhkOHDmHdunUoKyvD7NmzMWTIEGRmZqJHjx5Yvnw53nrrLdx6661YsWIFsrKyoFarMXfuXEya\nNAmJiYnRujQiIiKKc1ELMOnp6RgyZAgAwGw2o6amBi+88AKUSiVEUURRURFGjhyJXbt2YfDgwTCZ\nTACAESNGIDs7GxMmTIjWpREREVGci1qAUSqV0Ov1AICsrCyMHTsWSqUSX3zxBZ588kn07dsX//d/\n/4cPPvgANptNep3NZoPH42nz3FarHiqVMlqXDqfTFLVz03fDexObeF9iF+9N7OK9+W6iOgcGADZt\n2oSsrCysWbMGADB27FhcffXV+N3vfofVq1cjNTVVdrwoimc9Z1mZPyrXCgR/oDyeqqidn84f701s\n4n2JXbw3sYv3pn3aCnlRXYW0ZcsWrFq1Cn/4wx9gMpnw6aefAgAEQcCUKVOwY8cOuFwueL1e6TXF\nxcVwuVzRvCwiIiKKc1ELMFVVVcjMzMSrr74qTch9+eWXkZOTAwDYtWsX+vTpg6FDh2L37t2orKyE\nz+dDdnY2Lr/88mhdFhEREXUDURtC2rhxI8rKyrB48WKp7ZFHHsFjjz0GpVIJrVaLzMxMaLVaLFmy\nBAsWLIAgCFi4cKE0oZeIiIioNYLYnkknMSaa44Ycl4xdvDexifcldvHexC7em/bpsjkwRERERNHA\nAENERERxhwGGiIiI4g4DDBEREcUdBhgiIiKKOwwwREREFHcYYIiIiCjuMMAQERFR3GGAISIiorjD\nAENERERxhwGGiIiI4g4DDBEREcUdBhgiIiKKOwwwREREFHcYYIiIiCjuMMAQERFR3GGAISIiorjD\nAENERERxhwGGiIiI4o6qqy8glhw4WYZ3vzwOi06FVKcRaU4j9Fp+i4iIiGIN/3WOkH3Qi0+3n5K1\n2cwJSHMakeo0IM1pRA+nEW67HiolO6+IiIi6CgNMhBsm9sf0q/tiz8Fi5HqqkevxIddTjW+PlODb\nIyXScUqFALddjzSnEWlOQ6i3xgC7WQtBELrwExAREV0YGGAiKAQB/dMSYUlQytqra+qRW1wthZo8\nTzVyvT7keXz4KuI4XYISqQ55qElzGWHQqjv3gxAREXVzDDDtYNSpMbCXFQN7WaW2RlFESUWtPNR4\nfDiaX4nDeRWy11tNCdIQVFroz2S7AWoVh6GIiIjOBwPMeVIIApyJOjgTdRh+kVNqr29oREGJTzYE\nlefxYc/RUuw5Wip7fZJNhx4uY7i3xmmE3aKFgsNQREREbWKA6WBqlQI9k0zomWSStVfX1Eu9NHkR\n4aagxA/kFEvHJWiUSHMYZKEmzWWEUcdhKCIioiYMMJ3EqFNjQE8rBvQMD0OJooiSytoWoeZ4YRWO\n5FfKXm8xamRDUGlOI1IceqhVyuZvRURE1O0xwHQhQRDgsOjgsOgwrL9Dam8INKKwxI9cTzVOhYag\ncj3V2HusFHuPlUa8Hkiy6qVQk+o0oofLAEeijsNQRETUrTHAxCCVUoE0V3DoaFREu7+2vkVvTa7H\nh8JSP7Yf8EjHJaiVSHEYZENQaU4DTHpN538YIiKiKGCAiSN6rRoX90jExT0SpTZRFFFWdVo2aTi3\n2IeTRVU4VtByGKpHaPgpzcXVUEREFL8YYOKcIAiwmbWwmbUY0q/ZMFSpX1oFdaq4Gnmeauw5Voo9\nEcNQSoUAt02PVKcBPVxGaX6NzZzATfmIiChmMcB0UyqlQgojkZqGoYI9NcFem1OeauR5ffg6YjWU\nLkElbcTX1GuT6jRAl8AfGSIi6nr81+gC09owlGxTvuLwUNThvAocypVvyuewaGXzanq4jHBZdVAq\nOAxFRESdhwGGzrgpX119AAUlfpySyigEA843h7345rBXOk6lVCC1adKwqyncGGExcNIwERFFBwMM\nnZFGrUQvtwm93PJN+Sp8dcG5NcXBZd65xT7kl/hwoqhKdpxZrw4t7Q5PHE6xG6BRc+8aIiL6bhhg\n6JxZDBpYDDYM6m2T2gKNjSguqwnOqSmulopf5pwoQ86JMuk4ae8alxE9IpZ5s4QCERGdCwYY6hBK\nhQLJdgOS7QakD3RJ7TWnG5Dn9SE31FsT7LXxoXB/MbbvD78+QaMMzqmRNuQLzrHRs5I3ERG1ggGG\nokqXoEL/VAv6p1qktqa9a8Jza4IB53hBFY7kyfeusZkTpNVUl/RzwJKghNuuh0rJScNERBcyBhjq\ndJF71wyNKKHQopJ3KOB8e6QE3x4pwcZtJwDI965hJW8iogsTAwzFjLYqeZ8qrkZFTQP2HysJllLw\n+pDn9bWo5J3qMIRWRAWDTarTCDNXQxERdTsMMBTzjDo1LullhdNpwqiBwWXeorR3jQ953mqpRtSJ\nwiocbVbJu2k1VGqzSt5aDX/8iYjiFf8Gp7gkCAIciTo4EnUYdlHLEgpNFbyb/my+GgoAnIlaaYfh\npmreSVYd59cQEcUBBhjqViJLKFyBJKm95nQD8kPDTrkRk4d3HvJi56HITfkEuG2G0PCTQQo4drOW\ntaGIiGIIAwxdEHQJKvRLtaBfxGooILgpX15EJe88aUiqutnrlUh1RA5DBefXGHVc5k1E1BUYYOiC\n1rQp36URm/I1iiK85TXhYSivD7keH47mV+Jwnrw2lMWoCfbSOMK9NSkOAxK42zARUVQxwBA1oxAE\nuKx6uKx6DL84XBuqviE4v6apLlReaOLw3mOl2HusVDpOAOCy6mRLvFOdBha9JCLqQAwwRO2kVinQ\nwxXcJTiSvzY4vyYy2OR6qpF90IPsgx7pOJVSgRSHHqmOYF2opp4bqymB82uIiM4RAwzRd6TXqtA/\nzYL+afLdhpuKXuYWh5d653t9OFlUDewNv96gVQX3rwkVvWyq7M0yCkREZ8YAQxQFgiAg0ZiARGMC\nLutjl9obG0UUl9e0mDh8KK8CB3Pl82uayihEzq9JthugVnEYioiIAYaoEylCZRDcNj1GDgi319UH\nUFDibzEM1VRGQXq9ICDJppNWQqU5jUh1GeFgGQUiusAwwBDFAI1aiV5uE3q5W5ZRaOqtkf70VqOg\nxI//RVbzViuREhp6itycj2UUiKi7YoAhimFGnRoDeloxoKdVahNFEaWVp1v01pwsqsKxgtbLKMh2\nHHYYkKDhMm8iim8MMERxRhAE2C1a2C3yat4NgUYUlfplc2taK6MgAHAm6lpU806ycZk3EcUPBhii\nbkKlVISKVrZeRiEy1JypjEKyPXIYKhhuuMybiGIRAwxRN9daGQVRFFHpq0Ou14e84vCKqHyvD6eK\nqwEUScfqE1QtSihwmTcRdTUGGKILkCAIsBgTYDEmYFBkGYVGEZ6KmuDeNU1zbLw+HM6rwKFmy7yt\npuAy74t6WmEzqpHqMCLZroeGZRSIqBNENcBkZmZix44daGhowJ133onBgwfjoYceQkNDA1QqFZ59\n9lk4nU5s2LABr7/+OhQKBTIyMjBv3rxoXhYRnYFCISDJqkeSVY+RAyLLKASQ7/WHh6G8wT93Hy3B\n7qPhZd6CALiseqQ5DNIcm1SHgfNriKjDRS3AbNu2DYcOHcK6detQVlaG2bNn44orrkBGRgamT5+O\nv/zlL/jTn/6ERYsWYcWKFcjKyoJarcbcuXMxadIkJCYmRuvSiOgcqVVnXubtq2/EvsOe4HBUaLn3\njoN+7JCVURDgthmQ5jIEdx12GpHmMMDG/WuI6DxFLcCkp6djyJAhAACz2Yyamhr8+te/RkJCAgDA\narVi79692LVrFwYPHgyTKfgX44gRI5CdnY0JEyZE69KIqIMYdWr06WlCkjlBahNFEeXVdcjzNhW8\nDO5dkxeaSBwpQaMMBppQqEl1GpDmMMBs0HDiMBG1KWoBRqlUQq/XAwCysrIwduxY6XEgEMBf//pX\nLFy4EF6vFzZbeAzeZrPB4/G0ek4iin2CIMBqSoDV1KyMgijCW1GLvKZK3t5gb82JwioczZfvX2PU\nqUOhJjwMleo0wMCJw0QUEvVJvJs2bUJWVhbWrFkDIBhe7r//fowaNQqjR4/G+++/LzteFMWzntNq\n1UOlit5EQafTdPaDqEvw3sSm9t6XJJcZgy5yydoaAo3IDwWZEwWVOFFYiROFVTiYW44Dp8plx9ot\nWvRym9Er2Rwa0jIjLckIrYbrEc6EvzOxi/fmu4nqb/2WLVuwatUqvPbaa9IQ0UMPPYRevXph0aJF\nAACXywWvN7wXRXFxMYYNG9bmecvK/FG7ZqfTBI+nKmrnp/PHexObOuK+6JQCBqaaMTDVLLWdrg+g\noMQnDUM1TRzOPlCM7APF0nECAKdVF55b4zSEJg7roVJe2BOH+TsTu3hv2qetkBe1AFNVVYXMzEys\nXbtWmpC7YcMGqNVq3H333dJxQ4cOxdKlS1FZWQmlUons7Gw8/PDD0bosIooTCWolervN6O02y9r9\ntfWh4afw/JrWNuZTKgS47XrZpOFUpwGORB0nDhN1A1ELMBs3bkRZWRkWL14steXn58NsNmP+/PkA\ngH79+uE3v/kNlixZggULFkAQBCxcuFDqrSEiak6vVeOitERclBZeqSjbmC+0Eioy5CAn3GOjUStC\nE4eNoTk2wa8TjZw4TBRPBLE9k05iTDS73ditF7t4b2JTLN+XRlFEaUVtKNiEQ01BiQ8NAflffQat\nSrYaqulroy5+Jw7H8r250PHetE+XDCEREXU1hSDAkaiDI1GHYRGFLwONjSgqrZFWQgXn2PhwKK8C\nB5vtOGwxakLDT0Yp1KQ49Jw4TNTF+BtIRBccpUKBFIcBKQ4D0geGV0XV1QdQUOIP72ETCjh7j5dh\n7/Ey2TkcFm2o6GWwtybFYUCy3QC16sKeOEzUWRhgiIhCNOrWdxz21zYgv8TXYg+bbw578c3h8MRh\nhSAgyRZeEdW0f43LylIKRB2NAYaI6Cz0WhX6p1rQP6KiNwBU+urCw1De8KqoghI/th+ILKWgQIpd\n32JjPrtZy4nDROeJAYaI6DyZDRqYDRpc0ssqtYmiiLKq08gNhZn80PyafK8PJ4urARRJx2qbSik4\nI1dFGWHWqxlsiM6CAYaIqAMJggCbWQubWYsh/SJKKTSK8FTUtFjmfbywCkdaKaWQ5my+1NsAPUsp\nEEkYYIiIOoFCISDJqkeSVY8RFzul9oZAIwpL/eGil6G9aw6cLMf+k/JSClZTQqjgZTjYJNsNSFBH\nr7QKUaxigCEi6kIqpQJpTiPSnEYASVL76bpAaOKwT7Yqas/RUuw5Wiod11YpBaLujAGGiCgGJWiU\n6JNsRp9keSkFX229bCVUnseHXE91q6UUUl1GuEPhJsURDDfORB0UCs6vofjHAENEFEcMWjUu7pGI\ni3u0XUoh1+NDYakPJwvlu72qVQokR9SICpZVMMBm0bJGFMUVBhgiojgnCAIsxgRYjAkY1Nsmtdvt\nRhw46kGeJ7gKKjdimffJIvmKqASNEil2Q0QZBdaIotjGAENE1E0pFAIcFh0cFh2GRpRSaGwU4Smv\nke9h4/XhZFEVjhXIV0TpE1Sy2lApoXBj1ms6++MQyTDAEBFdYBQKAUk2PZJsLVdEFZXVIN8r33X4\ncF4FDjWrEWXWq0NhxhjRY8Ol3tR5GGCIiAhAcEVU05yYyBpR9Q1NNaJ8oXATHIraf6al3qHaUE3D\nUCx+SdHAnygiImqTWi2ieRgAAAsOSURBVKVEzyQTeibJa0S1WOodCjd7jpViz7FS2bEOi7ZFjahk\nux5qFfewofPDAENEROflTEu9/bUNwZ6ayKreXh92HSnBriMl0nGCALiseqTJemyCe9iolCx+SW1j\ngCEiog6l16rQP82C/mny4pdV/jppNVR+xATiHQf92HEwXPxSqRDgtgWLX6Y4wiUVXNzDhiIwwBAR\nUacw6TUY0FODAT3lxS8rpKrePuQ367WJpFYpkGzTI6VpVZTDiBSnAQ7uYXNBYoAhIqIuIwgCEo0J\nSGy2h40oiiitPC2bW5Pn9aFAquodplErgnvYOAyhcBOcZ2MzJ3APm26MAYaIiGKOIAiwW7SwW7QY\n0i9iDxtRhDe0h01+RLDJDVX2jqTVKMMroiLCDTfn6x4YYIiIKG4oBAEuqx4uqx7DLwrvYRNobISn\nvFaaV9MUbo4XVuFIfsvN+VKchvDk4dDqKLOBm/PFEwYYIiKKe0qFAm6bHm6bHiMHhNtbbM4XCjdH\n8ypxuNnmfEadWuqpCa+MMsKo4+Z8sYgBhoiIuq0zb87XiMJSv7TUOz80afjgqXIcOCXfnM9i0ET0\n1DRtzmeAXst/QrsSv/tERHTBUasU6OEyoofLKGs/XR9AYYlfNnk43+tDzoky5Jwokx0r23VYqhXF\nXYc7C7/LREREIQlqJXq5Tejllu86XFvXgIISP3I91VJvzZl2HbabtdKmfCnSrsMGJKi563BHYoAh\nIiI6C61GdeZdh0vk82vyvD58e6QE30buOgzAmaiTAs3Avg6YNAqWU/gOGGCIiIjOk16rQv9UC/qn\nyncdrq6pj+ipCffafHPYi28Oe/HBf08ACJdTSI2YY5PiMMDNcgpnxQBDRETUwYw6NS7ukYiLeyTK\n2itDuw5X1jbgwPFSKdxkH/Qju1k5BZdVFy5+GRqOcll1DDYhDDBERESdxGzQwGzQwOk04YoBwX1s\nIssp5EdU9s73+lBQ4sf2iNcrFQKS7frw5nwXcJ0oBhgiIqIu1FY5hbKq0/ICmF4f8kuCjyM1rxPV\ntIdNd64TxQBDREQUgwRBgM2shc2sxWV97VJ7oyiitKJWNmk4z+NDQUnrdaKS7YYWc2zsZm3cl1Ng\ngCEiIoojCkGAI1EHR6IOQ/tH1IlqFOGtaFknKs/jw4lmdaISNEqpAGbkkm+rKX4KYDLAEBERdQMK\nxdnqRAXn1zT12pwsqsKxAnmdKF2CqpUCmAZYDLFXAJMBhoiIqBuT14kKB5vmdaKags3R/EoczpPX\niTJoQ8EmtCqqaT8bs77rCmAywBAREV2A2qoTVVTqDw4/RYSbQ3kVONisAKZJr8aYwcnIGN+/sy+f\nAYaIiIjC1CoF0lxGpDWrE1VXHwgVwPRFFMCsRmllbZdcJwMMERERnZVGrUTPJBN6JpnOfnAn4HZ+\nREREFHcYYIiIiCjuMMAQERFR3GGAISIiorjDAENERERxhwGGiIiI4g4DDBEREcUdBhgiIiKKOwww\nRPT/7d1bSFTtAsbx/3xqiKmlkoWYknYRakfzItMKsoKCpOOYOXUVhHRRWCSWWRSBQhClWFGBGOGU\ndqSyA2UIaQWFhWQHkcg8FU6peWp0vovPwr72/mjvti3X7vndzWKt4XlhmHlmvS/rFRExHRUYERER\nMR0VGBERETEdFRgRERExHRUYERERMR2Ly+VyGR1CRERE5D+hOzAiIiJiOiowIiIiYjoqMCIiImI6\nKjAiIiJiOiowIiIiYjoqMCIiImI6KjCD7N+/H6vVSlJSEk+ePDE6jgySk5OD1WplxYoV3Lhxw+g4\nMkh3dzcJCQmcO3fO6CgyyKVLl1i6dCnLly+nrKzM6DgCfPr0iU2bNmGz2UhKSqK8vNzoSKbmbnSA\n4eLBgwe8fv0au91ObW0tGRkZ2O12o2MJUFlZycuXL7Hb7TgcDpYtW8bChQuNjiUD8vPzGTVqlNEx\nZBCHw0FeXh4lJSV0dnZy+PBh5s2bZ3Ss39758+eZMGECaWlpNDc3s379ekpLS42OZVoqMAMqKipI\nSEgAIDw8nI8fP9LR0YG3t7fBySQmJoYpU6YA4OvrS1dXF319fbi5uRmcTGpra3n16pV+HIeZiooK\nZs2ahbe3N97e3uzdu9foSAL4+fnx/PlzANra2vDz8zM4kblpCmnA+/fvv/kw+fv78+7dOwMTyRdu\nbm54eXkBUFxczJw5c1Rehons7GzS09ONjiF/U19fT3d3Nxs3biQ5OZmKigqjIwmwZMkSGhoaWLBg\nASkpKWzfvt3oSKamOzD/hnZYGH5u3bpFcXExJ0+eNDqKABcuXGDatGmMHz/e6CjyL3z48IHc3Fwa\nGhpYt24dd+7cwWKxGB3rt3bx4kWCgoI4ceIENTU1ZGRkaO3YT1CBGRAYGMj79++/vm5paWHMmDEG\nJpLBysvLOXLkCMePH8fHx8foOAKUlZXx5s0bysrKaGpqYsSIEYwbN47Y2Fijo/32AgICmD59Ou7u\n7oSEhDBy5EhaW1sJCAgwOtpv7dGjR8TFxQEwadIkWlpaNB3+EzSFNGD27Nlcv34dgOrqagIDA7X+\nZZhob28nJyeHo0ePMnr0aKPjyICDBw9SUlLCmTNnWLVqFampqSovw0RcXByVlZX09/fjcDjo7OzU\neothIDQ0lKqqKgDevn3LyJEjVV5+gu7ADJgxYwaRkZEkJSVhsVjIysoyOpIMuHr1Kg6Hg82bN389\nlp2dTVBQkIGpRIavsWPHsmjRIlavXg3Azp07+eMP/V81mtVqJSMjg5SUFJxOJ7t37zY6kqlZXFrs\nISIiIiajSi4iIiKmowIjIiIipqMCIyIiIqajAiMiIiKmowIjIiIipqMCIyJDqr6+nqioKGw229dd\neNPS0mhra/vh97DZbPT19f3w+WvWrOH+/fv/TVwRMQkVGBEZcv7+/hQWFlJYWEhRURGBgYHk5+f/\n8PWFhYV64JeIfEMPshORXy4mJga73U5NTQ3Z2dk4nU4+f/7Mrl27iIiIwGazMWnSJJ49e0ZBQQER\nERFUV1fT29tLZmYmTU1NOJ1OEhMTSU5Opquriy1btuBwOAgNDaWnpweA5uZmtm7dCkB3dzdWq5WV\nK1caOXQR+R9RgRGRX6qvr4+bN28SHR3Ntm3byMvLIyQk5LvN7by8vDh16tQ31xYWFuLr68uBAwfo\n7u5m8eLFxMfHc+/ePTw9PbHb7bS0tDB//nwArl27RlhYGHv27KGnp4ezZ8/+8vGKyNBQgRGRIdfa\n2orNZgOgv7+fmTNnsmLFCg4dOsSOHTu+ntfR0UF/fz/w1/Yef1dVVcXy5csB8PT0JCoqiurqal68\neEF0dDTw18asYWFhAMTHx3P69GnS09OZO3cuVqt1SMcpIr+OCoyIDLkva2AGa29vx8PD47vjX3h4\neHx3zGKxfPPa5XJhsVhwuVzf7PXzpQSFh4dz5coVHj58SGlpKQUFBRQVFf3scERkGNAiXhExhI+P\nD8HBwdy9exeAuro6cnNz//GaqVOnUl5eDkBnZyfV1dVERkYSHh7O48ePAWhsbKSurg6Ay5cv8/Tp\nU2JjY8nKyqKxsRGn0zmEoxKRX0V3YETEMNnZ2ezbt49jx47hdDpJT0//x/NtNhuZmZmsXbuW3t5e\nUlNTCQ4OJjExkdu3b5OcnExwcDCTJ08GYOLEiWRlZTFixAhcLhcbNmzA3V1feyL/D7QbtYiIiJiO\nppBERETEdFRgRERExHRUYERERMR0VGBERETEdFRgRERExHRUYERERMR0VGBERETEdFRgRERExHT+\nBMTUiu7Dyp1RAAAAAElFTkSuQmCC\n",
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ }
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "I-La4N9ObC1x",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "### Solution\n",
+ "\n",
+ "Click below for a solution."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "Xyz6n1YHbGef",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "def train_model(\n",
+ " learning_rate,\n",
+ " steps,\n",
+ " batch_size,\n",
+ " training_examples,\n",
+ " training_targets,\n",
+ " validation_examples,\n",
+ " validation_targets):\n",
+ " \"\"\"Trains a linear regression model of multiple features.\n",
+ " \n",
+ " In addition to training, this function also prints training progress information,\n",
+ " as well as a plot of the training and validation loss over time.\n",
+ " \n",
+ " Args:\n",
+ " learning_rate: A `float`, the learning rate.\n",
+ " steps: A non-zero `int`, the total number of training steps. A training step\n",
+ " consists of a forward and backward pass using a single batch.\n",
+ " batch_size: A non-zero `int`, the batch size.\n",
+ " training_examples: A `DataFrame` containing one or more columns from\n",
+ " `california_housing_dataframe` to use as input features for training.\n",
+ " training_targets: A `DataFrame` containing exactly one column from\n",
+ " `california_housing_dataframe` to use as target for training.\n",
+ " validation_examples: A `DataFrame` containing one or more columns from\n",
+ " `california_housing_dataframe` to use as input features for validation.\n",
+ " validation_targets: A `DataFrame` containing exactly one column from\n",
+ " `california_housing_dataframe` to use as target for validation.\n",
+ " \n",
+ " Returns:\n",
+ " A `LinearRegressor` object trained on the training data.\n",
+ " \"\"\"\n",
+ "\n",
+ " periods = 10\n",
+ " steps_per_period = steps / periods\n",
+ " \n",
+ " # Create a linear regressor object.\n",
+ " my_optimizer = tf.train.GradientDescentOptimizer(learning_rate=learning_rate)\n",
+ " my_optimizer = tf.contrib.estimator.clip_gradients_by_norm(my_optimizer, 5.0)\n",
+ " linear_regressor = tf.estimator.LinearRegressor(\n",
+ " feature_columns=construct_feature_columns(training_examples),\n",
+ " optimizer=my_optimizer\n",
+ " )\n",
+ " \n",
+ " # Create input functions.\n",
+ " training_input_fn = lambda: my_input_fn(\n",
+ " training_examples, \n",
+ " training_targets[\"median_house_value\"], \n",
+ " batch_size=batch_size)\n",
+ " predict_training_input_fn = lambda: my_input_fn(\n",
+ " training_examples, \n",
+ " training_targets[\"median_house_value\"], \n",
+ " num_epochs=1, \n",
+ " shuffle=False)\n",
+ " predict_validation_input_fn = lambda: my_input_fn(\n",
+ " validation_examples, validation_targets[\"median_house_value\"], \n",
+ " num_epochs=1, \n",
+ " shuffle=False)\n",
+ "\n",
+ " # Train the model, but do so inside a loop so that we can periodically assess\n",
+ " # loss metrics.\n",
+ " print(\"Training model...\")\n",
+ " print(\"RMSE (on training data):\")\n",
+ " training_rmse = []\n",
+ " validation_rmse = []\n",
+ " for period in range (0, periods):\n",
+ " # Train the model, starting from the prior state.\n",
+ " linear_regressor.train(\n",
+ " input_fn=training_input_fn,\n",
+ " steps=steps_per_period,\n",
+ " )\n",
+ " # Take a break and compute predictions.\n",
+ " training_predictions = linear_regressor.predict(input_fn=predict_training_input_fn)\n",
+ " training_predictions = np.array([item['predictions'][0] for item in training_predictions])\n",
+ " \n",
+ " validation_predictions = linear_regressor.predict(input_fn=predict_validation_input_fn)\n",
+ " validation_predictions = np.array([item['predictions'][0] for item in validation_predictions])\n",
+ " \n",
+ " \n",
+ " # Compute training and validation loss.\n",
+ " training_root_mean_squared_error = math.sqrt(\n",
+ " metrics.mean_squared_error(training_predictions, training_targets))\n",
+ " validation_root_mean_squared_error = math.sqrt(\n",
+ " metrics.mean_squared_error(validation_predictions, validation_targets))\n",
+ " # Occasionally print the current loss.\n",
+ " print(\" period %02d : %0.2f\" % (period, training_root_mean_squared_error))\n",
+ " # Add the loss metrics from this period to our list.\n",
+ " training_rmse.append(training_root_mean_squared_error)\n",
+ " validation_rmse.append(validation_root_mean_squared_error)\n",
+ " print(\"Model training finished.\")\n",
+ "\n",
+ " # Output a graph of loss metrics over periods.\n",
+ " plt.ylabel(\"RMSE\")\n",
+ " plt.xlabel(\"Periods\")\n",
+ " plt.title(\"Root Mean Squared Error vs. Periods\")\n",
+ " plt.tight_layout()\n",
+ " plt.plot(training_rmse, label=\"training\")\n",
+ " plt.plot(validation_rmse, label=\"validation\")\n",
+ " plt.legend()\n",
+ "\n",
+ " return linear_regressor"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "nExiPQa4s6OD",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ ""
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "i1imhjFzbWwt",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 748
+ },
+ "outputId": "f5a183d3-8892-4488-9626-30dcff1bce1e"
+ },
+ "cell_type": "code",
+ "source": [
+ "linear_regressor = train_model(\n",
+ " learning_rate=0.00003,\n",
+ " steps=500,\n",
+ " batch_size=5,\n",
+ " training_examples=training_examples,\n",
+ " training_targets=training_targets,\n",
+ " validation_examples=validation_examples,\n",
+ " validation_targets=validation_targets)"
+ ],
+ "execution_count": 15,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "WARNING: The TensorFlow contrib module will not be included in TensorFlow 2.0.\n",
+ "For more information, please see:\n",
+ " * https://github.com/tensorflow/community/blob/master/rfcs/20180907-contrib-sunset.md\n",
+ " * https://github.com/tensorflow/addons\n",
+ "If you depend on functionality not listed there, please file an issue.\n",
+ "\n",
+ "Training model...\n",
+ "RMSE (on training data):\n",
+ " period 00 : 207.48\n",
+ " period 01 : 191.36\n",
+ " period 02 : 178.10\n",
+ " period 03 : 168.56\n",
+ " period 04 : 163.70\n",
+ " period 05 : 162.57\n",
+ " period 06 : 161.22\n",
+ " period 07 : 160.90\n",
+ " period 08 : 161.53\n",
+ " period 09 : 162.31\n",
+ "Model training finished.\n"
+ ],
+ "name": "stdout"
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "image/png": "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\ngg==\n",
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ }
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "FqDp_hEWs3XB",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ ""
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "65sin-E5NmHN",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "## Task 5: Evaluate on Test Data\n",
+ "\n",
+ "**In the cell below, load in the test data set and evaluate your model on it.**\n",
+ "\n",
+ "We've done a lot of iteration on our validation data. Let's make sure we haven't overfit to the pecularities of that particular sample.\n",
+ "\n",
+ "Test data set is located [here](https://download.mlcc.google.com/mledu-datasets/california_housing_test.csv).\n",
+ "\n",
+ "How does your test performance compare to the validation performance? What does this say about the generalization performance of your model?"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "icEJIl5Vp51r",
+ "colab_type": "code",
+ "cellView": "both",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 35
+ },
+ "outputId": "34e6ecdd-eaf3-4923-c807-1f826a2a1ebc"
+ },
+ "cell_type": "code",
+ "source": [
+ "california_housing_test_data = pd.read_csv(\"https://download.mlcc.google.com/mledu-datasets/california_housing_test.csv\", sep=\",\")\n",
+ "#\n",
+ "# YOUR CODE HERE\n",
+ "#california_housing_test_data = pd.read_csv(\"https://download.mlcc.google.com/mledu-datasets/california_housing_test.csv\", sep=\",\")\n",
+ "\n",
+ "test_examples = preprocess_features(california_housing_test_data)\n",
+ "test_targets = preprocess_targets(california_housing_test_data)\n",
+ "\n",
+ "predict_test_input_fn = lambda: my_input_fn(\n",
+ " test_examples, \n",
+ " test_targets[\"median_house_value\"], \n",
+ " num_epochs=1, \n",
+ " shuffle=False)\n",
+ "\n",
+ "test_predictions = linear_regressor.predict(input_fn=predict_test_input_fn)\n",
+ "test_predictions = np.array([item['predictions'][0] for item in test_predictions])\n",
+ "\n",
+ "root_mean_squared_error = math.sqrt(\n",
+ " metrics.mean_squared_error(test_predictions, test_targets))\n",
+ "\n",
+ "print(\"Final RMSE (on test data): %0.2f\" % root_mean_squared_error)"
+ ],
+ "execution_count": 20,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "Final RMSE (on test data): 221.39\n"
+ ],
+ "name": "stdout"
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "yTghc_5HkJDW",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "### Solution\n",
+ "\n",
+ "Click below for the solution."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "_xSYTarykO8U",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 35
+ },
+ "outputId": "e74f1da0-9441-4d95-ef2c-40aba5d77f85"
+ },
+ "cell_type": "code",
+ "source": [
+ "california_housing_test_data = pd.read_csv(\"https://download.mlcc.google.com/mledu-datasets/california_housing_test.csv\", sep=\",\")\n",
+ "\n",
+ "test_examples = preprocess_features(california_housing_test_data)\n",
+ "test_targets = preprocess_targets(california_housing_test_data)\n",
+ "\n",
+ "predict_test_input_fn = lambda: my_input_fn(\n",
+ " test_examples, \n",
+ " test_targets[\"median_house_value\"], \n",
+ " num_epochs=1, \n",
+ " shuffle=False)\n",
+ "\n",
+ "test_predictions = linear_regressor.predict(input_fn=predict_test_input_fn)\n",
+ "test_predictions = np.array([item['predictions'][0] for item in test_predictions])\n",
+ "\n",
+ "root_mean_squared_error = math.sqrt(\n",
+ " metrics.mean_squared_error(test_predictions, test_targets))\n",
+ "\n",
+ "print(\"Final RMSE (on test data): %0.2f\" % root_mean_squared_error)"
+ ],
+ "execution_count": 16,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "Final RMSE (on test data): 160.71\n"
+ ],
+ "name": "stdout"
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
From b32576a544f513ee5fbb060ed78ef5b4b494b459 Mon Sep 17 00:00:00 2001
From: Subham <40177225+loneWolf148@users.noreply.github.com>
Date: Sun, 24 Feb 2019 00:45:34 +0530
Subject: [PATCH 05/11] Created using Colaboratory
---
feature_sets.ipynb | 1602 ++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 1602 insertions(+)
create mode 100644 feature_sets.ipynb
diff --git a/feature_sets.ipynb b/feature_sets.ipynb
new file mode 100644
index 0000000..c941205
--- /dev/null
+++ b/feature_sets.ipynb
@@ -0,0 +1,1602 @@
+{
+ "nbformat": 4,
+ "nbformat_minor": 0,
+ "metadata": {
+ "colab": {
+ "name": "feature_sets.ipynb",
+ "version": "0.3.2",
+ "provenance": [],
+ "collapsed_sections": [
+ "JndnmDMp66FL",
+ "IGINhMIJ5Wyt",
+ "pZa8miwu6_tQ"
+ ],
+ "include_colab_link": true
+ },
+ "kernelspec": {
+ "name": "python2",
+ "display_name": "Python 2"
+ }
+ },
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "view-in-github",
+ "colab_type": "text"
+ },
+ "source": [
+ ""
+ ]
+ },
+ {
+ "metadata": {
+ "id": "JndnmDMp66FL",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "#### Copyright 2017 Google LLC."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "hMqWDc_m6rUC",
+ "colab_type": "code",
+ "cellView": "both",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "# Licensed under the Apache License, Version 2.0 (the \"License\");\n",
+ "# you may not use this file except in compliance with the License.\n",
+ "# You may obtain a copy of the License at\n",
+ "#\n",
+ "# https://www.apache.org/licenses/LICENSE-2.0\n",
+ "#\n",
+ "# Unless required by applicable law or agreed to in writing, software\n",
+ "# distributed under the License is distributed on an \"AS IS\" BASIS,\n",
+ "# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n",
+ "# See the License for the specific language governing permissions and\n",
+ "# limitations under the License."
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "zbIgBK-oXHO7",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "# Feature Sets"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "bL04rAQwH3pH",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "**Learning Objective:** Create a minimal set of features that performs just as well as a more complex feature set"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "F8Hci6tAH3pH",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "So far, we've thrown all of our features into the model. Models with fewer features use fewer resources and are easier to maintain. Let's see if we can build a model on a minimal set of housing features that will perform equally as well as one that uses all the features in the data set."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "F5ZjVwK_qOyR",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "## Setup\n",
+ "\n",
+ "As before, let's load and prepare the California housing data."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "SrOYRILAH3pJ",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "from __future__ import print_function\n",
+ "\n",
+ "import math\n",
+ "\n",
+ "from IPython import display\n",
+ "from matplotlib import cm\n",
+ "from matplotlib import gridspec\n",
+ "from matplotlib import pyplot as plt\n",
+ "import numpy as np\n",
+ "import pandas as pd\n",
+ "from sklearn import metrics\n",
+ "import tensorflow as tf\n",
+ "from tensorflow.python.data import Dataset\n",
+ "\n",
+ "tf.logging.set_verbosity(tf.logging.ERROR)\n",
+ "pd.options.display.max_rows = 10\n",
+ "pd.options.display.float_format = '{:.1f}'.format\n",
+ "\n",
+ "california_housing_dataframe = pd.read_csv(\"https://download.mlcc.google.com/mledu-datasets/california_housing_train.csv\", sep=\",\")\n",
+ "\n",
+ "california_housing_dataframe = california_housing_dataframe.reindex(\n",
+ " np.random.permutation(california_housing_dataframe.index))"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "dGnXo7flH3pM",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "def preprocess_features(california_housing_dataframe):\n",
+ " \"\"\"Prepares input features from California housing data set.\n",
+ "\n",
+ " Args:\n",
+ " california_housing_dataframe: A Pandas DataFrame expected to contain data\n",
+ " from the California housing data set.\n",
+ " Returns:\n",
+ " A DataFrame that contains the features to be used for the model, including\n",
+ " synthetic features.\n",
+ " \"\"\"\n",
+ " selected_features = california_housing_dataframe[\n",
+ " [\"latitude\",\n",
+ " \"longitude\",\n",
+ " \"housing_median_age\",\n",
+ " \"total_rooms\",\n",
+ " \"total_bedrooms\",\n",
+ " \"population\",\n",
+ " \"households\",\n",
+ " \"median_income\"]]\n",
+ " processed_features = selected_features.copy()\n",
+ " # Create a synthetic feature.\n",
+ " processed_features[\"rooms_per_person\"] = (\n",
+ " california_housing_dataframe[\"total_rooms\"] /\n",
+ " california_housing_dataframe[\"population\"])\n",
+ " return processed_features\n",
+ "\n",
+ "def preprocess_targets(california_housing_dataframe):\n",
+ " \"\"\"Prepares target features (i.e., labels) from California housing data set.\n",
+ "\n",
+ " Args:\n",
+ " california_housing_dataframe: A Pandas DataFrame expected to contain data\n",
+ " from the California housing data set.\n",
+ " Returns:\n",
+ " A DataFrame that contains the target feature.\n",
+ " \"\"\"\n",
+ " output_targets = pd.DataFrame()\n",
+ " # Scale the target to be in units of thousands of dollars.\n",
+ " output_targets[\"median_house_value\"] = (\n",
+ " california_housing_dataframe[\"median_house_value\"] / 1000.0)\n",
+ " return output_targets"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "jLXC8y4AqsIy",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 1213
+ },
+ "outputId": "14c3a87f-19ff-4eaf-e7f0-e44869f13224"
+ },
+ "cell_type": "code",
+ "source": [
+ "# Choose the first 12000 (out of 17000) examples for training.\n",
+ "training_examples = preprocess_features(california_housing_dataframe.head(12000))\n",
+ "training_targets = preprocess_targets(california_housing_dataframe.head(12000))\n",
+ "\n",
+ "# Choose the last 5000 (out of 17000) examples for validation.\n",
+ "validation_examples = preprocess_features(california_housing_dataframe.tail(5000))\n",
+ "validation_targets = preprocess_targets(california_housing_dataframe.tail(5000))\n",
+ "\n",
+ "# Double-check that we've done the right thing.\n",
+ "print(\"Training examples summary:\")\n",
+ "display.display(training_examples.describe())\n",
+ "print(\"Validation examples summary:\")\n",
+ "display.display(validation_examples.describe())\n",
+ "\n",
+ "print(\"Training targets summary:\")\n",
+ "display.display(training_targets.describe())\n",
+ "print(\"Validation targets summary:\")\n",
+ "display.display(validation_targets.describe())"
+ ],
+ "execution_count": 4,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "Training examples summary:\n"
+ ],
+ "name": "stdout"
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ " latitude longitude housing_median_age total_rooms total_bedrooms \\\n",
+ "count 12000.0 12000.0 12000.0 12000.0 12000.0 \n",
+ "mean 35.6 -119.5 28.7 2644.8 540.4 \n",
+ "std 2.1 2.0 12.6 2160.6 418.4 \n",
+ "min 32.5 -124.3 1.0 2.0 1.0 \n",
+ "25% 33.9 -121.8 18.0 1466.8 298.0 \n",
+ "50% 34.2 -118.5 29.0 2130.0 436.5 \n",
+ "75% 37.7 -118.0 37.0 3150.0 650.0 \n",
+ "max 42.0 -114.3 52.0 37937.0 5471.0 \n",
+ "\n",
+ " population households median_income rooms_per_person \n",
+ "count 12000.0 12000.0 12000.0 12000.0 \n",
+ "mean 1434.2 502.1 3.9 2.0 \n",
+ "std 1141.0 381.4 1.9 1.2 \n",
+ "min 3.0 1.0 0.5 0.1 \n",
+ "25% 795.0 282.8 2.6 1.5 \n",
+ "50% 1169.5 411.0 3.5 1.9 \n",
+ "75% 1721.0 606.2 4.7 2.3 \n",
+ "max 35682.0 5189.0 15.0 55.2 "
+ ],
+ "text/html": [
+ "
"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ }
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "RidI9YhKOiY2",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "## Task 2: Make Better Use of Latitude\n",
+ "\n",
+ "Plotting `latitude` vs. `median_house_value` shows that there really isn't a linear relationship there.\n",
+ "\n",
+ "Instead, there are a couple of peaks, which roughly correspond to Los Angeles and San Francisco."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "hfGUKj2IR_F1",
+ "colab_type": "code",
+ "cellView": "both",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 365
+ },
+ "outputId": "9080437a-4169-4f52-ec7f-7a02a007f3f4"
+ },
+ "cell_type": "code",
+ "source": [
+ "plt.scatter(training_examples[\"latitude\"], training_targets[\"median_house_value\"])"
+ ],
+ "execution_count": 12,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 12
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ }
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "6N0p91k2iFCP",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "**Try creating some synthetic features that do a better job with latitude.**\n",
+ "\n",
+ "For example, you could have a feature that maps `latitude` to a value of `|latitude - 38|`, and call this `distance_from_san_francisco`.\n",
+ "\n",
+ "Or you could break the space into 10 different buckets. `latitude_32_to_33`, `latitude_33_to_34`, etc., each showing a value of `1.0` if `latitude` is within that bucket range and a value of `0.0` otherwise.\n",
+ "\n",
+ "Use the correlation matrix to help guide development, and then add them to your model if you find something that looks good.\n",
+ "\n",
+ "What's the best validation performance you can get?"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "wduJ2B28yMFl",
+ "colab_type": "code",
+ "cellView": "form",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 627
+ },
+ "outputId": "7a0ed47a-fe53-48d1-e7f6-8aa049e0eb86"
+ },
+ "cell_type": "code",
+ "source": [
+ "#\n",
+ "# YOUR CODE HERE: Train on a new data set that includes synthetic features based on latitude.\n",
+ "#\n",
+ "def select_and_transform_features(source_df):\n",
+ " LATITUDE_RANGES = zip(range(32, 44), range(33, 45))\n",
+ " selected_examples = pd.DataFrame()\n",
+ " selected_examples[\"median_income\"] = source_df[\"median_income\"]\n",
+ " for r in LATITUDE_RANGES:\n",
+ " selected_examples[\"latitude_%d_to_%d\" % r] = source_df[\"latitude\"].apply(\n",
+ " lambda l: 1.0 if l >= r[0] and l < r[1] else 0.0)\n",
+ " return selected_examples\n",
+ "\n",
+ "selected_training_examples = select_and_transform_features(training_examples)\n",
+ "selected_validation_examples = select_and_transform_features(validation_examples)\n",
+ "_ = train_model(\n",
+ " learning_rate=0.01,\n",
+ " steps=500,\n",
+ " batch_size=5,\n",
+ " training_examples=selected_training_examples,\n",
+ " training_targets=training_targets,\n",
+ " validation_examples=selected_validation_examples,\n",
+ " validation_targets=validation_targets)"
+ ],
+ "execution_count": 14,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "Training model...\n",
+ "RMSE (on training data):\n",
+ " period 00 : 226.99\n",
+ " period 01 : 216.88\n",
+ " period 02 : 206.83\n",
+ " period 03 : 196.89\n",
+ " period 04 : 187.05\n",
+ " period 05 : 177.35\n",
+ " period 06 : 167.80\n",
+ " period 07 : 158.79\n",
+ " period 08 : 149.62\n",
+ " period 09 : 140.74\n",
+ "Model training finished.\n"
+ ],
+ "name": "stdout"
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "image/png": "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\nfwhjqxunzsj+AAAAAElFTkSuQmCC\n",
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ }
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "RWq0xecNKNeG",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "## Building a Neural Network\n",
+ "\n",
+ "The NN is defined by the [DNNRegressor](https://www.tensorflow.org/api_docs/python/tf/estimator/DNNRegressor) class.\n",
+ "\n",
+ "Use **`hidden_units`** to define the structure of the NN. The `hidden_units` argument provides a list of ints, where each int corresponds to a hidden layer and indicates the number of nodes in it. For example, consider the following assignment:\n",
+ "\n",
+ "`hidden_units=[3,10]`\n",
+ "\n",
+ "The preceding assignment specifies a neural net with two hidden layers:\n",
+ "\n",
+ "* The first hidden layer contains 3 nodes.\n",
+ "* The second hidden layer contains 10 nodes.\n",
+ "\n",
+ "If we wanted to add more layers, we'd add more ints to the list. For example, `hidden_units=[10,20,30,40]` would create four layers with ten, twenty, thirty, and forty units, respectively.\n",
+ "\n",
+ "By default, all hidden layers will use ReLu activation and will be fully connected."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "ni0S6zHcTb04",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "def construct_feature_columns(input_features):\n",
+ " \"\"\"Construct the TensorFlow Feature Columns.\n",
+ "\n",
+ " Args:\n",
+ " input_features: The names of the numerical input features to use.\n",
+ " Returns:\n",
+ " A set of feature columns\n",
+ " \"\"\" \n",
+ " return set([tf.feature_column.numeric_column(my_feature)\n",
+ " for my_feature in input_features])"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "zvCqgNdzpaFg",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "def my_input_fn(features, targets, batch_size=1, shuffle=True, num_epochs=None):\n",
+ " \"\"\"Trains a neural net regression model.\n",
+ " \n",
+ " Args:\n",
+ " features: pandas DataFrame of features\n",
+ " targets: pandas DataFrame of targets\n",
+ " batch_size: Size of batches to be passed to the model\n",
+ " shuffle: True or False. Whether to shuffle the data.\n",
+ " num_epochs: Number of epochs for which data should be repeated. None = repeat indefinitely\n",
+ " Returns:\n",
+ " Tuple of (features, labels) for next data batch\n",
+ " \"\"\"\n",
+ " \n",
+ " # Convert pandas data into a dict of np arrays.\n",
+ " features = {key:np.array(value) for key,value in dict(features).items()} \n",
+ " \n",
+ " # Construct a dataset, and configure batching/repeating.\n",
+ " ds = Dataset.from_tensor_slices((features,targets)) # warning: 2GB limit\n",
+ " ds = ds.batch(batch_size).repeat(num_epochs)\n",
+ " \n",
+ " # Shuffle the data, if specified.\n",
+ " if shuffle:\n",
+ " ds = ds.shuffle(10000)\n",
+ " \n",
+ " # Return the next batch of data.\n",
+ " features, labels = ds.make_one_shot_iterator().get_next()\n",
+ " return features, labels"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "U52Ychv9KNeH",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "def train_nn_regression_model(\n",
+ " learning_rate,\n",
+ " steps,\n",
+ " batch_size,\n",
+ " hidden_units,\n",
+ " training_examples,\n",
+ " training_targets,\n",
+ " validation_examples,\n",
+ " validation_targets):\n",
+ " \"\"\"Trains a neural network regression model.\n",
+ " \n",
+ " In addition to training, this function also prints training progress information,\n",
+ " as well as a plot of the training and validation loss over time.\n",
+ " \n",
+ " Args:\n",
+ " learning_rate: A `float`, the learning rate.\n",
+ " steps: A non-zero `int`, the total number of training steps. A training step\n",
+ " consists of a forward and backward pass using a single batch.\n",
+ " batch_size: A non-zero `int`, the batch size.\n",
+ " hidden_units: A `list` of int values, specifying the number of neurons in each layer.\n",
+ " training_examples: A `DataFrame` containing one or more columns from\n",
+ " `california_housing_dataframe` to use as input features for training.\n",
+ " training_targets: A `DataFrame` containing exactly one column from\n",
+ " `california_housing_dataframe` to use as target for training.\n",
+ " validation_examples: A `DataFrame` containing one or more columns from\n",
+ " `california_housing_dataframe` to use as input features for validation.\n",
+ " validation_targets: A `DataFrame` containing exactly one column from\n",
+ " `california_housing_dataframe` to use as target for validation.\n",
+ " \n",
+ " Returns:\n",
+ " A `DNNRegressor` object trained on the training data.\n",
+ " \"\"\"\n",
+ "\n",
+ " periods = 10\n",
+ " steps_per_period = steps / periods\n",
+ " \n",
+ " # Create a DNNRegressor object.\n",
+ " my_optimizer = tf.train.GradientDescentOptimizer(learning_rate=learning_rate)\n",
+ " my_optimizer = tf.contrib.estimator.clip_gradients_by_norm(my_optimizer, 5.0)\n",
+ " dnn_regressor = tf.estimator.DNNRegressor(\n",
+ " feature_columns=construct_feature_columns(training_examples),\n",
+ " hidden_units=hidden_units,\n",
+ " optimizer=my_optimizer,\n",
+ " )\n",
+ " \n",
+ " # Create input functions.\n",
+ " training_input_fn = lambda: my_input_fn(training_examples, \n",
+ " training_targets[\"median_house_value\"], \n",
+ " batch_size=batch_size)\n",
+ " predict_training_input_fn = lambda: my_input_fn(training_examples, \n",
+ " training_targets[\"median_house_value\"], \n",
+ " num_epochs=1, \n",
+ " shuffle=False)\n",
+ " predict_validation_input_fn = lambda: my_input_fn(validation_examples, \n",
+ " validation_targets[\"median_house_value\"], \n",
+ " num_epochs=1, \n",
+ " shuffle=False)\n",
+ "\n",
+ " # Train the model, but do so inside a loop so that we can periodically assess\n",
+ " # loss metrics.\n",
+ " print(\"Training model...\")\n",
+ " print(\"RMSE (on training data):\")\n",
+ " training_rmse = []\n",
+ " validation_rmse = []\n",
+ " for period in range (0, periods):\n",
+ " # Train the model, starting from the prior state.\n",
+ " dnn_regressor.train(\n",
+ " input_fn=training_input_fn,\n",
+ " steps=steps_per_period\n",
+ " )\n",
+ " # Take a break and compute predictions.\n",
+ " training_predictions = dnn_regressor.predict(input_fn=predict_training_input_fn)\n",
+ " training_predictions = np.array([item['predictions'][0] for item in training_predictions])\n",
+ " \n",
+ " validation_predictions = dnn_regressor.predict(input_fn=predict_validation_input_fn)\n",
+ " validation_predictions = np.array([item['predictions'][0] for item in validation_predictions])\n",
+ " \n",
+ " # Compute training and validation loss.\n",
+ " training_root_mean_squared_error = math.sqrt(\n",
+ " metrics.mean_squared_error(training_predictions, training_targets))\n",
+ " validation_root_mean_squared_error = math.sqrt(\n",
+ " metrics.mean_squared_error(validation_predictions, validation_targets))\n",
+ " # Occasionally print the current loss.\n",
+ " print(\" period %02d : %0.2f\" % (period, training_root_mean_squared_error))\n",
+ " # Add the loss metrics from this period to our list.\n",
+ " training_rmse.append(training_root_mean_squared_error)\n",
+ " validation_rmse.append(validation_root_mean_squared_error)\n",
+ " print(\"Model training finished.\")\n",
+ "\n",
+ " # Output a graph of loss metrics over periods.\n",
+ " plt.ylabel(\"RMSE\")\n",
+ " plt.xlabel(\"Periods\")\n",
+ " plt.title(\"Root Mean Squared Error vs. Periods\")\n",
+ " plt.tight_layout()\n",
+ " plt.plot(training_rmse, label=\"training\")\n",
+ " plt.plot(validation_rmse, label=\"validation\")\n",
+ " plt.legend()\n",
+ "\n",
+ " print(\"Final RMSE (on training data): %0.2f\" % training_root_mean_squared_error)\n",
+ " print(\"Final RMSE (on validation data): %0.2f\" % validation_root_mean_squared_error)\n",
+ "\n",
+ " return dnn_regressor"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "2QhdcCy-Y8QR",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "## Task 1: Train a NN Model\n",
+ "\n",
+ "**Adjust hyperparameters, aiming to drop RMSE below 110.**\n",
+ "\n",
+ "Run the following block to train a NN model. \n",
+ "\n",
+ "Recall that in the linear regression exercise with many features, an RMSE of 110 or so was pretty good. We'll aim to beat that.\n",
+ "\n",
+ "Your task here is to modify various learning settings to improve accuracy on validation data.\n",
+ "\n",
+ "Overfitting is a real potential hazard for NNs. You can look at the gap between loss on training data and loss on validation data to help judge if your model is starting to overfit. If the gap starts to grow, that is usually a sure sign of overfitting.\n",
+ "\n",
+ "Because of the number of different possible settings, it's strongly recommended that you take notes on each trial to help guide your development process.\n",
+ "\n",
+ "Also, when you get a good setting, try running it multiple times and see how repeatable your result is. NN weights are typically initialized to small random values, so you should see differences from run to run.\n"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "rXmtSW1yKNeK",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 783
+ },
+ "outputId": "4fef28b8-97db-4645-d15a-e64169656f38"
+ },
+ "cell_type": "code",
+ "source": [
+ "dnn_regressor = train_nn_regression_model(\n",
+ " learning_rate=0.01,\n",
+ " steps=500,\n",
+ " batch_size=10,\n",
+ " hidden_units=[10, 2],\n",
+ " training_examples=training_examples,\n",
+ " training_targets=training_targets,\n",
+ " validation_examples=validation_examples,\n",
+ " validation_targets=validation_targets)"
+ ],
+ "execution_count": 8,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "WARNING: The TensorFlow contrib module will not be included in TensorFlow 2.0.\n",
+ "For more information, please see:\n",
+ " * https://github.com/tensorflow/community/blob/master/rfcs/20180907-contrib-sunset.md\n",
+ " * https://github.com/tensorflow/addons\n",
+ "If you depend on functionality not listed there, please file an issue.\n",
+ "\n",
+ "Training model...\n",
+ "RMSE (on training data):\n",
+ " period 00 : 223.01\n",
+ " period 01 : 255.23\n",
+ " period 02 : 161.39\n",
+ " period 03 : 192.99\n",
+ " period 04 : 171.10\n",
+ " period 05 : 193.50\n",
+ " period 06 : 196.48\n",
+ " period 07 : 126.93\n",
+ " period 08 : 181.00\n",
+ " period 09 : 129.38\n",
+ "Model training finished.\n",
+ "Final RMSE (on training data): 129.38\n",
+ "Final RMSE (on validation data): 128.04\n"
+ ],
+ "name": "stdout"
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjAAAAGACAYAAACz01iHAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJzs3Xd8VFX6+PHPtGRSJr0RAklIpBqp\nUZEOAqGtIE1AREV0Fay4lt+q+93VdQVXFF0R1EUUFdHYQEEQQQUVEYKIEJLQ0kkmdVJmkin390fI\nLAiEAJlMEp7368XLTLn3PndOYp6c85xzVIqiKAghhBBCtCJqdwcghBBCCHGhJIERQgghRKsjCYwQ\nQgghWh1JYIQQQgjR6kgCI4QQQohWRxIYIYQQQrQ6WncHIERL1qVLFzp27IhGowHAbreTmJjIE088\ngbe390Wf98MPP2TatGlnPP/JJ5/w+OOPs3z5coYNG+Z83mKxcN111zFq1Ciee+65i75uY2VlZfHs\ns89y7NgxALy8vFiwYAHXX3+9y699IZYtW0ZWVtYZn8nPP//M3LlziYqKOuOYr776qrnCuyQ5OTmM\nGDGC2NhYABRFISQkhL/+9a907979gs71wgsvEBkZyYwZMxp9zOeff05ycjKrV6++oGsJ0VwkgRHi\nPFavXk1ERAQAtbW1PPjgg6xYsYIHH3zwos5nNBp58803z5rAALRr144vvvjitARm27Zt+Pn5XdT1\nLsbDDz/MDTfcwPLlywHYt28fc+bMYePGjbRr167Z4rgU7dq1azXJyrloNJrT7mHDhg3Mnz+fTZs2\n4eHh0ejzLFy40BXhCeFWMoQkxAXw8PBg0KBBpKamAlBTU8NTTz3F6NGjGTNmDM899xx2ux2AQ4cO\ncdNNN5GUlMQNN9zA9u3bAbjpppvIy8sjKSmJ2traM67Rp08ffv75Z8xms/O5DRs2MGDAAOfj2tpa\nnnnmGUaPHs3w4cOdiQbA3r17ufHGG0lKSmLs2LH8+OOPQN1f9AMHDuSdd95hwoQJDBo0iA0bNpz1\nPtPT0+nZs6fzcc+ePdm0aZMzkfvPf/7DkCFDmDhxIq+//jrDhw8H4LHHHmPZsmXO4059fL64nn32\nWW6++WYA9uzZw+TJkxk5ciTTpk0jOzsbqOuJeuCBBxg2bBg333wzJ06cOE+Lnd0nn3zCggULmDNn\nDosXL+bnn3/mpptu4v7773f+st+4cSPjx48nKSmJW265haysLABeeeUVnnjiCaZMmcKqVatOO+/9\n99/PypUrnY9TU1MZOHAgDoeDF198kdGjRzN69GhuueUWCgoKLjjusWPHYrFYOHr0KABr164lKSmJ\n4cOH89BDD2GxWIC6z/1f//oXEyZMYOPGjae1w7m+Lx0OB//4xz8YOnQoU6ZM4dChQ87r7tq1i0mT\nJjF27FjGjBnDxo0bLzh2IZqcIoQ4p86dOyv5+fnOx2VlZcqsWbOUZcuWKYqiKCtWrFDmzZunWK1W\nxWw2K5MnT1Y+++wzxW63K2PGjFHWr1+vKIqi/Pbbb0piYqJSUVGh7Ny5U7n++uvPer2PP/5YefTR\nR5WHH37YeWxFRYUyYsQI5aOPPlIeffRRRVEU5T//+Y8yZ84cpaamRqmqqlImTpyobN26VVEURRk/\nfrzyxRdfKIqiKJ9++qnzWtnZ2Ur37t2V1atXK4qiKBs2bFBGjhx51jjuvfdeZdiwYcrbb7+tHD58\n+LTX0tLSlH79+imFhYWK1WpV7r77bmXYsGGKoijKo48+qrz66qvO9576uKG4evTooXzyySfO+01M\nTFR27NihKIqirF+/Xpk0aZKiKIry7rvvKrNmzVKsVqtSUlKiDBs2zPmZnKqhz7j+c+7Vq5dy7Ngx\n5/sTEhKUH3/8UVEURcnNzVX69u2rHD9+XFEURfnvf/+rzJkzR1EURXn55ZeVgQMHKsXFxWec98sv\nv1RmzZrlfLx06VLl6aefVtLT05VRo0YptbW1iqIoyjvvvKN8+umn54yv/nPp1q3bGc8nJiYqR44c\nUX755Relf//+yokTJxRFUZQnn3xSee655xRFqfvcJ0yYoFgsFufjV199tcHvy2+//VYZNWqUUllZ\nqZjNZmXKlCnKzTffrCiKotx4443Kzz//rCiKohw7dkx56KGHGoxdiOYgPTBCnMfs2bNJSkpixIgR\njBgxgmuvvZZ58+YB8O233zJt2jS0Wi16vZ4JEybwww8/kJOTQ1FREePGjQMgISGByMhI9u/f36hr\njhs3ji+++AKALVu2MGzYMNTq//24btu2jZkzZ+Lh4YG3tzc33HADmzdvBuCzzz5jzJgxAPTt29fZ\newFgs9m48cYbAejRowd5eXlnvf7zzz/PrFmzWL9+PePHj2f48OGsWbMGqOsdSUxMJDQ0FK1Wy/jx\n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\n",
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ }
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "O2q5RRCKqYaU",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "### Solution\n",
+ "\n",
+ "Click below to see a possible solution"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "j2Yd5VfrqcC3",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "**NOTE:** This selection of parameters is somewhat arbitrary. Here we've tried combinations that are increasingly complex, combined with training for longer, until the error falls below our objective (training is nondeterministic, so results may fluctuate a bit each time you run the solution). This may not be the best combination; others may attain an even lower RMSE. If your aim is to find the model that can attain the best error, then you'll want to use a more rigorous process, like a parameter search."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "IjkpSqmxqnSM",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 661
+ },
+ "outputId": "4e3378e5-23e3-4fab-e438-05aae1c2e216"
+ },
+ "cell_type": "code",
+ "source": [
+ "dnn_regressor = train_nn_regression_model(\n",
+ " learning_rate=0.001,\n",
+ " steps=2000,\n",
+ " batch_size=100,\n",
+ " hidden_units=[10, 10],\n",
+ " training_examples=training_examples,\n",
+ " training_targets=training_targets,\n",
+ " validation_examples=validation_examples,\n",
+ " validation_targets=validation_targets)"
+ ],
+ "execution_count": 9,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "Training model...\n",
+ "RMSE (on training data):\n",
+ " period 00 : 156.84\n",
+ " period 01 : 150.94\n",
+ " period 02 : 144.00\n",
+ " period 03 : 134.90\n",
+ " period 04 : 130.40\n",
+ " period 05 : 121.97\n",
+ " period 06 : 117.31\n",
+ " period 07 : 113.50\n",
+ " period 08 : 113.80\n",
+ " period 09 : 112.90\n",
+ "Model training finished.\n",
+ "Final RMSE (on training data): 112.90\n",
+ "Final RMSE (on validation data): 110.57\n"
+ ],
+ "name": "stdout"
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "image/png": "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\nw8HNN9/MnXfeSX19PY888ggVFRUkJyfT2NgIQFFREY899hgADQ0NzJo1i9tvv70tX7qItBIVGBG5\nrJxOJ5988glDhw7lV7/6FQsWLCApKek7F7cLDg5m8eLFZz120aJFhIeH85e//IWGhgZuuOEGxo8f\nz+bNmwkMDGTp0qUUFxdz7bXXArBmzRq6devG73//exobG1m2bNllf70i4hsqMCLic+Xl5cydOxcA\nl8vFsGHDmD59On/729/47W9/e/r3ampqcLlcwMnLe3xbRkYGt912GwCBgYEMGDCAffv2kZWVxdCh\nQ4GTF2bt1q0bAOPHj+fNN9/k8ccf5+qrr2bWrFk+fZ0icvmowIiIz506BuZM1dXV2Gy279x/is1m\n+859JpPprNtutxuTyYTb7T7rWj+nSlD37t358MMP2b59Ox999BELFy5kyZIll/pyRMQAdBCviLSJ\nsLAwEhIS+OyzzwDIycnhueeeu+BjUlNT2bhxIwB1dXXs27eP/v370717d3bu3AlAYWEhOTk5AKxa\ntYo9e/YwZswYnnrqKQoLC3E4HD58VSJyuWgPjIi0mfnz5/OHP/yBF198EYfDweOPP37B3587dy5P\nPvkkd911F01NTTzwwAMkJCRw8803s27dOu68804SEhIYOHAgAD169OCpp57CbrfjdruZN28eVqv+\n7Im0B7oatYiIiPgdvYUkIiIifkcFRkRERPyOCoyIiIj4HRUYERER8TsqMCIiIuJ3VGBERETE76jA\niIiIiN9RgRERERG/8/8Bd09wO0ISya8AAAAASUVORK5CYII=\n",
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ }
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "c6diezCSeH4Y",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "## Task 2: Evaluate on Test Data\n",
+ "\n",
+ "**Confirm that your validation performance results hold up on test data.**\n",
+ "\n",
+ "Once you have a model you're happy with, evaluate it on test data to compare that to validation performance.\n",
+ "\n",
+ "Reminder, the test data set is located [here](https://download.mlcc.google.com/mledu-datasets/california_housing_test.csv)."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "icEJIl5Vp51r",
+ "colab_type": "code",
+ "cellView": "both",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 35
+ },
+ "outputId": "a9e66737-c971-4baa-edac-1def40666ced"
+ },
+ "cell_type": "code",
+ "source": [
+ "california_housing_test_data = pd.read_csv(\"https://download.mlcc.google.com/mledu-datasets/california_housing_test.csv\", sep=\",\")\n",
+ "\n",
+ "test_examples = preprocess_features(california_housing_test_data)\n",
+ "test_targets = preprocess_targets(california_housing_test_data)\n",
+ "\n",
+ "predict_testing_input_fn = lambda: my_input_fn(test_examples, \n",
+ " test_targets[\"median_house_value\"], \n",
+ " num_epochs=1, \n",
+ " shuffle=False)\n",
+ "\n",
+ "test_predictions = dnn_regressor.predict(input_fn=predict_testing_input_fn)\n",
+ "test_predictions = np.array([item['predictions'][0] for item in test_predictions])\n",
+ "\n",
+ "root_mean_squared_error = math.sqrt(\n",
+ " metrics.mean_squared_error(test_predictions, test_targets))\n",
+ "\n",
+ "print(\"Final RMSE (on test data): %0.2f\" % root_mean_squared_error)"
+ ],
+ "execution_count": 10,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "Final RMSE (on test data): 110.14\n"
+ ],
+ "name": "stdout"
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "vvT2jDWjrKew",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "### Solution\n",
+ "\n",
+ "Click below to see a possible solution."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "FyDh7Qy6rQb0",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "Similar to what the code at the top does, we just need to load the appropriate data file, preprocess it and call predict and mean_squared_error.\n",
+ "\n",
+ "Note that we don't have to randomize the test data, since we will use all records."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "vhb0CtdvrWZx",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "california_housing_test_data = pd.read_csv(\"https://download.mlcc.google.com/mledu-datasets/california_housing_test.csv\", sep=\",\")\n",
+ "\n",
+ "test_examples = preprocess_features(california_housing_test_data)\n",
+ "test_targets = preprocess_targets(california_housing_test_data)\n",
+ "\n",
+ "predict_testing_input_fn = lambda: my_input_fn(test_examples, \n",
+ " test_targets[\"median_house_value\"], \n",
+ " num_epochs=1, \n",
+ " shuffle=False)\n",
+ "\n",
+ "test_predictions = dnn_regressor.predict(input_fn=predict_testing_input_fn)\n",
+ "test_predictions = np.array([item['predictions'][0] for item in test_predictions])\n",
+ "\n",
+ "root_mean_squared_error = math.sqrt(\n",
+ " metrics.mean_squared_error(test_predictions, test_targets))\n",
+ "\n",
+ "print(\"Final RMSE (on test data): %0.2f\" % root_mean_squared_error)"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ }
+ ]
+}
\ No newline at end of file
From 7bcad2c43a96e75fcd97e949488859ff31f9200a Mon Sep 17 00:00:00 2001
From: Subham <40177225+loneWolf148@users.noreply.github.com>
Date: Sun, 24 Feb 2019 02:05:16 +0530
Subject: [PATCH 09/11] Created using Colaboratory
---
logistic_regression.ipynb | 1620 +++++++++++++++++++++++++++++++++++++
1 file changed, 1620 insertions(+)
create mode 100644 logistic_regression.ipynb
diff --git a/logistic_regression.ipynb b/logistic_regression.ipynb
new file mode 100644
index 0000000..18a94ff
--- /dev/null
+++ b/logistic_regression.ipynb
@@ -0,0 +1,1620 @@
+{
+ "nbformat": 4,
+ "nbformat_minor": 0,
+ "metadata": {
+ "colab": {
+ "name": "logistic_regression.ipynb",
+ "version": "0.3.2",
+ "provenance": [],
+ "collapsed_sections": [
+ "JndnmDMp66FL",
+ "dPpJUV862FYI",
+ "i2e3TlyL57Qs",
+ "wCugvl0JdWYL"
+ ],
+ "include_colab_link": true
+ },
+ "kernelspec": {
+ "name": "python2",
+ "display_name": "Python 2"
+ }
+ },
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "view-in-github",
+ "colab_type": "text"
+ },
+ "source": [
+ ""
+ ]
+ },
+ {
+ "metadata": {
+ "id": "JndnmDMp66FL",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "#### Copyright 2017 Google LLC."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "hMqWDc_m6rUC",
+ "colab_type": "code",
+ "cellView": "both",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "# Licensed under the Apache License, Version 2.0 (the \"License\");\n",
+ "# you may not use this file except in compliance with the License.\n",
+ "# You may obtain a copy of the License at\n",
+ "#\n",
+ "# https://www.apache.org/licenses/LICENSE-2.0\n",
+ "#\n",
+ "# Unless required by applicable law or agreed to in writing, software\n",
+ "# distributed under the License is distributed on an \"AS IS\" BASIS,\n",
+ "# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n",
+ "# See the License for the specific language governing permissions and\n",
+ "# limitations under the License."
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "g4T-_IsVbweU",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "# Logistic Regression"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "LEAHZv4rIYHX",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "**Learning Objectives:**\n",
+ " * Reframe the median house value predictor (from the preceding exercises) as a binary classification model\n",
+ " * Compare the effectiveness of logisitic regression vs linear regression for a binary classification problem"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "CnkCZqdIIYHY",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "As in the prior exercises, we're working with the [California housing data set](https://developers.google.com/machine-learning/crash-course/california-housing-data-description), but this time we will turn it into a binary classification problem by predicting whether a city block is a high-cost city block. We'll also revert to the default features, for now."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "9pltCyy2K3dd",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "## Frame the Problem as Binary Classification\n",
+ "\n",
+ "The target of our dataset is `median_house_value` which is a numeric (continuous-valued) feature. We can create a boolean label by applying a threshold to this continuous value.\n",
+ "\n",
+ "Given features describing a city block, we wish to predict if it is a high-cost city block. To prepare the targets for train and eval data, we define a classification threshold of the 75%-ile for median house value (a value of approximately 265000). All house values above the threshold are labeled `1`, and all others are labeled `0`."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "67IJwZX1Vvjt",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "## Setup\n",
+ "\n",
+ "Run the cells below to load the data and prepare the input features and targets."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "fOlbcJ4EIYHd",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "from __future__ import print_function\n",
+ "\n",
+ "import math\n",
+ "\n",
+ "from IPython import display\n",
+ "from matplotlib import cm\n",
+ "from matplotlib import gridspec\n",
+ "from matplotlib import pyplot as plt\n",
+ "import numpy as np\n",
+ "import pandas as pd\n",
+ "from sklearn import metrics\n",
+ "import tensorflow as tf\n",
+ "from tensorflow.python.data import Dataset\n",
+ "\n",
+ "tf.logging.set_verbosity(tf.logging.ERROR)\n",
+ "pd.options.display.max_rows = 10\n",
+ "pd.options.display.float_format = '{:.1f}'.format\n",
+ "\n",
+ "california_housing_dataframe = pd.read_csv(\"https://download.mlcc.google.com/mledu-datasets/california_housing_train.csv\", sep=\",\")\n",
+ "\n",
+ "california_housing_dataframe = california_housing_dataframe.reindex(\n",
+ " np.random.permutation(california_housing_dataframe.index))"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "lTB73MNeIYHf",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "Note how the code below is slightly different from the previous exercises. Instead of using `median_house_value` as target, we create a new binary target, `median_house_value_is_high`."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "kPSqspaqIYHg",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "def preprocess_features(california_housing_dataframe):\n",
+ " \"\"\"Prepares input features from California housing data set.\n",
+ "\n",
+ " Args:\n",
+ " california_housing_dataframe: A Pandas DataFrame expected to contain data\n",
+ " from the California housing data set.\n",
+ " Returns:\n",
+ " A DataFrame that contains the features to be used for the model, including\n",
+ " synthetic features.\n",
+ " \"\"\"\n",
+ " selected_features = california_housing_dataframe[\n",
+ " [\"latitude\",\n",
+ " \"longitude\",\n",
+ " \"housing_median_age\",\n",
+ " \"total_rooms\",\n",
+ " \"total_bedrooms\",\n",
+ " \"population\",\n",
+ " \"households\",\n",
+ " \"median_income\"]]\n",
+ " processed_features = selected_features.copy()\n",
+ " # Create a synthetic feature.\n",
+ " processed_features[\"rooms_per_person\"] = (\n",
+ " california_housing_dataframe[\"total_rooms\"] /\n",
+ " california_housing_dataframe[\"population\"])\n",
+ " return processed_features\n",
+ "\n",
+ "def preprocess_targets(california_housing_dataframe):\n",
+ " \"\"\"Prepares target features (i.e., labels) from California housing data set.\n",
+ "\n",
+ " Args:\n",
+ " california_housing_dataframe: A Pandas DataFrame expected to contain data\n",
+ " from the California housing data set.\n",
+ " Returns:\n",
+ " A DataFrame that contains the target feature.\n",
+ " \"\"\"\n",
+ " output_targets = pd.DataFrame()\n",
+ " # Create a boolean categorical feature representing whether the\n",
+ " # median_house_value is above a set threshold.\n",
+ " output_targets[\"median_house_value_is_high\"] = (\n",
+ " california_housing_dataframe[\"median_house_value\"] > 265000).astype(float)\n",
+ " return output_targets"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "FwOYWmXqWA6D",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 1153
+ },
+ "outputId": "de3069fc-0291-48ae-8ff6-a7dc28ba324c"
+ },
+ "cell_type": "code",
+ "source": [
+ "# Choose the first 12000 (out of 17000) examples for training.\n",
+ "training_examples = preprocess_features(california_housing_dataframe.head(12000))\n",
+ "training_targets = preprocess_targets(california_housing_dataframe.head(12000))\n",
+ "\n",
+ "# Choose the last 5000 (out of 17000) examples for validation.\n",
+ "validation_examples = preprocess_features(california_housing_dataframe.tail(5000))\n",
+ "validation_targets = preprocess_targets(california_housing_dataframe.tail(5000))\n",
+ "\n",
+ "# Double-check that we've done the right thing.\n",
+ "print(\"Training examples summary:\")\n",
+ "display.display(training_examples.describe())\n",
+ "print(\"Validation examples summary:\")\n",
+ "display.display(validation_examples.describe())\n",
+ "\n",
+ "print(\"Training targets summary:\")\n",
+ "display.display(training_targets.describe())\n",
+ "print(\"Validation targets summary:\")\n",
+ "display.display(validation_targets.describe())"
+ ],
+ "execution_count": 5,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "Training examples summary:\n"
+ ],
+ "name": "stdout"
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ " latitude longitude housing_median_age total_rooms total_bedrooms \\\n",
+ "count 12000.0 12000.0 12000.0 12000.0 12000.0 \n",
+ "mean 35.6 -119.6 28.5 2653.8 541.4 \n",
+ "std 2.1 2.0 12.5 2188.6 425.4 \n",
+ "min 32.5 -124.3 1.0 8.0 1.0 \n",
+ "25% 33.9 -121.8 18.0 1465.0 296.8 \n",
+ "50% 34.2 -118.5 29.0 2137.0 435.0 \n",
+ "75% 37.7 -118.0 37.0 3165.2 652.0 \n",
+ "max 42.0 -114.5 52.0 37937.0 6445.0 \n",
+ "\n",
+ " population households median_income rooms_per_person \n",
+ "count 12000.0 12000.0 12000.0 12000.0 \n",
+ "mean 1432.4 502.6 3.9 2.0 \n",
+ "std 1167.9 387.0 1.9 1.1 \n",
+ "min 3.0 1.0 0.5 0.0 \n",
+ "25% 786.0 282.0 2.6 1.5 \n",
+ "50% 1169.0 410.0 3.6 1.9 \n",
+ "75% 1724.0 608.0 4.8 2.3 \n",
+ "max 35682.0 6082.0 15.0 55.2 "
+ ],
+ "text/html": [
+ "
"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ }
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "uon1LB3A31VN",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "## How Would Linear Regression Fare?\n",
+ "To see why logistic regression is effective, let us first train a naive model that uses linear regression. This model will use labels with values in the set `{0, 1}` and will try to predict a continuous value that is as close as possible to `0` or `1`. Furthermore, we wish to interpret the output as a probability, so it would be ideal if the output will be within the range `(0, 1)`. We would then apply a threshold of `0.5` to determine the label.\n",
+ "\n",
+ "Run the cells below to train the linear regression model using [LinearRegressor](https://www.tensorflow.org/api_docs/python/tf/estimator/LinearRegressor)."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "smmUYRDtWOV_",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "def construct_feature_columns(input_features):\n",
+ " \"\"\"Construct the TensorFlow Feature Columns.\n",
+ "\n",
+ " Args:\n",
+ " input_features: The names of the numerical input features to use.\n",
+ " Returns:\n",
+ " A set of feature columns\n",
+ " \"\"\"\n",
+ " return set([tf.feature_column.numeric_column(my_feature)\n",
+ " for my_feature in input_features])"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "B5OwSrr1yIKD",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "def my_input_fn(features, targets, batch_size=1, shuffle=True, num_epochs=None):\n",
+ " \"\"\"Trains a linear regression model.\n",
+ " \n",
+ " Args:\n",
+ " features: pandas DataFrame of features\n",
+ " targets: pandas DataFrame of targets\n",
+ " batch_size: Size of batches to be passed to the model\n",
+ " shuffle: True or False. Whether to shuffle the data.\n",
+ " num_epochs: Number of epochs for which data should be repeated. None = repeat indefinitely\n",
+ " Returns:\n",
+ " Tuple of (features, labels) for next data batch\n",
+ " \"\"\"\n",
+ " \n",
+ " # Convert pandas data into a dict of np arrays.\n",
+ " features = {key:np.array(value) for key,value in dict(features).items()} \n",
+ " \n",
+ " # Construct a dataset, and configure batching/repeating.\n",
+ " ds = Dataset.from_tensor_slices((features,targets)) # warning: 2GB limit\n",
+ " ds = ds.batch(batch_size).repeat(num_epochs)\n",
+ " \n",
+ " # Shuffle the data, if specified.\n",
+ " if shuffle:\n",
+ " ds = ds.shuffle(10000)\n",
+ " \n",
+ " # Return the next batch of data.\n",
+ " features, labels = ds.make_one_shot_iterator().get_next()\n",
+ " return features, labels"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "SE2-hq8PIYHz",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "def train_linear_regressor_model(\n",
+ " learning_rate,\n",
+ " steps,\n",
+ " batch_size,\n",
+ " training_examples,\n",
+ " training_targets,\n",
+ " validation_examples,\n",
+ " validation_targets):\n",
+ " \"\"\"Trains a linear regression model.\n",
+ " \n",
+ " In addition to training, this function also prints training progress information,\n",
+ " as well as a plot of the training and validation loss over time.\n",
+ " \n",
+ " Args:\n",
+ " learning_rate: A `float`, the learning rate.\n",
+ " steps: A non-zero `int`, the total number of training steps. A training step\n",
+ " consists of a forward and backward pass using a single batch.\n",
+ " batch_size: A non-zero `int`, the batch size.\n",
+ " training_examples: A `DataFrame` containing one or more columns from\n",
+ " `california_housing_dataframe` to use as input features for training.\n",
+ " training_targets: A `DataFrame` containing exactly one column from\n",
+ " `california_housing_dataframe` to use as target for training.\n",
+ " validation_examples: A `DataFrame` containing one or more columns from\n",
+ " `california_housing_dataframe` to use as input features for validation.\n",
+ " validation_targets: A `DataFrame` containing exactly one column from\n",
+ " `california_housing_dataframe` to use as target for validation.\n",
+ " \n",
+ " Returns:\n",
+ " A `LinearRegressor` object trained on the training data.\n",
+ " \"\"\"\n",
+ "\n",
+ " periods = 10\n",
+ " steps_per_period = steps / periods\n",
+ "\n",
+ " # Create a linear regressor object.\n",
+ " my_optimizer = tf.train.GradientDescentOptimizer(learning_rate=learning_rate)\n",
+ " my_optimizer = tf.contrib.estimator.clip_gradients_by_norm(my_optimizer, 5.0)\n",
+ " linear_regressor = tf.estimator.LinearRegressor(\n",
+ " feature_columns=construct_feature_columns(training_examples),\n",
+ " optimizer=my_optimizer\n",
+ " )\n",
+ " \n",
+ " # Create input functions.\n",
+ " training_input_fn = lambda: my_input_fn(training_examples, \n",
+ " training_targets[\"median_house_value_is_high\"], \n",
+ " batch_size=batch_size)\n",
+ " predict_training_input_fn = lambda: my_input_fn(training_examples, \n",
+ " training_targets[\"median_house_value_is_high\"], \n",
+ " num_epochs=1, \n",
+ " shuffle=False)\n",
+ " predict_validation_input_fn = lambda: my_input_fn(validation_examples, \n",
+ " validation_targets[\"median_house_value_is_high\"], \n",
+ " num_epochs=1, \n",
+ " shuffle=False)\n",
+ "\n",
+ " # Train the model, but do so inside a loop so that we can periodically assess\n",
+ " # loss metrics.\n",
+ " print(\"Training model...\")\n",
+ " print(\"RMSE (on training data):\")\n",
+ " training_rmse = []\n",
+ " validation_rmse = []\n",
+ " for period in range (0, periods):\n",
+ " # Train the model, starting from the prior state.\n",
+ " linear_regressor.train(\n",
+ " input_fn=training_input_fn,\n",
+ " steps=steps_per_period\n",
+ " )\n",
+ " \n",
+ " # Take a break and compute predictions.\n",
+ " training_predictions = linear_regressor.predict(input_fn=predict_training_input_fn)\n",
+ " training_predictions = np.array([item['predictions'][0] for item in training_predictions])\n",
+ " \n",
+ " validation_predictions = linear_regressor.predict(input_fn=predict_validation_input_fn)\n",
+ " validation_predictions = np.array([item['predictions'][0] for item in validation_predictions])\n",
+ " \n",
+ " # Compute training and validation loss.\n",
+ " training_root_mean_squared_error = math.sqrt(\n",
+ " metrics.mean_squared_error(training_predictions, training_targets))\n",
+ " validation_root_mean_squared_error = math.sqrt(\n",
+ " metrics.mean_squared_error(validation_predictions, validation_targets))\n",
+ " # Occasionally print the current loss.\n",
+ " print(\" period %02d : %0.2f\" % (period, training_root_mean_squared_error))\n",
+ " # Add the loss metrics from this period to our list.\n",
+ " training_rmse.append(training_root_mean_squared_error)\n",
+ " validation_rmse.append(validation_root_mean_squared_error)\n",
+ " print(\"Model training finished.\")\n",
+ " \n",
+ " # Output a graph of loss metrics over periods.\n",
+ " plt.ylabel(\"RMSE\")\n",
+ " plt.xlabel(\"Periods\")\n",
+ " plt.title(\"Root Mean Squared Error vs. Periods\")\n",
+ " plt.tight_layout()\n",
+ " plt.plot(training_rmse, label=\"training\")\n",
+ " plt.plot(validation_rmse, label=\"validation\")\n",
+ " plt.legend()\n",
+ "\n",
+ " return linear_regressor"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "TDBD8xeeIYH2",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 748
+ },
+ "outputId": "4e5460fc-b334-498c-9de4-89990be50d2d"
+ },
+ "cell_type": "code",
+ "source": [
+ "linear_regressor = train_linear_regressor_model(\n",
+ " learning_rate=0.000001,\n",
+ " steps=200,\n",
+ " batch_size=20,\n",
+ " training_examples=training_examples,\n",
+ " training_targets=training_targets,\n",
+ " validation_examples=validation_examples,\n",
+ " validation_targets=validation_targets)"
+ ],
+ "execution_count": 10,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "WARNING: The TensorFlow contrib module will not be included in TensorFlow 2.0.\n",
+ "For more information, please see:\n",
+ " * https://github.com/tensorflow/community/blob/master/rfcs/20180907-contrib-sunset.md\n",
+ " * https://github.com/tensorflow/addons\n",
+ "If you depend on functionality not listed there, please file an issue.\n",
+ "\n",
+ "Training model...\n",
+ "RMSE (on training data):\n",
+ " period 00 : 0.45\n",
+ " period 01 : 0.45\n",
+ " period 02 : 0.45\n",
+ " period 03 : 0.45\n",
+ " period 04 : 0.45\n",
+ " period 05 : 0.45\n",
+ " period 06 : 0.44\n",
+ " period 07 : 0.44\n",
+ " period 08 : 0.45\n",
+ " period 09 : 0.44\n",
+ "Model training finished.\n"
+ ],
+ "name": "stdout"
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjgAAAGACAYAAACgBBhzAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJzs3Xd8VfX9x/HXvbm5SW72TsggYYSR\nsAlCAiI7DAVHEUGk1k6LVaxWy89ZLWqttlXU1tZRsVXURpwoIKKyMiCMDAiE7D1v9rr3/P4IXImQ\nsHJzRz7Px8OH3Jt7z/nce5Lcd75TpSiKghBCCCGEHVFbugAhhBBCiL4mAUcIIYQQdkcCjhBCCCHs\njgQcIYQQQtgdCThCCCGEsDsScIQQQghhdzSWLkAIWzZixAjCw8NxcHAAwGAwEBsby0MPPYROp7vs\n47733nssX778nPsTExP5/e9/z9///ndmzZplur+1tZW4uDjmz5/P008/fdnnvVgFBQVs2LCB3Nxc\nAFxcXFi7di1z5841+7kvxcsvv0xBQcE570lSUhJ33HEHoaGh5zzniy++6K/yrkhRURFz5swhMjIS\nAEVR8PPz4//+7/8YPXr0JR3rueeeY9CgQdxyyy0X/ZyPPvqIDz74gE2bNl3SuYToLxJwhLhCmzZt\nIigoCID29nbWrVvHP/7xD9atW3dZx6usrORf//rXeQMOQHBwMJ9++mm3gPP111/j4eFxWee7HPfd\ndx9Lly7l73//OwCHDx9mzZo1bN26leDg4H6r40oEBwfbTJjpiYODQ7fX8Pnnn/PrX/+aL7/8Eq1W\ne9HH+e1vf2uO8oSwKOmiEqIPabVaZsyYQVZWFgBtbW088sgjLFiwgIULF/L0009jMBgAOHbsGCtW\nrCAhIYGlS5fy3XffAbBixQpKSkpISEigvb39nHNMnDiRpKQkWlpaTPd9/vnnxMfHm263t7fz5JNP\nsmDBAmbPnm0KIgBpaWnccMMNJCQksGjRIvbu3Qt0tQhMnz6dt956i2uvvZYZM2bw+eefn/d1Zmdn\nM27cONPtcePG8eWXX5qC3saNG5k5cybLli3j1VdfZfbs2QA8+OCDvPzyy6bnnX37QnVt2LCBW2+9\nFYADBw5w4403Mm/ePJYvX05hYSHQ1ZJ1zz33MGvWLG699VbKysoucMXOLzExkbVr17JmzRr+9Kc/\nkZSUxIoVK7j77rtNYWDr1q0sWbKEhIQEbrvtNgoKCgB48cUXeeihh7jpppt48803ux337rvv5vXX\nXzfdzsrKYvr06RiNRv7yl7+wYMECFixYwG233UZ5efkl171o0SJaW1s5deoUAJs3byYhIYHZs2dz\n77330traCnS970899RTXXnstW7du7XYdevq+NBqN/OEPf+Caa67hpptu4tixY6bzJicnc/3117No\n0SIWLlzI1q1bL7l2IfqcIoS4bFFRUUppaanpdl1dnbJq1Srl5ZdfVhRFUf7xj38oP/vZz5SOjg6l\npaVFufHGG5UtW7YoBoNBWbhwofLJJ58oiqIoR44cUWJjY5WGhgZl//79yty5c897vv/973/KAw88\noNx3332m5zY0NChz5sxR3n//feWBBx5QFEVRNm7cqKxZs0Zpa2tTmpqalGXLlik7d+5UFEVRlixZ\nonz66aeKoijKhx9+aDpXYWGhMnr0aGXTpk2KoijK559/rsybN++8ddx1113KrFmzlH//+9/KyZMn\nu33t+PHjyuTJk5WKigqlo6ND+dWvfqXMmjVLURRFeeCBB5SXXnrJ9Nizb/dWV3R0tJKYmGh6vbGx\nscru3bsVRVGUTz75RLn++usVRVGUt99+W1m1apXS0dGh1NTUKLNmzTK9J2fr7T0+8z6PHz9eyc3N\nNT1+zJgxyt69exVFUZTi4mJl0qRJSl5enqIoivLaa68pa9asURRFUV544QVl+vTpSnV19TnH/eyz\nz5RVq1aZbv/tb39TnnjiCSU7O1uZP3++0t7eriiKorz11lvKhx9+2GN9Z96XUaNGnXN/bGyskpOT\no6SkpCjTpk1TysrKFEVRlIcfflh5+umnFUXpet+vvfZapbW11XT7pZde6vX7cteuXcr8+fOVxsZG\npaWlRbnpppuUW2+9VVEURbnhhhuUpKQkRVEUJTc3V7n33nt7rV2I/iAtOEJcodWrV5OQkMCcOXOY\nM2cOU6dO5Wc/+xkAu3btYvny5Wg0Gpydnbn22mvZs2cPRUVFVFVVsXjxYgDGjBnDoEGDOHr06EWd\nc/HixXz66acA7Nixg1mzZqFWf//j/PXXX7Ny5Uq0Wi06nY6lS5eybds2ALZs2cLChQsBmDRpkqn1\nA6Czs5MbbrgBgOjoaEpKSs57/meffZZVq1bxySefsGTJEmbPns0777wDdLWuxMbG4u/vj0ajYcmS\n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\n",
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ }
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "JjBZ_q7aD9gh",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "## Task 1: Can We Calculate LogLoss for These Predictions?\n",
+ "\n",
+ "**Examine the predictions and decide whether or not we can use them to calculate LogLoss.**\n",
+ "\n",
+ "`LinearRegressor` uses the L2 loss, which doesn't do a great job at penalizing misclassifications when the output is interpreted as a probability. For example, there should be a huge difference whether a negative example is classified as positive with a probability of 0.9 vs 0.9999, but L2 loss doesn't strongly differentiate these cases.\n",
+ "\n",
+ "In contrast, `LogLoss` penalizes these \"confidence errors\" much more heavily. Remember, `LogLoss` is defined as:\n",
+ "\n",
+ "$$Log Loss = \\sum_{(x,y)\\in D} -y \\cdot log(y_{pred}) - (1 - y) \\cdot log(1 - y_{pred})$$\n",
+ "\n",
+ "\n",
+ "But first, we'll need to obtain the prediction values. We could use `LinearRegressor.predict` to obtain these.\n",
+ "\n",
+ "Given the predictions and the targets, can we calculate `LogLoss`?"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "dPpJUV862FYI",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "### Solution\n",
+ "\n",
+ "Click below to display the solution."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "kXFQ5uig2RoP",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 347
+ },
+ "outputId": "c7becddf-5625-482d-ae50-8b2e94f71917"
+ },
+ "cell_type": "code",
+ "source": [
+ "predict_validation_input_fn = lambda: my_input_fn(validation_examples, \n",
+ " validation_targets[\"median_house_value_is_high\"], \n",
+ " num_epochs=1, \n",
+ " shuffle=False)\n",
+ "\n",
+ "validation_predictions = linear_regressor.predict(input_fn=predict_validation_input_fn)\n",
+ "validation_predictions = np.array([item['predictions'][0] for item in validation_predictions])\n",
+ "\n",
+ "_ = plt.hist(validation_predictions)"
+ ],
+ "execution_count": 11,
+ "outputs": [
+ {
+ "output_type": "display_data",
+ "data": {
+ "image/png": "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\nVVXp8ccf1+joqCSpvb1da9asUUVFhd59911J0tjYmGpra1VZWakNGzbo7Nmz03QoAAAkn6ihHh4e\n1ssvv6xly5ZFtu3du1dVVVV66623dNttt8nv92t4eFhNTU1644039Oabb6qlpUWff/653nvvPaWn\np+vtt9/Wli1b1NjYOK0HBABAMokaaqfTqUOHDsnn80W2dXd3a+XKlZKk4uJiBQIB9fT0KCcnR263\nWy6XS3l5eQoGgwoEAiotLZUkFRYWKhgMTtOhAACQfKKG2uFwyOVyXbFtZGRETqdTkpSVlaVQKKRw\nOCyPxxPZx+PxXLXdbrfLZrNFLpUDAICJOWL9ApZlxWX7t2VmpsnhSIlpXZh9vF53XPfD9THD2DC/\n2M2mGU4p1Glpabp8+bJcLpcuXrwon88nn8+ncDgc2aevr0+LFy+Wz+dTKBTSwoULNTY2JsuyIu/G\nr6e/f3gqy8IsFwoNRt3H63VPaj9cHzOMDfOLXTLOcKJvPKb0z7MKCwvV0dEhSTpy5IiWL1+u3Nxc\n9fb2amBgQENDQwoGg8rPz1dRUZEOHz4sSers7FRBQcFUXhIAgFkp6jvqkydPaseOHTp37pwcDoc6\nOjq0a9cu1dXVqa2tTfPmzVN5eblSU1NVW1ur6upq2Ww21dTUyO12q6ysTF1dXaqsrJTT6VRDQ8NM\nHBcAAEnBZk3mQ+MZlmyXNCZjc8OxRC/hhtdcVxJ1n2S8ZDbTmGFsmF/sknGGcb/0DQAAZgahBgDA\nYIQaAACDEWoAAAxGqAEAMBihBgDAYIQaAACDEWoAAAxGqAEAMBihBgDAYIQaAACDEWoAAAxGqAEA\nMBihBgDAYIQaAACDEWoAAAxGqAEAMBihBgDAYIQaAACDEWoAAAxGqAEAMBihBgDAYIQaAACDEWoA\nAAxGqAEAMBihBgDAYIQaAACDEWoAAAxGqAEAMBihBgDAYIQaAACDEWoAAAzmmMqTuru79fjjj2vB\nggWSpNtvv10PPvignnnmGY2Pj8vr9erVV1+V0+lUe3u7WlpaZLfbtW7dOlVUVMT1AAAASGZTCrUk\n/exnP9PevXsjf//tb3+rqqoqrV69Wq+99pr8fr/Ky8vV1NQkv9+v1NRUrV27VqWlpcrIyIjL4gEA\nSHZxu/Td3d2tlStXSpKKi4sVCATU09OjnJwcud1uuVwu5eXlKRgMxuslAQBIelN+R/3pp59qy5Yt\n+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\n",
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ }
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "rYpy336F9wBg",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "## Task 2: Train a Logistic Regression Model and Calculate LogLoss on the Validation Set\n",
+ "\n",
+ "To use logistic regression, simply use [LinearClassifier](https://www.tensorflow.org/api_docs/python/tf/estimator/LinearClassifier) instead of `LinearRegressor`. Complete the code below.\n",
+ "\n",
+ "**NOTE**: When running `train()` and `predict()` on a `LinearClassifier` model, you can access the real-valued predicted probabilities via the `\"probabilities\"` key in the returned dict—e.g., `predictions[\"probabilities\"]`. Sklearn's [log_loss](http://scikit-learn.org/stable/modules/generated/sklearn.metrics.log_loss.html) function is handy for calculating LogLoss using these probabilities.\n"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "JElcb--E9wBm",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "def train_linear_classifier_model(\n",
+ " learning_rate,\n",
+ " steps,\n",
+ " batch_size,\n",
+ " training_examples,\n",
+ " training_targets,\n",
+ " validation_examples,\n",
+ " validation_targets):\n",
+ " \"\"\"Trains a linear classification model.\n",
+ " \n",
+ " In addition to training, this function also prints training progress information,\n",
+ " as well as a plot of the training and validation loss over time.\n",
+ " \n",
+ " Args:\n",
+ " learning_rate: A `float`, the learning rate.\n",
+ " steps: A non-zero `int`, the total number of training steps. A training step\n",
+ " consists of a forward and backward pass using a single batch.\n",
+ " batch_size: A non-zero `int`, the batch size.\n",
+ " training_examples: A `DataFrame` containing one or more columns from\n",
+ " `california_housing_dataframe` to use as input features for training.\n",
+ " training_targets: A `DataFrame` containing exactly one column from\n",
+ " `california_housing_dataframe` to use as target for training.\n",
+ " validation_examples: A `DataFrame` containing one or more columns from\n",
+ " `california_housing_dataframe` to use as input features for validation.\n",
+ " validation_targets: A `DataFrame` containing exactly one column from\n",
+ " `california_housing_dataframe` to use as target for validation.\n",
+ " \n",
+ " Returns:\n",
+ " A `LinearClassifier` object trained on the training data.\n",
+ " \"\"\"\n",
+ "\n",
+ " periods = 10\n",
+ " steps_per_period = steps / periods\n",
+ " \n",
+ " # Create a linear classifier object.\n",
+ " my_optimizer = tf.train.GradientDescentOptimizer(learning_rate=learning_rate)\n",
+ " my_optimizer = tf.contrib.estimator.clip_gradients_by_norm(my_optimizer, 5.0) \n",
+ " linear_classifier = tf.estimator.LinearClassifier(\n",
+ " feature_columns=construct_feature_columns(training_examples),\n",
+ " optimizer=my_optimizer\n",
+ " )\n",
+ " \n",
+ " # Create input functions.\n",
+ " training_input_fn = lambda: my_input_fn(training_examples, \n",
+ " training_targets[\"median_house_value_is_high\"], \n",
+ " batch_size=batch_size)\n",
+ " predict_training_input_fn = lambda: my_input_fn(training_examples, \n",
+ " training_targets[\"median_house_value_is_high\"], \n",
+ " num_epochs=1, \n",
+ " shuffle=False)\n",
+ " predict_validation_input_fn = lambda: my_input_fn(validation_examples, \n",
+ " validation_targets[\"median_house_value_is_high\"], \n",
+ " num_epochs=1, \n",
+ " shuffle=False)\n",
+ " \n",
+ " # Train the model, but do so inside a loop so that we can periodically assess\n",
+ " # loss metrics.\n",
+ " print(\"Training model...\")\n",
+ " print(\"LogLoss (on training data):\")\n",
+ " training_log_losses = []\n",
+ " validation_log_losses = []\n",
+ " for period in range (0, periods):\n",
+ " # Train the model, starting from the prior state.\n",
+ " linear_classifier.train(\n",
+ " input_fn=training_input_fn,\n",
+ " steps=steps_per_period\n",
+ " )\n",
+ " # Take a break and compute predictions. \n",
+ " training_probabilities = linear_classifier.predict(input_fn=predict_training_input_fn)\n",
+ " training_probabilities = np.array([item['probabilities'] for item in training_probabilities])\n",
+ " \n",
+ " validation_probabilities = linear_classifier.predict(input_fn=predict_validation_input_fn)\n",
+ " validation_probabilities = np.array([item['probabilities'] for item in validation_probabilities])\n",
+ " \n",
+ " training_log_loss = metrics.log_loss(training_targets, training_probabilities)\n",
+ " validation_log_loss = metrics.log_loss(validation_targets, validation_probabilities)\n",
+ " # Occasionally print the current loss.\n",
+ " print(\" period %02d : %0.2f\" % (period, training_log_loss))\n",
+ " # Add the loss metrics from this period to our list.\n",
+ " training_log_losses.append(training_log_loss)\n",
+ " validation_log_losses.append(validation_log_loss)\n",
+ " print(\"Model training finished.\")\n",
+ " \n",
+ " # Output a graph of loss metrics over periods.\n",
+ " plt.ylabel(\"LogLoss\")\n",
+ " plt.xlabel(\"Periods\")\n",
+ " plt.title(\"LogLoss vs. Periods\")\n",
+ " plt.tight_layout()\n",
+ " plt.plot(training_log_losses, label=\"training\")\n",
+ " plt.plot(validation_log_losses, label=\"validation\")\n",
+ " plt.legend()\n",
+ "\n",
+ " return linear_classifier"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "VM0wmnFUIYH9",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 627
+ },
+ "outputId": "5f8af41a-f2b5-4c88-b245-9ae2f31fafe2"
+ },
+ "cell_type": "code",
+ "source": [
+ "linear_classifier = train_linear_classifier_model(\n",
+ " learning_rate=0.000005,\n",
+ " steps=500,\n",
+ " batch_size=20,\n",
+ " training_examples=training_examples,\n",
+ " training_targets=training_targets,\n",
+ " validation_examples=validation_examples,\n",
+ " validation_targets=validation_targets)"
+ ],
+ "execution_count": 14,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "Training model...\n",
+ "LogLoss (on training data):\n",
+ " period 00 : 0.61\n",
+ " period 01 : 0.60\n",
+ " period 02 : 0.58\n",
+ " period 03 : 0.57\n",
+ " period 04 : 0.56\n",
+ " period 05 : 0.55\n",
+ " period 06 : 0.54\n",
+ " period 07 : 0.54\n",
+ " period 08 : 0.54\n",
+ " period 09 : 0.54\n",
+ "Model training finished.\n"
+ ],
+ "name": "stdout"
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ }
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "i2e3TlyL57Qs",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "### Solution\n",
+ "\n",
+ "Click below to see the solution.\n",
+ "\n"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "5YxXd2hn6MuF",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "def train_linear_classifier_model(\n",
+ " learning_rate,\n",
+ " steps,\n",
+ " batch_size,\n",
+ " training_examples,\n",
+ " training_targets,\n",
+ " validation_examples,\n",
+ " validation_targets):\n",
+ " \"\"\"Trains a linear classification model.\n",
+ " \n",
+ " In addition to training, this function also prints training progress information,\n",
+ " as well as a plot of the training and validation loss over time.\n",
+ " \n",
+ " Args:\n",
+ " learning_rate: A `float`, the learning rate.\n",
+ " steps: A non-zero `int`, the total number of training steps. A training step\n",
+ " consists of a forward and backward pass using a single batch.\n",
+ " batch_size: A non-zero `int`, the batch size.\n",
+ " training_examples: A `DataFrame` containing one or more columns from\n",
+ " `california_housing_dataframe` to use as input features for training.\n",
+ " training_targets: A `DataFrame` containing exactly one column from\n",
+ " `california_housing_dataframe` to use as target for training.\n",
+ " validation_examples: A `DataFrame` containing one or more columns from\n",
+ " `california_housing_dataframe` to use as input features for validation.\n",
+ " validation_targets: A `DataFrame` containing exactly one column from\n",
+ " `california_housing_dataframe` to use as target for validation.\n",
+ " \n",
+ " Returns:\n",
+ " A `LinearClassifier` object trained on the training data.\n",
+ " \"\"\"\n",
+ "\n",
+ " periods = 10\n",
+ " steps_per_period = steps / periods\n",
+ " \n",
+ " # Create a linear classifier object.\n",
+ " my_optimizer = tf.train.GradientDescentOptimizer(learning_rate=learning_rate)\n",
+ " my_optimizer = tf.contrib.estimator.clip_gradients_by_norm(my_optimizer, 5.0) \n",
+ " linear_classifier = tf.estimator.LinearClassifier(\n",
+ " feature_columns=construct_feature_columns(training_examples),\n",
+ " optimizer=my_optimizer\n",
+ " )\n",
+ " \n",
+ " # Create input functions.\n",
+ " training_input_fn = lambda: my_input_fn(training_examples, \n",
+ " training_targets[\"median_house_value_is_high\"], \n",
+ " batch_size=batch_size)\n",
+ " predict_training_input_fn = lambda: my_input_fn(training_examples, \n",
+ " training_targets[\"median_house_value_is_high\"], \n",
+ " num_epochs=1, \n",
+ " shuffle=False)\n",
+ " predict_validation_input_fn = lambda: my_input_fn(validation_examples, \n",
+ " validation_targets[\"median_house_value_is_high\"], \n",
+ " num_epochs=1, \n",
+ " shuffle=False)\n",
+ " \n",
+ " # Train the model, but do so inside a loop so that we can periodically assess\n",
+ " # loss metrics.\n",
+ " print(\"Training model...\")\n",
+ " print(\"LogLoss (on training data):\")\n",
+ " training_log_losses = []\n",
+ " validation_log_losses = []\n",
+ " for period in range (0, periods):\n",
+ " # Train the model, starting from the prior state.\n",
+ " linear_classifier.train(\n",
+ " input_fn=training_input_fn,\n",
+ " steps=steps_per_period\n",
+ " )\n",
+ " # Take a break and compute predictions. \n",
+ " training_probabilities = linear_classifier.predict(input_fn=predict_training_input_fn)\n",
+ " training_probabilities = np.array([item['probabilities'] for item in training_probabilities])\n",
+ " \n",
+ " validation_probabilities = linear_classifier.predict(input_fn=predict_validation_input_fn)\n",
+ " validation_probabilities = np.array([item['probabilities'] for item in validation_probabilities])\n",
+ " \n",
+ " training_log_loss = metrics.log_loss(training_targets, training_probabilities)\n",
+ " validation_log_loss = metrics.log_loss(validation_targets, validation_probabilities)\n",
+ " # Occasionally print the current loss.\n",
+ " print(\" period %02d : %0.2f\" % (period, training_log_loss))\n",
+ " # Add the loss metrics from this period to our list.\n",
+ " training_log_losses.append(training_log_loss)\n",
+ " validation_log_losses.append(validation_log_loss)\n",
+ " print(\"Model training finished.\")\n",
+ " \n",
+ " # Output a graph of loss metrics over periods.\n",
+ " plt.ylabel(\"LogLoss\")\n",
+ " plt.xlabel(\"Periods\")\n",
+ " plt.title(\"LogLoss vs. Periods\")\n",
+ " plt.tight_layout()\n",
+ " plt.plot(training_log_losses, label=\"training\")\n",
+ " plt.plot(validation_log_losses, label=\"validation\")\n",
+ " plt.legend()\n",
+ "\n",
+ " return linear_classifier"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "UPM_T1FXsTaL",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "linear_classifier = train_linear_classifier_model(\n",
+ " learning_rate=0.000005,\n",
+ " steps=500,\n",
+ " batch_size=20,\n",
+ " training_examples=training_examples,\n",
+ " training_targets=training_targets,\n",
+ " validation_examples=validation_examples,\n",
+ " validation_targets=validation_targets)"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "i-Xo83_aR6s_",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "## Task 3: Calculate Accuracy and plot a ROC Curve for the Validation Set\n",
+ "\n",
+ "A few of the metrics useful for classification are the model [accuracy](https://en.wikipedia.org/wiki/Accuracy_and_precision#In_binary_classification), the [ROC curve](https://en.wikipedia.org/wiki/Receiver_operating_characteristic) and the area under the ROC curve (AUC). We'll examine these metrics.\n",
+ "\n",
+ "`LinearClassifier.evaluate` calculates useful metrics like accuracy and AUC."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "DKSQ87VVIYIA",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 52
+ },
+ "outputId": "01f6ce66-28cd-457c-8730-6d7176c23517"
+ },
+ "cell_type": "code",
+ "source": [
+ "evaluation_metrics = linear_classifier.evaluate(input_fn=predict_validation_input_fn)\n",
+ "\n",
+ "print(\"AUC on the validation set: %0.2f\" % evaluation_metrics['auc'])\n",
+ "print(\"Accuracy on the validation set: %0.2f\" % evaluation_metrics['accuracy'])"
+ ],
+ "execution_count": 15,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "AUC on the validation set: 0.76\n",
+ "Accuracy on the validation set: 0.78\n"
+ ],
+ "name": "stdout"
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "47xGS2uNIYIE",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "You may use class probabilities, such as those calculated by `LinearClassifier.predict`,\n",
+ "and Sklearn's [roc_curve](http://scikit-learn.org/stable/modules/model_evaluation.html#roc-metrics) to\n",
+ "obtain the true positive and false positive rates needed to plot a ROC curve."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "xaU7ttj8IYIF",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 347
+ },
+ "outputId": "f8d2f90e-915e-4d92-f6ef-90614cce67b3"
+ },
+ "cell_type": "code",
+ "source": [
+ "validation_probabilities = linear_classifier.predict(input_fn=predict_validation_input_fn)\n",
+ "# Get just the probabilities for the positive class.\n",
+ "validation_probabilities = np.array([item['probabilities'][1] for item in validation_probabilities])\n",
+ "\n",
+ "false_positive_rate, true_positive_rate, thresholds = metrics.roc_curve(\n",
+ " validation_targets, validation_probabilities)\n",
+ "plt.plot(false_positive_rate, true_positive_rate, label=\"our model\")\n",
+ "plt.plot([0, 1], [0, 1], label=\"random classifier\")\n",
+ "_ = plt.legend(loc=2)"
+ ],
+ "execution_count": 16,
+ "outputs": [
+ {
+ "output_type": "display_data",
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ }
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "PIdhwfgzIYII",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "**See if you can tune the learning settings of the model trained at Task 2 to improve AUC.**\n",
+ "\n",
+ "Often times, certain metrics improve at the detriment of others, and you'll need to find the settings that achieve a good compromise.\n",
+ "\n",
+ "**Verify if all metrics improve at the same time.**"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "XKIqjsqcCaxO",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 653
+ },
+ "outputId": "8d00e86c-e1ef-47f3-f2d2-169e92ac5982"
+ },
+ "cell_type": "code",
+ "source": [
+ "linear_classifier = train_linear_classifier_model(\n",
+ " learning_rate=0.000003,\n",
+ " steps=20000,\n",
+ " batch_size=500,\n",
+ " training_examples=training_examples,\n",
+ " training_targets=training_targets,\n",
+ " validation_examples=validation_examples,\n",
+ " validation_targets=validation_targets)\n",
+ "\n",
+ "evaluation_metrics = linear_classifier.evaluate(input_fn=predict_validation_input_fn)\n",
+ "\n",
+ "print(\"AUC on the validation set: %0.2f\" % evaluation_metrics['auc'])\n",
+ "print(\"Accuracy on the validation set: %0.2f\" % evaluation_metrics['accuracy'])"
+ ],
+ "execution_count": 17,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "Training model...\n",
+ "LogLoss (on training data):\n",
+ " period 00 : 0.51\n",
+ " period 01 : 0.49\n",
+ " period 02 : 0.48\n",
+ " period 03 : 0.48\n",
+ " period 04 : 0.48\n",
+ " period 05 : 0.48\n",
+ " period 06 : 0.48\n",
+ " period 07 : 0.48\n",
+ " period 08 : 0.48\n",
+ " period 09 : 0.48\n",
+ "Model training finished.\n",
+ "AUC on the validation set: 0.82\n",
+ "Accuracy on the validation set: 0.79\n"
+ ],
+ "name": "stdout"
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "image/png": "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\nREREpGj/Dw1t8Mv7UhvFAAAAAElFTkSuQmCC\n",
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ }
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "wCugvl0JdWYL",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "### Solution\n",
+ "\n",
+ "Click below for a possible solution."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "VHosS1g2aetf",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "One possible solution that works is to just train for longer, as long as we don't overfit. \n",
+ "\n",
+ "We can do this by increasing the number the steps, the batch size, or both.\n",
+ "\n",
+ "All metrics improve at the same time, so our loss metric is a good proxy\n",
+ "for both AUC and accuracy.\n",
+ "\n",
+ "Notice how it takes many, many more iterations just to squeeze a few more \n",
+ "units of AUC. This commonly happens. But often even this small gain is worth \n",
+ "the costs."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "dWgTEYMddaA-",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "linear_classifier = train_linear_classifier_model(\n",
+ " learning_rate=0.000003,\n",
+ " steps=20000,\n",
+ " batch_size=500,\n",
+ " training_examples=training_examples,\n",
+ " training_targets=training_targets,\n",
+ " validation_examples=validation_examples,\n",
+ " validation_targets=validation_targets)\n",
+ "\n",
+ "evaluation_metrics = linear_classifier.evaluate(input_fn=predict_validation_input_fn)\n",
+ "\n",
+ "print(\"AUC on the validation set: %0.2f\" % evaluation_metrics['auc'])\n",
+ "print(\"Accuracy on the validation set: %0.2f\" % evaluation_metrics['accuracy'])"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ }
+ ]
+}
\ No newline at end of file
From 50662cb735a05d3e1184f048e51c53680256444d Mon Sep 17 00:00:00 2001
From: Subham <40177225+loneWolf148@users.noreply.github.com>
Date: Sun, 24 Feb 2019 02:39:24 +0530
Subject: [PATCH 10/11] Created using Colaboratory
---
...classification_of_handwritten_digits.ipynb | 2378 +++++++++++++++++
1 file changed, 2378 insertions(+)
create mode 100644 multi_class_classification_of_handwritten_digits.ipynb
diff --git a/multi_class_classification_of_handwritten_digits.ipynb b/multi_class_classification_of_handwritten_digits.ipynb
new file mode 100644
index 0000000..38b8328
--- /dev/null
+++ b/multi_class_classification_of_handwritten_digits.ipynb
@@ -0,0 +1,2378 @@
+{
+ "nbformat": 4,
+ "nbformat_minor": 0,
+ "metadata": {
+ "colab": {
+ "name": "multi-class_classification_of_handwritten_digits.ipynb",
+ "version": "0.3.2",
+ "provenance": [],
+ "collapsed_sections": [
+ "JndnmDMp66FL",
+ "266KQvZoMxMv",
+ "6sfw3LH0Oycm"
+ ],
+ "include_colab_link": true
+ },
+ "kernelspec": {
+ "name": "python2",
+ "display_name": "Python 2"
+ }
+ },
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "view-in-github",
+ "colab_type": "text"
+ },
+ "source": [
+ ""
+ ]
+ },
+ {
+ "metadata": {
+ "id": "JndnmDMp66FL",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "#### Copyright 2017 Google LLC."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "hMqWDc_m6rUC",
+ "colab_type": "code",
+ "cellView": "both",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "# Licensed under the Apache License, Version 2.0 (the \"License\");\n",
+ "# you may not use this file except in compliance with the License.\n",
+ "# You may obtain a copy of the License at\n",
+ "#\n",
+ "# https://www.apache.org/licenses/LICENSE-2.0\n",
+ "#\n",
+ "# Unless required by applicable law or agreed to in writing, software\n",
+ "# distributed under the License is distributed on an \"AS IS\" BASIS,\n",
+ "# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n",
+ "# See the License for the specific language governing permissions and\n",
+ "# limitations under the License."
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "mPa95uXvcpcn",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "# Classifying Handwritten Digits with Neural Networks"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "Fdpn8b90u8Tp",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ ""
+ ]
+ },
+ {
+ "metadata": {
+ "id": "c7HLCm66Cs2p",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "**Learning Objectives:**\n",
+ " * Train both a linear model and a neural network to classify handwritten digits from the classic [MNIST](http://yann.lecun.com/exdb/mnist/) data set\n",
+ " * Compare the performance of the linear and neural network classification models\n",
+ " * Visualize the weights of a neural-network hidden layer"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "HSEh-gNdu8T0",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "Our goal is to map each input image to the correct numeric digit. We will create a NN with a few hidden layers and a Softmax layer at the top to select the winning class."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "2NMdE1b-7UIH",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "## Setup\n",
+ "\n",
+ "First, let's download the data set, import TensorFlow and other utilities, and load the data into a *pandas* `DataFrame`. Note that this data is a sample of the original MNIST training data; we've taken 20000 rows at random."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "4LJ4SD8BWHeh",
+ "colab_type": "code",
+ "cellView": "both",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 231
+ },
+ "outputId": "9d4c07a8-024b-4f4f-e0b4-4b295eae6514"
+ },
+ "cell_type": "code",
+ "source": [
+ "from __future__ import print_function\n",
+ "\n",
+ "import glob\n",
+ "import math\n",
+ "import os\n",
+ "\n",
+ "from IPython import display\n",
+ "from matplotlib import cm\n",
+ "from matplotlib import gridspec\n",
+ "from matplotlib import pyplot as plt\n",
+ "import numpy as np\n",
+ "import pandas as pd\n",
+ "import seaborn as sns\n",
+ "from sklearn import metrics\n",
+ "import tensorflow as tf\n",
+ "from tensorflow.python.data import Dataset\n",
+ "\n",
+ "tf.logging.set_verbosity(tf.logging.ERROR)\n",
+ "pd.options.display.max_rows = 10\n",
+ "pd.options.display.float_format = '{:.1f}'.format\n",
+ "\n",
+ "mnist_dataframe = pd.read_csv(\n",
+ " \"https://download.mlcc.google.com/mledu-datasets/mnist_train_small.csv\",\n",
+ " sep=\",\",\n",
+ " header=None)\n",
+ "\n",
+ "# Use just the first 10,000 records for training/validation.\n",
+ "mnist_dataframe = mnist_dataframe.head(10000)\n",
+ "\n",
+ "mnist_dataframe = mnist_dataframe.reindex(np.random.permutation(mnist_dataframe.index))\n",
+ "mnist_dataframe.head()"
+ ],
+ "execution_count": 3,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ "
0
\n",
+ "
1
\n",
+ "
2
\n",
+ "
3
\n",
+ "
4
\n",
+ "
5
\n",
+ "
6
\n",
+ "
7
\n",
+ "
8
\n",
+ "
9
\n",
+ "
...
\n",
+ "
775
\n",
+ "
776
\n",
+ "
777
\n",
+ "
778
\n",
+ "
779
\n",
+ "
780
\n",
+ "
781
\n",
+ "
782
\n",
+ "
783
\n",
+ "
784
\n",
+ "
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
6302
\n",
+ "
7
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
...
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
286
\n",
+ "
1
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
...
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
4703
\n",
+ "
3
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
...
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
2323
\n",
+ "
1
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
...
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
3062
\n",
+ "
1
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
...
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
5 rows × 785 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " 0 1 2 3 4 5 6 7 8 9 ... 775 776 777 \\\n",
+ "6302 7 0 0 0 0 0 0 0 0 0 ... 0 0 0 \n",
+ "286 1 0 0 0 0 0 0 0 0 0 ... 0 0 0 \n",
+ "4703 3 0 0 0 0 0 0 0 0 0 ... 0 0 0 \n",
+ "2323 1 0 0 0 0 0 0 0 0 0 ... 0 0 0 \n",
+ "3062 1 0 0 0 0 0 0 0 0 0 ... 0 0 0 \n",
+ "\n",
+ " 778 779 780 781 782 783 784 \n",
+ "6302 0 0 0 0 0 0 0 \n",
+ "286 0 0 0 0 0 0 0 \n",
+ "4703 0 0 0 0 0 0 0 \n",
+ "2323 0 0 0 0 0 0 0 \n",
+ "3062 0 0 0 0 0 0 0 \n",
+ "\n",
+ "[5 rows x 785 columns]"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 3
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "kg0-25p2mOi0",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "Each row represents one labeled example. Column 0 represents the label that a human rater has assigned for one handwritten digit. For example, if Column 0 contains '6', then a human rater interpreted the handwritten character as the digit '6'. The ten digits 0-9 are each represented, with a unique class label for each possible digit. Thus, this is a multi-class classification problem with 10 classes."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "PQ7vuOwRCsZ1",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ ""
+ ]
+ },
+ {
+ "metadata": {
+ "id": "dghlqJPIu8UM",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "Columns 1 through 784 contain the feature values, one per pixel for the 28×28=784 pixel values. The pixel values are on a gray scale in which 0 represents white, 255 represents black, and values between 0 and 255 represent shades of gray. Most of the pixel values are 0; you may want to take a minute to confirm that they aren't all 0. For example, adjust the following text block to print out the values in column 72."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "2ZkrL5MCqiJI",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 415
+ },
+ "outputId": "ffe2517d-b85e-46b1-9b27-87f9bfdb2025"
+ },
+ "cell_type": "code",
+ "source": [
+ "mnist_dataframe.loc[:, 72:72]"
+ ],
+ "execution_count": 4,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ "
72
\n",
+ "
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
6302
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
286
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
4703
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
2323
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
3062
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
...
\n",
+ "
...
\n",
+ "
\n",
+ "
\n",
+ "
4152
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
1201
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
8698
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
2893
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
8670
\n",
+ "
0
\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
10000 rows × 1 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " 72\n",
+ "6302 0\n",
+ "286 0\n",
+ "4703 0\n",
+ "2323 0\n",
+ "3062 0\n",
+ "... ..\n",
+ "4152 0\n",
+ "1201 0\n",
+ "8698 0\n",
+ "2893 0\n",
+ "8670 0\n",
+ "\n",
+ "[10000 rows x 1 columns]"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 4
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "vLNg2VxqhUZ",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "Now, let's parse out the labels and features and look at a few examples. Note the use of `loc` which allows us to pull out columns based on original location, since we don't have a header row in this data set."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "JfFWWvMWDFrR",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "def parse_labels_and_features(dataset):\n",
+ " \"\"\"Extracts labels and features.\n",
+ " \n",
+ " This is a good place to scale or transform the features if needed.\n",
+ " \n",
+ " Args:\n",
+ " dataset: A Pandas `Dataframe`, containing the label on the first column and\n",
+ " monochrome pixel values on the remaining columns, in row major order.\n",
+ " Returns:\n",
+ " A `tuple` `(labels, features)`:\n",
+ " labels: A Pandas `Series`.\n",
+ " features: A Pandas `DataFrame`.\n",
+ " \"\"\"\n",
+ " labels = dataset[0]\n",
+ "\n",
+ " # DataFrame.loc index ranges are inclusive at both ends.\n",
+ " features = dataset.loc[:,1:784]\n",
+ " # Scale the data to [0, 1] by dividing out the max value, 255.\n",
+ " features = features / 255\n",
+ "\n",
+ " return labels, features"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "mFY_-7vZu8UU",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 343
+ },
+ "outputId": "5d126d0d-19ca-4edd-ca1f-649ee37757f4"
+ },
+ "cell_type": "code",
+ "source": [
+ "training_targets, training_examples = parse_labels_and_features(mnist_dataframe[:7500])\n",
+ "training_examples.describe()"
+ ],
+ "execution_count": 6,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/html": [
+ "