"
+ ],
+ "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": 4
+ }
+ ]
+ },
+ {
+ "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": {}
+ },
+ "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": 0,
+ "outputs": []
+ },
+ {
+ "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": 50
+ },
+ "outputId": "df332043-6240-4b8b-a808-822632dc518c"
+ },
+ "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": 10,
+ "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": 84
+ },
+ "outputId": "1c7e7d82-1833-4d37-99b6-db6a2bc7b775"
+ },
+ "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": 11,
+ "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": 286
+ },
+ "outputId": "a46c1157-eb5f-4387-9f69-ad24fb1df8df"
+ },
+ "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": 12,
+ "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": 12
+ }
+ ]
+ },
+ {
+ "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": "fa3f12b3-5170-40ca-e971-b7ad00118e2a"
+ },
+ "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": 14,
+ "outputs": [
+ {
+ "output_type": "display_data",
+ "data": {
+ "image/png": "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\n+OEPf5juJhAREemOJqbWiYiIKDEM5ERERDrGQE5ERKRjDOREREQ6xkBORESkYwzkREREOsZATkRE\npGMM5ERERDpmEGKdUEJERESaxRE5ERGRjjGQExER6RgDORERkY4xkBMREekYAzkREZGOMZATERHp\nWJ8O5D/72c+wcuVKrFq1CkeOHEl3cyQ988wzWLlyJZYuXYqtW7fi3LlzWLNmDcrLy3HvvffC5/MB\nADZv3oylS5di+fLleOONNwAAfr8f9913H2666SasXr0aNTU16ewKPB4PSktL8dZbb+m6H5s3b8b1\n11+Pb37zm9i5c6cu+9LW1oZ77rkHa9aswapVq7Br1y4cP34cq1atwqpVq7B27drwtb/73e+wbNky\nLF++HB988AEAoKWlBXfccQduuukm3HbbbWhqaur1PlRVVaG0tBSvvvoqAKjye5D6GfR2P26++Was\nXr0aN998M5xOpy77EbJr1y6MGzcu/G+99SPUtmXLluHb3/42mpubtdUPoY/av3+/cMcddwiCIAjV\n1dXCihUr0twicXv37hW+853vCIIgCI2NjcK8efOEBx98UHjnnXcEQRCEX/ziF8Jrr70mtLW1Cddc\nc43gdruFjo4O4Rvf+IbgcrmEt956S3j00UcFQRCEXbt2Cffee2/a+iIIgvDcc88J3/zmN4U333xT\nt/1obGwUrrnmGqGlpUW4cOGC8PDDD+uyLxs2bBB+/vOfC4IgCOfPnxeuvfZaYfXq1cLhw4cFQRCE\nH/zgB8LOnTuF06dPCzfeeKPg9XqFhoYG4dprrxU6OzuFX/3qV8K6desEQRCEP/3pT8IzzzzTq+1v\na2sTVq9eLTz88MPChg0bBEEQVPk9iP0Mersf999/v/C///u/giAIwquvvio8/fTTuuyHIAiCx+MR\nVq9eLcyZMyd8nd768eqrrwpPPPGEIAhdf+vbtm3TVD/67Ih87969KC0tBQCMGjUKzc3NaG1tTXOr\nerryyivxX//1XwCAvLw8dHR0YP/+/Vi4cCEAYP78+di7dy8OHz6MSZMmwW63w2azoaSkBJWVldi7\ndy8WLVoEAJg9ezYqKyvT1pdTp06huroaV199NQDoth979+7FrFmzkJubi+LiYjzxxBO67EtBQUF4\nFO12u5Gfn4/a2lpMnjy5Wz/279+PuXPnwmKxoLCwEEOGDEF1dXW3foSu7U0WiwXr1q1DcXFx+GvJ\n/h58Pp/oz6C3+7F27Vpce+21AC79nvTYDwB48cUXUV5ejv/f3p2FRBW3cRz/jjNOpZWZOmO2YWYY\nFdpiKS7QIrTajRXVeFHRSotFWYpUkOVMeVEZUlRQFGFmkUW0lxXZgghhVhdtUCO4RFJZqTP+3wtf\nh3yzvVc9+Xzuzv+cmfP8znF85pwZ5m80GgE0meP69evEx8cDMGvWLMaPH9+ucnTYRl5VVYW3t7dr\nuWfPnq7bV+2JXq/Hw8MDgLy8PGJjY/n06ZPrReHj40NlZSVVVVX07NnT9bimPF+Ou7m5odPpXLcb\nW5vNZmPDhg2uZa3meP36NZ8/f2bJkiXMmTOHO3fuaDLLlClTKCsrIy4uDovFQnJyMt27d3et/5Uc\nPj4+VFRUtGr9BoOBzp07Nxv70/NQVVXV4jFo7RweHh7o9XqcTifHjh1j2rRpmszx4sULnjx5wqRJ\nk1xjWsxht9u5efMmiYmJrF69murq6naVo8M28v+l2vkv1V65coW8vDw2btzYbPxbdf/q+P/b6dOn\nCQsLo2/fvi2u10qOJtXV1ezZswer1UpKSkqzerSSJT8/n4CAAC5fvszhw4dZt27dT9XV0nhbn4+W\n/I3z0Ja5nE4nycnJREREEBkZ+dV6LeTIyMggJSXlu9toIYdSisDAQI4cOUJwcDD79u1rcZtvPfZn\nt/1dHbaRm0wmqqqqXMsVFRX4+fm1YUXfduvWLfbu3cv+/fvp1q0bHh4efP78GYDy8nJMJlOLeZrG\nm9751dfXo5RyXbG0poKCAq5evcrMmTM5ceIE2dnZmswBje+mhw8fjsFgoF+/fnh6euLp6am5LMXF\nxURHRwMQEhJCbW0tb9++da3/Vo4vx5tyNI21tT/9m/Lz82v2pb22zJWSkkL//v1Zvnw50PL/rPac\no7y8nOfPn7N27VpmzpxJRUUFFotFczkAfH19CQ8PByA6OpqnT5+2qxwdtpFHRUVx8eJFAEpLSzGZ\nTHTt2rWNq/ra+/fv2b59O/v27aNHjx5A4+cuTbVfunSJmJgYQkNDKSkp4d27d9TU1FBcXMyoUaOI\nioriwoULQOPnPGPGjGmTHDt37uTkyZPk5uYyY8YMli1bpskc0PhCvnv3Lg0NDbx9+5aPHz9qMkv/\n/v158OAB0Hjr0NPTk6CgIIqKiprliIiIoKCggLq6OsrLy6moqGDgwIHNcjRt29b+9Dy4u7szYMCA\nr45Baztz5gzu7u6sXLnSNaa1HGazmStXrpCbm0tubi4mk4mjR49qLgdAbGwst27dAhr7RWBgYLvK\n0aFnP8vMzKSoqAidTsemTZsICQlp65K+cvz4cbKysggMDHSNWa1W0tLSqK2tJSAggIyMDNzd3blw\n4QIHDx5Ep9NhsViIj4/H6XSSlpbGy5cvMRqNWK1WevXq1YaJICsri969exMdHc369es1mSMnJ4e8\nvDwAli5dyrBhwzSXpaamhtTUVN68eYPD4WDVqlX4+fmxceNGGhoaCA0Ndd0WPXLkCGfPnkWn05GU\nlERkZCQ1NTWsW7eO6upqunfvzo4dO+jWrVur1f/w4UNsNht2ux2DwYDZbCYzM5MNGzb80Xl4+vRp\ni8egNXO8efOGTp06uS4ugoKC2Lx5s+ZyZGVluS5Axo0bx7Vr1wA0lyMzM5OtW7dSWVmJh4cHNpsN\nX1/fdpOjQzdyIYQQQus67K11IYQQ4l8gjVwIIYTQMGnkQgghhIZJIxdCCCE0TBq5EEIIoWHSyIUQ\nQggNk0YuhMbl5+d/d/2NGzd+OMVoYmIihYWFf7MsIUQrkUYuhIY5nU6ys7O/u82hQ4dc8ycLIf49\nhrYuQAjx+1JTU7Hb7cyfP5/JkyeTk5NDly5d8PHxIT09nTNnzlBUVMTatWvJyMjgxYsXHDhwAKPR\niNPpZPv27fTp0+eH+3n9+jVLly5l0KBBBAcHs3DhQrZt20ZpaSkAERERJCUlAZCdnU1BQQEGg4Hg\n4GDS0tIoLy9n8eLFREVFUVRUhLe3N/Hx8eTn52O329m1axchISFkZmZy9+5djEYjZrMZm83WZr+p\nL4Rm/LWZzYUQre7Vq1cqJiZG2e12FRsbq96/f6+UUspqtaqsrCyllFJjx45VL1++VEoplZeXp+x2\nu1JKqb179yqr1aqUUspisajbt29/dz+DBw9Wz549U0opdfbsWbVo0SLV0NCgHA6HSkhIUPfu3VPF\nxcVq+vTpqq6uTiml1IoVK9SpU6dcj3/+/Lmrpqb6du/erdLT01V1dbUKCwtTDodDKaXUuXPnXLUK\nIb5NrsiF+Ac8evSIIUOGuH6be/To0eTk5Hy1na+vL+vXr0cpRWVlJcOHD//pfXh5eTFgwAAAHjx4\nQGRkJDqdDr1ez6hRoygpKUGv1xMeHo67u7urjpKSEsLDw/H29nbNGWA2mxkxYgQA/v7+lJWV4eXl\nRUxMDBaLhbi4OCZPnoy/v/8fHRchOgL5jFyIf5BSCp1O12ysvr6epKQktmzZwtGjR0lMTPyl52xq\nzsBXz920v2+NA+j1+mbrvlxW/53yYffu3aSnpwNgsVh4/PjxL9UoREckjVwIDXNzc8PhcDB06FBK\nS0v58OEDAIWFhYSGhgKNTdfhcFBTU4Obmxu9e/emtraWq1evUldX91v7DQsLo7CwEKUUDoeD+/fv\nExoaSlhYGPfu3aO+vh6AO3fuuOr4kVevXnHo0CGCgoKYP38+cXFxPHny5LfqE6IjkVvrQmiYyWTC\n19eXZcuWsWjRIubNm4fRaMTf3581a9YAjfOnL1myBJvNxtSpU0lISCAgIIAFCxaQnJzM+fPnf3m/\nEydOpLi4mNmzZ9PQ0MCECRMYOXIkAFOmTGHu3Lm4ubkxZMgQpk6dSllZ2Q+f02w28+jRIxISEvD0\n9MTLy4vly5f/cm1CdDQyjakQQgihYXJFLoQAGm9tp6amtrguNTWVwYMHt3JFQoifIVfkQgghhIbJ\nl92EEEIIDZNGLoQQQmiYNHIhhBBCw6SRCyGEEBomjVwIIYTQsP8ATraK8eIsh+sAAAAASUVORK5C\nYII=\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": {
+ "base_uri": "https://localhost:8080/",
+ "height": 940
+ },
+ "outputId": "a846f00a-c9d9-447e-c383-59bd87914702"
+ },
+ "cell_type": "code",
+ "source": [
+ "train_model(\n",
+ " learning_rate=0.00001,\n",
+ " steps=100,\n",
+ " batch_size=1\n",
+ ")"
+ ],
+ "execution_count": 16,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "Training model...\n",
+ "RMSE (on training data):\n",
+ " period 00 : 236.32\n",
+ " period 01 : 235.11\n",
+ " period 02 : 233.90\n",
+ " period 03 : 232.70\n",
+ " period 04 : 231.50\n",
+ " period 05 : 230.31\n",
+ " period 06 : 229.13\n",
+ " period 07 : 227.96\n",
+ " period 08 : 226.79\n",
+ " period 09 : 225.63\n",
+ "Model training finished.\n"
+ ],
+ "name": "stdout"
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ " predictions targets\n",
+ "count 17000.0 17000.0\n",
+ "mean 13.2 207.3\n",
+ "std 10.9 116.0\n",
+ "min 0.0 15.0\n",
+ "25% 7.3 119.4\n",
+ "50% 10.6 180.4\n",
+ "75% 15.8 265.0\n",
+ "max 189.7 500.0"
+ ],
+ "text/html": [
+ "
"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ }
+ }
+ ]
+ },
+ {
+ "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": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "train_model(\n",
+ " learning_rate=0.00002,\n",
+ " steps=500,\n",
+ " batch_size=5\n",
+ ")"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "M8H0_D4vYa49",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "This is just one possible configuration; there may be other combinations of settings that also give good results. Note that in general, this exercise isn't about finding the *one best* setting, but to help build your intutions about how tweaking the model configuration affects prediction quality."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "QU5sLyYTqzqL",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "### Is There a Standard Heuristic for Model Tuning?\n",
+ "\n",
+ "This is a commonly asked question. The short answer is that the effects of different hyperparameters are data dependent. So there are no hard-and-fast rules; you'll need to test on your data.\n",
+ "\n",
+ "That said, here are a few rules of thumb that may help guide you:\n",
+ "\n",
+ " * Training error should steadily decrease, steeply at first, and should eventually plateau as training converges.\n",
+ " * If the training has not converged, try running it for longer.\n",
+ " * If the training error decreases too slowly, increasing the learning rate may help it decrease faster.\n",
+ " * But sometimes the exact opposite may happen if the learning rate is too high.\n",
+ " * If the training error varies wildly, try decreasing the learning rate.\n",
+ " * Lower learning rate plus larger number of steps or larger batch size is often a good combination.\n",
+ " * Very small batch sizes can also cause instability. First try larger values like 100 or 1000, and decrease until you see degradation.\n",
+ "\n",
+ "Again, never go strictly by these rules of thumb, because the effects are data dependent. Always experiment and verify."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "GpV-uF_cBCBU",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "## Task 2: Try a Different Feature\n",
+ "\n",
+ "See if you can do any better by replacing the `total_rooms` feature with the `population` feature.\n",
+ "\n",
+ "Don't take more than 5 minutes on this portion."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "YMyOxzb0ZlAH",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 940
+ },
+ "outputId": "091b7d05-1052-4c62-bc45-66a64424ba93"
+ },
+ "cell_type": "code",
+ "source": [
+ "# YOUR CODE HERE\n",
+ "train_model(\n",
+ " learning_rate=0.00002,\n",
+ " steps=1000,\n",
+ " batch_size=5,\n",
+ " input_feature=\"population\"\n",
+ ")"
+ ],
+ "execution_count": 17,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "Training model...\n",
+ "RMSE (on training data):\n",
+ " period 00 : 225.86\n",
+ " period 01 : 214.84\n",
+ " period 02 : 205.05\n",
+ " period 03 : 196.92\n",
+ " period 04 : 190.21\n",
+ " period 05 : 185.25\n",
+ " period 06 : 181.36\n",
+ " period 07 : 178.49\n",
+ " period 08 : 176.70\n",
+ " period 09 : 175.99\n",
+ "Model training finished.\n"
+ ],
+ "name": "stdout"
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ " predictions targets\n",
+ "count 17000.0 17000.0\n",
+ "mean 120.4 207.3\n",
+ "std 96.7 116.0\n",
+ "min 0.3 15.0\n",
+ "25% 66.5 119.4\n",
+ "50% 98.3 180.4\n",
+ "75% 144.9 265.0\n",
+ "max 3004.5 500.0"
+ ],
+ "text/html": [
+ "
"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ }
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "text",
+ "id": "NqIbXxx222ea"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "## Train the Neural Network\n",
+ "\n",
+ "Next, we'll train the neural network."
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "code",
+ "id": "6k3xYlSg27VB",
+ "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": {
+ "colab_type": "code",
+ "id": "De9jwyy4wTUT",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "def my_input_fn(features, targets, batch_size=1, shuffle=True, num_epochs=None):\n",
+ " \"\"\"Trains a neural network 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": {
+ "colab_type": "code",
+ "id": "W-51R3yIKxk4",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "def train_nn_regression_model(\n",
+ " my_optimizer,\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",
+ " my_optimizer: An instance of `tf.train.Optimizer`, the optimizer to use.\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 tuple `(estimator, training_losses, validation_losses)`:\n",
+ " estimator: the trained `DNNRegressor` object.\n",
+ " training_losses: a `list` containing the training loss values taken during training.\n",
+ " validation_losses: a `list` containing the validation loss values taken during training.\n",
+ " \"\"\"\n",
+ "\n",
+ " periods = 10\n",
+ " steps_per_period = steps / periods\n",
+ " \n",
+ " # Create a DNNRegressor object.\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, training_rmse, validation_rmse"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "colab_type": "code",
+ "id": "KueReMZ9Kxk7",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 769
+ },
+ "outputId": "64472030-c8d7-4abd-9251-610174b33b2b"
+ },
+ "cell_type": "code",
+ "source": [
+ "_ = train_nn_regression_model(\n",
+ " my_optimizer=tf.train.GradientDescentOptimizer(learning_rate=0.0007),\n",
+ " steps=5000,\n",
+ " batch_size=70,\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": 7,
+ "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 : 161.05\n",
+ " period 01 : 153.87\n",
+ " period 02 : 147.81\n",
+ " period 03 : 139.68\n",
+ " period 04 : 130.09\n",
+ " period 05 : 121.78\n",
+ " period 06 : 114.23\n",
+ " period 07 : 111.08\n",
+ " period 08 : 107.81\n",
+ " period 09 : 106.37\n",
+ "Model training finished.\n",
+ "Final RMSE (on training data): 106.37\n",
+ "Final RMSE (on validation data): 104.68\n"
+ ],
+ "name": "stdout"
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "image/png": "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\nbt/Dw6N6xGn48OFcvHiRy5cvEx0dzcCBA9FqtTg5Od0wzXaz1NRUIiMjb/h3/VoZPz8//Pz8qh9b\nWloSEREBwK+//kqXLl1o1qwZAOPGjePAgQNUVFQA10aknJ2db+mzT58+HD9+nNzcXAB++uknIiMj\nsbe3Jzs7my1btpCXl0dUVBSjRo3S6ef2J0VRWLt2LR4eHvj5+bFr1y6GDh2Kh4cHAA899FD1MQAQ\nERGBhYXFDW3UdFweOnSI3r17Y2Njg6WlZXWuAFxcXPj22285c+YMfn5+vPvuu7WKXQhjkDUwQtzF\nn2tgsrOzq6c/tNprp052djYODg7V73VwcCArK4vs7Gzs7OxQqVTVr/35S8zV1fWufXbv3p05c+aQ\nm5vL1q1beeKJJ6oX1AIUFBQwf/583nvvPeDalFLHjh0B2LJlCytXrqSoqIiqqiqU67Y702g01YuP\n1Wo1VVVVt+3fwsKC6dOnM336dPLz89m+fTtvvPEGvr6+5OXl3bAex8XF5a7fR5e4bG1tAcjPzyc5\nOZnIyMjq183NzcnOziYvLw87O7vq5+3t7SkqKrptf3dbA3N93m5+nJOTc8N3tLOzQ1EUcnJybvvZ\nP1lbW9OtWzd2795Np06dyM/Pp1OnTqhUKhYvXsxnn33GvHnzCA8P59VXX73reqLKysrqn4OiKLRq\n1YolS5agVqspKCjgp59+Yt++fdWvl5eX3/H7ATUel3l5ebi7u9/w/J/eeOMNli5dysMPP4ylpSXP\nPvvsDfkR4l6QAkYIHTk7OxMVFcXbb7/N0qVLAXB1da3+axsgNzcXV1dXXFxcyMvLQ1GU6l8Wubm5\nOv+yNzMzo2/fvnz77bdcuHCBkJCQGwoYd3d3HnnkkVtGIK5cucKcOXNYv349bdu25fz58wwePLhW\n3zM7O5vExMTqERB7e3vGjx/P3r17SUpKws7OjoKCghve/6ebi6K8vLxax+Xu7k6LFi3YuHHjLa/Z\n29vfsW9DcnFxITY2tvpxXl4earUaJyenu3528ODB/PTTT+Tk5DB48ODq/Hft2pWuXbtSXFzMggUL\neOedd+46knHzIt7rubu78+CDDzJ79uxafa87HZc1/WxdXV2ZO3cuc+fOZd++fTz11FP07NkTGxsb\nnfsWwtBkCkmIWnj44YeJjY3l4MGDwLUpgw0bNlBZWUlxcTGbN2+md+/e+Pr64unpWb1INiYmhszM\n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\n",
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ }
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "text",
+ "id": "flxmFt0KKxk9"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "## Linear Scaling\n",
+ "It can be a good standard practice to normalize the inputs to fall within the range -1, 1. This helps SGD not get stuck taking steps that are too large in one dimension, or too small in another. Fans of numerical optimization may note that there's a connection to the idea of using a preconditioner here."
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "code",
+ "id": "Dws5rIQjKxk-",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "def linear_scale(series):\n",
+ " min_val = series.min()\n",
+ " max_val = series.max()\n",
+ " scale = (max_val - min_val) / 2.0\n",
+ " return series.apply(lambda x:((x - min_val) / scale) - 1.0)"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "colab_type": "text",
+ "id": "MVmuHI76N2Sz"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "## Task 1: Normalize the Features Using Linear Scaling\n",
+ "\n",
+ "**Normalize the inputs to the scale -1, 1.**\n",
+ "\n",
+ "**Spend about 5 minutes training and evaluating on the newly normalized data. How well can you do?**\n",
+ "\n",
+ "As a rule of thumb, NN's train best when the input features are roughly on the same scale.\n",
+ "\n",
+ "Sanity check your normalized data. (What would happen if you forgot to normalize one feature?)\n"
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "code",
+ "id": "yD948ZgAM6Cx",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 652
+ },
+ "outputId": "28720e5b-8c95-4fa8-c6ec-9e32bba19840"
+ },
+ "cell_type": "code",
+ "source": [
+ "def normalize_linear_scale(examples_dataframe):\n",
+ " \"\"\"Returns a version of the input `DataFrame` that has all its features normalized linearly.\"\"\"\n",
+ " #\n",
+ " # Your code here: normalize the inputs.\n",
+ " #\n",
+ " processed_features = pd.DataFrame()\n",
+ " processed_features[\"latitude\"] = linear_scale(examples_dataframe[\"latitude\"])\n",
+ " processed_features[\"longitude\"] = linear_scale(examples_dataframe[\"longitude\"])\n",
+ " processed_features[\"housing_median_age\"] = linear_scale(examples_dataframe[\"housing_median_age\"])\n",
+ " processed_features[\"total_rooms\"] = linear_scale(examples_dataframe[\"total_rooms\"])\n",
+ " processed_features[\"total_bedrooms\"] = linear_scale(examples_dataframe[\"total_bedrooms\"])\n",
+ " processed_features[\"population\"] = linear_scale(examples_dataframe[\"population\"])\n",
+ " processed_features[\"households\"] = linear_scale(examples_dataframe[\"households\"])\n",
+ " processed_features[\"median_income\"] = linear_scale(examples_dataframe[\"median_income\"])\n",
+ " processed_features[\"rooms_per_person\"] = linear_scale(examples_dataframe[\"rooms_per_person\"])\n",
+ " return processed_features\n",
+ "\n",
+ "normalized_dataframe = normalize_linear_scale(preprocess_features(california_housing_dataframe))\n",
+ "normalized_training_examples = normalized_dataframe.head(12000)\n",
+ "normalized_validation_examples = normalized_dataframe.tail(5000)\n",
+ "\n",
+ "_ = train_nn_regression_model(\n",
+ " my_optimizer=tf.train.GradientDescentOptimizer(learning_rate=0.005),\n",
+ " steps=2000,\n",
+ " batch_size=50,\n",
+ " hidden_units=[10, 10],\n",
+ " training_examples=normalized_training_examples,\n",
+ " training_targets=training_targets,\n",
+ " validation_examples=normalized_validation_examples,\n",
+ " validation_targets=validation_targets)\n",
+ "\n"
+ ],
+ "execution_count": 11,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "Training model...\n",
+ "RMSE (on training data):\n",
+ " period 00 : 170.54\n",
+ " period 01 : 113.88\n",
+ " period 02 : 101.47\n",
+ " period 03 : 85.72\n",
+ " period 04 : 76.96\n",
+ " period 05 : 74.70\n",
+ " period 06 : 73.20\n",
+ " period 07 : 72.14\n",
+ " period 08 : 71.52\n",
+ " period 09 : 71.00\n",
+ "Model training finished.\n",
+ "Final RMSE (on training data): 71.00\n",
+ "Final RMSE (on validation data): 69.40\n"
+ ],
+ "name": "stdout"
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjAAAAGACAYAAACz01iHAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJzs3Xd0VHX6x/H3nZn0XmYggPQOIQVQ\nEVQQkUhZOzYQXVZ3FVZ/imvZVXfXjm1tYGFVFNZdBSsqYkEUGwoJkNBCr4H0Qnom9/cHMhBSCJDJ\nTMLndY7nMHdueSbP5OTxWw3TNE1EREREWhCLpwMQEREROV4qYERERKTFUQEjIiIiLY4KGBEREWlx\nVMCIiIhIi6MCRkRERFocm6cDEPFmvXr1omPHjlitVgCcTieDBw/mvvvuIzAw8ITv++677zJhwoRa\nx99//33uvfdeXn75ZUaMGOE6XlZWxllnncUFF1zA448/fsLPbaydO3fy6KOPsm3bNgACAgKYNm0a\n559/vtuffTxmzZrFzp07a/1Mli9fzpQpU+jQoUOtaz7//PPmCu+k7N69m5EjR9KlSxcATNMkOjqa\nv/3tb/Tt2/e47vX000/Trl07rr766kZf89FHH7FgwQLmzp17XM8SaS4qYESOYe7cubRt2xaAiooK\nbr/9dl555RVuv/32E7pfVlYW//73v+ssYABiYmL45JNPahQw33zzDaGhoSf0vBNx5513ctFFF/Hy\nyy8DsHr1aiZPnsyiRYuIiYlptjhORkxMTIspVupjtVprfIbPPvuMqVOnsnjxYnx9fRt9n+nTp7sj\nPBGPUheSyHHw9fXl7LPPZv369QCUl5fzwAMPMHr0aC688EIef/xxnE4nABs2bOCqq64iKSmJiy66\niGXLlgFw1VVXsXfvXpKSkqioqKj1jMTERJYvX05paanr2GeffcbQoUNdrysqKnj44YcZPXo05513\nnqvQAEhJSeHSSy8lKSmJMWPG8OOPPwIH/49+2LBhvPXWW4wfP56zzz6bzz77rM7PmZ6eTlxcnOt1\nXFwcixcvdhVyL774Iueeey4XX3wxr776Kueddx4A99xzD7NmzXJdd+TrY8X16KOPMnHiRABWrlzJ\nZZddxqhRo5gwYQK7du0CDrZE/d///R8jRoxg4sSJ7Nu37xgZq9v777/PtGnTmDx5Mk888QTLly/n\nqquu4rbbbnP9sV+0aBHjxo0jKSmJ6667jp07dwLwwgsvcN9993H55ZczZ86cGve97bbbeP31112v\n169fz7Bhw6iuruZf//oXo0ePZvTo0Vx33XXs37//uOMeM2YMZWVlbN26FYB33nmHpKQkzjvvPO64\n4w7KysqAgz/3xx57jPHjx7No0aIaeajve1ldXc2DDz7I8OHDufzyy9mwYYPrub/88guXXHIJY8aM\n4cILL2TRokXHHbtIkzNFpF49e/Y0MzIyXK/z8/PNa6+91pw1a5Zpmqb5yiuvmDfeeKNZWVlplpaW\nmpdddpn54Ycfmk6n07zwwgvNhQsXmqZpmmvWrDEHDx5sFhUVmT///LN5/vnn1/m89957z7z77rvN\nO++803VtUVGROXLkSHP+/Pnm3XffbZqmab744ovm5MmTzfLycrO4uNi8+OKLzSVLlpimaZrjxo0z\nP/nkE9M0TfODDz5wPWvXrl1m3759zblz55qmaZqfffaZOWrUqDrj+POf/2yOGDHCfPPNN83NmzfX\neG/jxo3moEGDzMzMTLOystK8+eabzREjRpimaZp33323OXPmTNe5R75uKK5+/fqZ77//vuvzDh48\n2Pz+++9N0zTNhQsXmpdccolpmqY5b94889prrzUrKyvN3Nxcc8SIEa6fyZEa+hkf+jnHx8eb27Zt\nc50fGxtr/vjjj6ZpmuaePXvMgQMHmtu3bzdN0zRfe+01c/LkyaZpmubzzz9vDhs2zMzJyal1308/\n/dS89tprXa+fe+4586GHHjLT09PNCy64wKyoqDBN0zTfeust84MPPqg3vkM/lz59+tQ6PnjwYHPL\nli3mr7/+ag4ZMsTct2+faZqmef/995uPP/64aZoHf+7jx483y8rKXK9nzpzZ4Pdy6dKl5gUXXGAe\nOHDALC0tNS+//HJz4sSJpmma5qWXXmouX77cNE3T3LZtm3nHHXc0GLtIc1ALjMgxTJo0iaSkJEaO\nHMnIkSM588wzufHGGwFYunQpEyZMwGaz4e/vz/jx4/nhhx/YvXs32dnZjB07FoDY2FjatWtHampq\no545duxYPvnkEwC++uorRowYgcVy+Nf1m2++4ZprrsHX15fAwEAuuugivvjiCwA+/PBDLrzwQgAG\nDhzoar0AqKqq4tJLLwWgX79+7N27t87nP/nkk1x77bUsXLiQcePGcd555/Hf//4XONg6MnjwYOx2\n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\nYmHhx8iBgwAAAABJRU5ErkJggg==\n",
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ }
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "text",
+ "id": "jFfc3saSxg6t"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "### Solution\n",
+ "\n",
+ "Click below for one possible solution."
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "text",
+ "id": "Ax_IIQVRx4gr"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "Since normalization uses min and max, we have to ensure it's done on the entire dataset at once. \n",
+ "\n",
+ "We can do that here because all our data is in a single DataFrame. If we had multiple data sets, a good practice would be to derive the normalization parameters from the training set and apply those identically to the test set."
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "code",
+ "id": "D-bJBXrJx-U_",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "def normalize_linear_scale(examples_dataframe):\n",
+ " \"\"\"Returns a version of the input `DataFrame` that has all its features normalized linearly.\"\"\"\n",
+ " processed_features = pd.DataFrame()\n",
+ " processed_features[\"latitude\"] = linear_scale(examples_dataframe[\"latitude\"])\n",
+ " processed_features[\"longitude\"] = linear_scale(examples_dataframe[\"longitude\"])\n",
+ " processed_features[\"housing_median_age\"] = linear_scale(examples_dataframe[\"housing_median_age\"])\n",
+ " processed_features[\"total_rooms\"] = linear_scale(examples_dataframe[\"total_rooms\"])\n",
+ " processed_features[\"total_bedrooms\"] = linear_scale(examples_dataframe[\"total_bedrooms\"])\n",
+ " processed_features[\"population\"] = linear_scale(examples_dataframe[\"population\"])\n",
+ " processed_features[\"households\"] = linear_scale(examples_dataframe[\"households\"])\n",
+ " processed_features[\"median_income\"] = linear_scale(examples_dataframe[\"median_income\"])\n",
+ " processed_features[\"rooms_per_person\"] = linear_scale(examples_dataframe[\"rooms_per_person\"])\n",
+ " return processed_features\n",
+ "\n",
+ "normalized_dataframe = normalize_linear_scale(preprocess_features(california_housing_dataframe))\n",
+ "normalized_training_examples = normalized_dataframe.head(12000)\n",
+ "normalized_validation_examples = normalized_dataframe.tail(5000)\n",
+ "\n",
+ "_ = train_nn_regression_model(\n",
+ " my_optimizer=tf.train.GradientDescentOptimizer(learning_rate=0.005),\n",
+ " steps=2000,\n",
+ " batch_size=50,\n",
+ " hidden_units=[10, 10],\n",
+ " training_examples=normalized_training_examples,\n",
+ " training_targets=training_targets,\n",
+ " validation_examples=normalized_validation_examples,\n",
+ " validation_targets=validation_targets)"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "colab_type": "text",
+ "id": "MrwtdStNJ6ZQ"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "## Task 2: Try a Different Optimizer\n",
+ "\n",
+ "** Use the Adagrad and Adam optimizers and compare performance.**\n",
+ "\n",
+ "The Adagrad optimizer is one alternative. The key insight of Adagrad is that it modifies the learning rate adaptively for each coefficient in a model, monotonically lowering the effective learning rate. This works great for convex problems, but isn't always ideal for the non-convex problem Neural Net training. You can use Adagrad by specifying `AdagradOptimizer` instead of `GradientDescentOptimizer`. Note that you may need to use a larger learning rate with Adagrad.\n",
+ "\n",
+ "For non-convex optimization problems, Adam is sometimes more efficient than Adagrad. To use Adam, invoke the `tf.train.AdamOptimizer` method. This method takes several optional hyperparameters as arguments, but our solution only specifies one of these (`learning_rate`). In a production setting, you should specify and tune the optional hyperparameters carefully."
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "code",
+ "id": "61GSlDvF7-7q",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 652
+ },
+ "outputId": "3ded742c-7409-40cb-cba3-3d3c7150f02b"
+ },
+ "cell_type": "code",
+ "source": [
+ "#\n",
+ "# YOUR CODE HERE: Retrain the network using Adagrad and then Adam.\n",
+ "#\n",
+ "_, adagrad_training_losses, adagrad_validation_losses = train_nn_regression_model(\n",
+ " my_optimizer=tf.train.AdagradOptimizer(learning_rate=0.5),\n",
+ " steps=500,\n",
+ " batch_size=100,\n",
+ " hidden_units=[10, 10],\n",
+ " training_examples=normalized_training_examples,\n",
+ " training_targets=training_targets,\n",
+ " validation_examples=normalized_validation_examples,\n",
+ " validation_targets=validation_targets)"
+ ],
+ "execution_count": 12,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "Training model...\n",
+ "RMSE (on training data):\n",
+ " period 00 : 91.06\n",
+ " period 01 : 79.40\n",
+ " period 02 : 74.04\n",
+ " period 03 : 73.09\n",
+ " period 04 : 71.43\n",
+ " period 05 : 72.72\n",
+ " period 06 : 71.23\n",
+ " period 07 : 70.80\n",
+ " period 08 : 70.74\n",
+ " period 09 : 70.01\n",
+ "Model training finished.\n",
+ "Final RMSE (on training data): 70.01\n",
+ "Final RMSE (on validation data): 68.03\n"
+ ],
+ "name": "stdout"
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "image/png": "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\nNzeXl19+edQ/v2XLFrkxlhAibtrd8E0IMbFWrFjB1q1bOX36NJs3byYcDhMKhXjmmWeYO3cuGzZs\nYM6cOZw6dYpXXnmFuXPncuLECYLBIE8//TQtLS2Ew2EeeOABHnnkEQYGBvjpT39Kd3c3xcXFDA4O\nAtDa2srPfvYzY6nagAAAAjFJREFUAAKBAOvXr+db3/pWIt+6EGIMSFARQoybSCTCRx99xLJly3jy\nySd56aWXKCoqumqRttTUVP7+978P+9ktW7Zgt9v57W9/SyAQ4Gtf+xpr1qyhqqqK5ORktm7dSltb\nG3fccQcA27Zto7S0lOeff57BwUFee+21CX+/QoixJ0FFCDGmurq62LBhAwCKorB8+XIeeughfv/7\n3/Pzn/88vp3P50NRFCC6tMWVjh49yoMPPghAcnIy8+fP58SJE9TW1rJs2TIgushoaWkpAGvWrOEf\n//gHGzduZO3ataxfv35c36cQYmJIUBFCjKmhOSqX83q9mEymqx4fYjKZrnpMp9MN+15VVXQ6Haqq\nDlvPZijslJWV8Z///If9+/fz/vvv88orr/Dqq69+2bcjhEgwmUwrhBh3NpuNwsJCPv30UwDq6+t5\n8cUXr/szixYtYteuXQD09/dz4sQJ5s2bR1lZGYcPHwagubmZ+vp6AN59912OHz/OqlWrePbZZ2lu\nbiYcDo/juxJCTATpURFCTIjNmzfzq1/9ij//+c+Ew2E2btx43e03bNjA008/zfe+9z2CwSCPP/44\nhYWFPPDAA2zfvp1HHnmEwsJCFixYAMDMmTN59tlnMZvNqKrKD37wA4xGOcUJMdnJ6slCCCGE0CwZ\n+hFCCCGEZklQEUIIIYRmSVARQgghhGZJUBFCCCGEZklQEUIIIYRmSVARQgghhGZJUBFCCCGEZklQ\nEUIIIYRm/X9E91DSX0uhaQAAAABJRU5ErkJggg==\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": 769
+ },
+ "outputId": "83434e0a-ab92-4c6a-b02f-a383f78c580b"
+ },
+ "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": 7,
+ "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 : 235.83\n",
+ " period 01 : 233.65\n",
+ " period 02 : 231.49\n",
+ " period 03 : 216.09\n",
+ " period 04 : 205.19\n",
+ " period 05 : 219.64\n",
+ " period 06 : 185.29\n",
+ " period 07 : 165.60\n",
+ " period 08 : 163.54\n",
+ " period 09 : 162.96\n",
+ "Model training finished.\n",
+ "Final RMSE (on training data): 162.96\n",
+ "Final RMSE (on validation data): 157.89\n"
+ ],
+ "name": "stdout"
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "image/png": "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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": 652
+ },
+ "outputId": "57ae932d-940e-40b7-ffe5-8d0e19fc439e"
+ },
+ "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 : 138.83\n",
+ " period 01 : 120.81\n",
+ " period 02 : 113.18\n",
+ " period 03 : 109.51\n",
+ " period 04 : 105.56\n",
+ " period 05 : 102.42\n",
+ " period 06 : 112.91\n",
+ " period 07 : 106.95\n",
+ " period 08 : 101.64\n",
+ " period 09 : 102.60\n",
+ "Model training finished.\n",
+ "Final RMSE (on training data): 102.60\n",
+ "Final RMSE (on validation data): 102.54\n"
+ ],
+ "name": "stdout"
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjAAAAGACAYAAACz01iHAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJzs3Xlc1NX+P/DXZ2YYhmXYGVYX3JHV\nBQVxxQVcyzSvlpRm3Vtpesub1e9at65tdtvcu3pLE2/fSlPT0kwzM9wQQQQEcUFB9h1kZ/j8/lDn\nSsIwo8wwyOv5ePB4NPM55/N5D2c+8fac8zlHEEVRBBEREVEHImnvAIiIiIj0xQSGiIiIOhwmMERE\nRNThMIEhIiKiDocJDBEREXU4TGCIiIiow5G1dwBEpqxv377o2rUrpFIpAECtViMoKAjLly+HpaXl\nPZ/322+/xaxZs+56f+fOnXjttdfw2WefYcyYMZr3a2pqMGzYMEyYMAHvv//+PV9XVxkZGXj33XeR\nnp4OALCwsMCiRYswbtw4g19bH+vXr0dGRsZdv5NTp05hwYIF8PT0vKvOTz/9ZKzw7sv169cxduxY\neHl5AQBEUYSTkxP+/ve/o3///nqd66OPPoK7uzvmzJmjc53vv/8eO3bsQFRUlF7XIjIWJjBErYiK\nioKrqysAoK6uDi+++CL+/e9/48UXX7yn8xUUFOA///lPswkMALi5ueGHH35oksD8+uuvsLGxuafr\n3Yu//e1veOihh/DZZ58BABISEvDkk09i//79cHNzM1oc98PNza3DJCstkUqlTT7Dvn37sHDhQhw4\ncAByuVzn8yxdutQQ4RG1Kw4hEelBLpdjxIgRSElJAQDU1tbijTfeQHh4OCZOnIj3338farUaAJCa\nmorZs2cjIiICDz30EH7//XcAwOzZs5GdnY2IiAjU1dXddY2BAwfi1KlTqK6u1ry3b98+hIaGal7X\n1dXh7bffRnh4OMLCwjSJBgDEx8fjkUceQUREBCZNmoTjx48DuPkv+uHDh2Pr1q2YOnUqRowYgX37\n9jX7OdPS0hAQEKB5HRAQgAMHDmgSubVr12LUqFF4+OGHsXHjRoSFhQEAXn31Vaxfv15T787XrcX1\n7rvvYu7cuQCAM2fOYMaMGRg/fjxmzZqFzMxMADd7ov76179izJgxmDt3LnJzc1tpsebt3LkTixYt\nwpNPPokPPvgAp06dwuzZs7FkyRLNH/v9+/djypQpiIiIwBNPPIGMjAwAwJo1a7B8+XLMnDkTW7Zs\naXLeJUuW4IsvvtC8TklJwfDhw9HY2IhPPvkE4eHhCA8PxxNPPIG8vDy94540aRJqampw5coVAMA3\n33yDiIgIhIWF4aWXXkJNTQ2Am7/39957D1OnTsX+/fubtENL38vGxkb885//xOjRozFz5kykpqZq\nrhsTE4Pp06dj0qRJmDhxIvbv36937ERtTiSiFvXp00fMycnRvC4tLRUff/xxcf369aIoiuK///1v\n8ZlnnhHr6+vF6upqccaMGeLu3btFtVotTpw4Udy7d68oiqJ47tw5MSgoSKyoqBBPnjwpjhs3rtnr\nfffdd+Irr7wi/u1vf9PUraioEMeOHStu375dfOWVV0RRFMW1a9eKTz75pFhbWytWVlaKDz/8sHj4\n8GFRFEVxypQp4g8//CCKoiju2rVLc63MzEyxf//+YlRUlCiKorhv3z5x/PjxzcbxwgsviGPGjBG/\n/PJL8dKlS02OXbhwQRw8eLCYn58v1tfXi88995w4ZswYURRF8ZVXXhHXrVunKXvna21x+fj4iDt3\n7tR83qCgIDE6OloURVHcu3evOH36dFEURXHbtm3i448/LtbX14vFxcXimDFjNL+TO2n7Hd/+PQcG\nBorp6ema8n5+fuLx48dFURTFrKwscdCgQeLVq1dFURTFzz//XHzyySdFURTF1atXi8OHDxeLioru\nOu+PP/4oPv7445rXq1atElesWCGmpaWJEyZMEOvq6kRRFMWtW7eKu3btajG+278Xb2/vu94PCgoS\nL1++LJ4+fVoMCQkRc3NzRVEUxddff118//33RVG8+XufOnWqWFNTo3m9bt06rd/LI0eOiBMmTBBv\n3LghVldXizNnzhTnzp0riqIoPvLII+KpU6dEURTF9PR08aWXXtIaO5ExsAeGqBWRkZGIiIjA2LFj\nMXbsWAQHB+OZZ54BABw5cgSzZs2CTCaDQqHA1KlTcezYMVy/fh2FhYWYPHkyAMDPzw/u7u5ITEzU\n6ZqTJ0/GDz/8AAA4dOgQxowZA4nkf7frr7/+isceewxyuRyWlpZ46KGH8PPPPwMAdu/ejYkTJwIA\nBg0apOm9AICGhgY88sgjAAAfHx9kZ2c3e/1//etfePzxx7F3715MmTIFYWFh+L//+z8AN3tHgoKC\n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\nMEIIIYQIOf8fP3Vpz1VrUikAAAAASUVORK5CYII=\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": 33
+ },
+ "outputId": "008551b6-775d-48f8-e593-56b757dc5ba3"
+ },
+ "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",
+ "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": 8,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "Final RMSE (on test data): 157.73\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
diff --git a/intro_to_pandas.ipynb b/intro_to_pandas.ipynb
new file mode 100644
index 0000000..c5b1a0b
--- /dev/null
+++ b/intro_to_pandas.ipynb
@@ -0,0 +1,1741 @@
+{
+ "nbformat": 4,
+ "nbformat_minor": 0,
+ "metadata": {
+ "colab": {
+ "name": "intro_to_pandas.ipynb",
+ "version": "0.3.2",
+ "provenance": [],
+ "collapsed_sections": [
+ "JndnmDMp66FL",
+ "YHIWvc9Ms-Ll",
+ "TJffr5_Jwqvd"
+ ],
+ "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": {
+ "colab_type": "text",
+ "id": "JndnmDMp66FL"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "#### Copyright 2017 Google LLC."
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "code",
+ "id": "hMqWDc_m6rUC",
+ "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": {
+ "colab_type": "text",
+ "id": "rHLcriKWLRe4"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "# Intro to pandas"
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "text",
+ "id": "QvJBqX8_Bctk"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "**Learning Objectives:**\n",
+ " * Gain an introduction to the `DataFrame` and `Series` data structures of the *pandas* library\n",
+ " * Access and manipulate data within a `DataFrame` and `Series`\n",
+ " * Import CSV data into a *pandas* `DataFrame`\n",
+ " * Reindex a `DataFrame` to shuffle data"
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "text",
+ "id": "TIFJ83ZTBctl"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "[*pandas*](http://pandas.pydata.org/) is a column-oriented data analysis API. It's a great tool for handling and analyzing input data, and many ML frameworks support *pandas* data structures as inputs.\n",
+ "Although a comprehensive introduction to the *pandas* API would span many pages, the core concepts are fairly straightforward, and we'll present them below. For a more complete reference, the [*pandas* docs site](http://pandas.pydata.org/pandas-docs/stable/index.html) contains extensive documentation and many tutorials."
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "text",
+ "id": "s_JOISVgmn9v"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "## Basic Concepts\n",
+ "\n",
+ "The following line imports the *pandas* API and prints the API version:"
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "code",
+ "id": "aSRYu62xUi3g",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 33
+ },
+ "outputId": "c4df7abf-f13b-48dd-857d-f6a1d21a47f7"
+ },
+ "cell_type": "code",
+ "source": [
+ "from __future__ import print_function\n",
+ "\n",
+ "import pandas as pd\n",
+ "pd.__version__"
+ ],
+ "execution_count": 1,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "u'0.22.0'"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 1
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "text",
+ "id": "daQreKXIUslr"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "The primary data structures in *pandas* are implemented as two classes:\n",
+ "\n",
+ " * **`DataFrame`**, which you can imagine as a relational data table, with rows and named columns.\n",
+ " * **`Series`**, which is a single column. A `DataFrame` contains one or more `Series` and a name for each `Series`.\n",
+ "\n",
+ "The data frame is a commonly used abstraction for data manipulation. Similar implementations exist in [Spark](https://spark.apache.org/) and [R](https://www.r-project.org/about.html)."
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "text",
+ "id": "fjnAk1xcU0yc"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "One way to create a `Series` is to construct a `Series` object. For example:"
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "code",
+ "id": "DFZ42Uq7UFDj",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 84
+ },
+ "outputId": "b25c23f0-9d49-404d-929f-6b15e5b1037c"
+ },
+ "cell_type": "code",
+ "source": [
+ "pd.Series(['San Francisco', 'San Jose', 'Sacramento'])"
+ ],
+ "execution_count": 2,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "0 San Francisco\n",
+ "1 San Jose\n",
+ "2 Sacramento\n",
+ "dtype: object"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 2
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "text",
+ "id": "U5ouUp1cU6pC"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "`DataFrame` objects can be created by passing a `dict` mapping `string` column names to their respective `Series`. If the `Series` don't match in length, missing values are filled with special [NA/NaN](http://pandas.pydata.org/pandas-docs/stable/missing_data.html) values. Example:"
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "code",
+ "id": "avgr6GfiUh8t",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 137
+ },
+ "outputId": "42ed5851-08d3-4ee4-90c8-762d7e1b2194"
+ },
+ "cell_type": "code",
+ "source": [
+ "city_names = pd.Series(['San Francisco', 'San Jose', 'Sacramento'])\n",
+ "population = pd.Series([852469, 1015785, 485199])\n",
+ "\n",
+ "pd.DataFrame({ 'City name': city_names, 'Population': population })"
+ ],
+ "execution_count": 3,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ "
City name
\n",
+ "
Population
\n",
+ "
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
0
\n",
+ "
San Francisco
\n",
+ "
852469
\n",
+ "
\n",
+ "
\n",
+ "
1
\n",
+ "
San Jose
\n",
+ "
1015785
\n",
+ "
\n",
+ "
\n",
+ "
2
\n",
+ "
Sacramento
\n",
+ "
485199
\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " City name Population\n",
+ "0 San Francisco 852469\n",
+ "1 San Jose 1015785\n",
+ "2 Sacramento 485199"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 3
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "text",
+ "id": "oa5wfZT7VHJl"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "But most of the time, you load an entire file into a `DataFrame`. The following example loads a file with California housing data. Run the following cell to load the data and create feature definitions:"
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "code",
+ "id": "av6RYOraVG1V",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 286
+ },
+ "outputId": "5a403a61-d833-4b57-fbdb-843b23b5760c"
+ },
+ "cell_type": "code",
+ "source": [
+ "california_housing_dataframe = pd.read_csv(\"https://download.mlcc.google.com/mledu-datasets/california_housing_train.csv\", sep=\",\")\n",
+ "california_housing_dataframe.describe()"
+ ],
+ "execution_count": 4,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/html": [
+ "
"
+ ],
+ "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": 13
+ }
+ ]
+ },
+ {
+ "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": 170
+ },
+ "outputId": "8b8736e8-124b-47db-a0f1-4ee67b566c7a"
+ },
+ "cell_type": "code",
+ "source": [
+ "# Your code here\n",
+ "cities['named after a Saint and area is > 50sq.miles'] = (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",
+ "
are named after a Saint and area is > 50sq.miles
\n",
+ "
named after a Saint and area is > 50sq.miles
\n",
+ "
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
0
\n",
+ "
San Francisco
\n",
+ "
852469
\n",
+ "
46.87
\n",
+ "
18187.945381
\n",
+ "
False
\n",
+ "
False
\n",
+ "
\n",
+ "
\n",
+ "
1
\n",
+ "
San Jose
\n",
+ "
1015785
\n",
+ "
176.53
\n",
+ "
5754.177760
\n",
+ "
True
\n",
+ "
True
\n",
+ "
\n",
+ "
\n",
+ "
2
\n",
+ "
Sacramento
\n",
+ "
485199
\n",
+ "
97.92
\n",
+ "
4955.055147
\n",
+ "
False
\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",
+ " are named after a Saint and area is > 50sq.miles \\\n",
+ "0 False \n",
+ "1 True \n",
+ "2 False \n",
+ "\n",
+ " named after a Saint and area is > 50sq.miles \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": {}
+ },
+ "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": 0,
+ "outputs": []
+ },
+ {
+ "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": 33
+ },
+ "outputId": "b88f69c0-80fc-49e7-a967-db287abc8f45"
+ },
+ "cell_type": "code",
+ "source": [
+ "city_names.index"
+ ],
+ "execution_count": 17,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "RangeIndex(start=0, stop=3, step=1)"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 17
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "code",
+ "id": "F_qPe2TBjfWd",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 33
+ },
+ "outputId": "21875b69-7b0d-4f6f-d989-eac9e5fb4b15"
+ },
+ "cell_type": "code",
+ "source": [
+ "cities.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": "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": 170
+ },
+ "outputId": "0d518bd1-30b9-4b24-f260-acae3f129028"
+ },
+ "cell_type": "code",
+ "source": [
+ "cities.reindex([2, 0, 1])"
+ ],
+ "execution_count": 19,
+ "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",
+ "
are named after a Saint and area is > 50sq.miles
\n",
+ "
named after a Saint and area is > 50sq.miles
\n",
+ "
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
2
\n",
+ "
Sacramento
\n",
+ "
485199
\n",
+ "
97.92
\n",
+ "
4955.055147
\n",
+ "
False
\n",
+ "
False
\n",
+ "
\n",
+ "
\n",
+ "
0
\n",
+ "
San Francisco
\n",
+ "
852469
\n",
+ "
46.87
\n",
+ "
18187.945381
\n",
+ "
False
\n",
+ "
False
\n",
+ "
\n",
+ "
\n",
+ "
1
\n",
+ "
San Jose
\n",
+ "
1015785
\n",
+ "
176.53
\n",
+ "
5754.177760
\n",
+ "
True
\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",
+ " are named after a Saint and area is > 50sq.miles \\\n",
+ "2 False \n",
+ "0 False \n",
+ "1 True \n",
+ "\n",
+ " named after a Saint and area is > 50sq.miles \n",
+ "2 False \n",
+ "0 False \n",
+ "1 True "
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 19
+ }
+ ]
+ },
+ {
+ "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": 170
+ },
+ "outputId": "31906312-cd36-4bf6-a116-f906cb2f1083"
+ },
+ "cell_type": "code",
+ "source": [
+ "cities.reindex(np.random.permutation(cities.index))"
+ ],
+ "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",
+ "
are named after a Saint and area is > 50sq.miles
\n",
+ "
named after a Saint and area is > 50sq.miles
\n",
+ "
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
1
\n",
+ "
San Jose
\n",
+ "
1015785
\n",
+ "
176.53
\n",
+ "
5754.177760
\n",
+ "
True
\n",
+ "
True
\n",
+ "
\n",
+ "
\n",
+ "
0
\n",
+ "
San Francisco
\n",
+ "
852469
\n",
+ "
46.87
\n",
+ "
18187.945381
\n",
+ "
False
\n",
+ "
False
\n",
+ "
\n",
+ "
\n",
+ "
2
\n",
+ "
Sacramento
\n",
+ "
485199
\n",
+ "
97.92
\n",
+ "
4955.055147
\n",
+ "
False
\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",
+ " are named after a Saint and area is > 50sq.miles \\\n",
+ "1 True \n",
+ "0 False \n",
+ "2 False \n",
+ "\n",
+ " named after a Saint and area is > 50sq.miles \n",
+ "1 True \n",
+ "0 False \n",
+ "2 False "
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 20
+ }
+ ]
+ },
+ {
+ "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": 200
+ },
+ "outputId": "58363bcd-09f1-4444-ad37-f673fd03f663"
+ },
+ "cell_type": "code",
+ "source": [
+ "# Your code here\n",
+ "cities.reindex([0, 5, 7, 1])"
+ ],
+ "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",
+ "
are named after a Saint and area is > 50sq.miles
\n",
+ "
named after a Saint and area is > 50sq.miles
\n",
+ "
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
0
\n",
+ "
San Francisco
\n",
+ "
852469.0
\n",
+ "
46.87
\n",
+ "
18187.945381
\n",
+ "
False
\n",
+ "
False
\n",
+ "
\n",
+ "
\n",
+ "
5
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
7
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
1
\n",
+ "
San Jose
\n",
+ "
1015785.0
\n",
+ "
176.53
\n",
+ "
5754.177760
\n",
+ "
True
\n",
+ "
True
\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",
+ "5 NaN NaN NaN NaN \n",
+ "7 NaN NaN NaN NaN \n",
+ "1 San Jose 1015785.0 176.53 5754.177760 \n",
+ "\n",
+ " are named after a Saint and area is > 50sq.miles \\\n",
+ "0 False \n",
+ "5 NaN \n",
+ "7 NaN \n",
+ "1 True \n",
+ "\n",
+ " named after a Saint and area is > 50sq.miles \n",
+ "0 False \n",
+ "5 NaN \n",
+ "7 NaN \n",
+ "1 True "
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 21
+ }
+ ]
+ },
+ {
+ "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": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "cities.reindex([0, 4, 5, 2])"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "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
diff --git a/logistic_regression.ipynb b/logistic_regression.ipynb
new file mode 100644
index 0000000..794111a
--- /dev/null
+++ b/logistic_regression.ipynb
@@ -0,0 +1,1650 @@
+{
+ "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": 1160
+ },
+ "outputId": "169c72b9-a02e-4fb9-a6d2-395cc71a3b4e"
+ },
+ "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": 3,
+ "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.7 2639.4 538.4 \n",
+ "std 2.1 2.0 12.6 2147.0 415.0 \n",
+ "min 32.5 -124.3 1.0 2.0 2.0 \n",
+ "25% 33.9 -121.8 18.0 1463.0 298.0 \n",
+ "50% 34.2 -118.5 29.0 2126.5 435.0 \n",
+ "75% 37.7 -118.0 37.0 3155.0 647.2 \n",
+ "max 42.0 -114.3 52.0 32054.0 5290.0 \n",
+ "\n",
+ " population households median_income rooms_per_person \n",
+ "count 12000.0 12000.0 12000.0 12000.0 \n",
+ "mean 1423.8 500.4 3.9 2.0 \n",
+ "std 1091.9 378.1 1.9 1.2 \n",
+ "min 3.0 2.0 0.5 0.1 \n",
+ "25% 786.0 281.8 2.6 1.5 \n",
+ "50% 1171.0 410.0 3.5 1.9 \n",
+ "75% 1720.0 604.0 4.8 2.3 \n",
+ "max 15507.0 5050.0 15.0 52.0 "
+ ],
+ "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": 735
+ },
+ "outputId": "b45397ad-47d7-4e90-a93b-3588f862f56a"
+ },
+ "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": 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 : 0.45\n",
+ " period 01 : 0.45\n",
+ " period 02 : 0.45\n",
+ " period 03 : 0.44\n",
+ " period 04 : 0.44\n",
+ " period 05 : 0.44\n",
+ " period 06 : 0.44\n",
+ " period 07 : 0.45\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\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJzs3Xl4leWZ+PHve7bs+76HPSSA7CYE\nhLAlgPuCCMaltp2OxXZsnW6jP+uoVDvjTMc6aq3WtjhWUBFRQEDZtwCKLCEJJIRsZF9O9uWc8/7+\nCAkgJDlZzjlJuD/X5XV5Tt7lTt6Q3Hme+3luRVVVFSGEEEKIYUTj6ACEEEIIIQaaJDhCCCGEGHYk\nwRFCCCHEsCMJjhBCCCGGHUlwhBBCCDHsSIIjhBBCiGFH5+gAhBjKxo0bR2RkJFqtFgCz2cyMGTN4\n+umncXV17fN1169fz/Lly695f8OGDfz617/mzTffJCkpqfP95uZmZs2axeLFi3nppZf6fF9r5efn\ns2bNGnJzcwFwcXFh9erVLFy40Ob37o3XX3+d/Pz8a74maWlpPPbYY4SHh19zzhdffGGv8PqlsLCQ\nBQsWMGLECABUVcXf359/+7d/IzY2tlfXeuWVVwgNDeWBBx6w+pxPP/2Ujz76iLVr1/bqXkLYiyQ4\nQvTT2rVrCQ4OBqC1tZUnn3ySP/3pTzz55JN9ul55eTlvv/32dRMcgJCQED7//POrEpxdu3bh6enZ\np/v1xVNPPcUdd9zBm2++CcCJEyd4+OGH2bp1KyEhIXaLoz9CQkKGTDLTFa1We9XnsGXLFn784x+z\nbds2DAaD1df5+c9/bovwhHAomaISYgAZDAbmzJlDRkYGAC0tLfy///f/SE5OZsmSJbz00kuYzWYA\nMjMzWbFiBSkpKdxxxx3s27cPgBUrVnDx4kVSUlJobW295h5Tp04lLS2Npqamzve2bNlCYmJi5+vW\n1lZeeOEFkpOTmT9/fmciAnD8+HHuvvtuUlJSWLp0KQcPHgTaRwRmz57N3//+d2677TbmzJnDli1b\nrvt5nj17lptuuqnz9U033cS2bds6E73XXnuNuXPncuedd/LWW28xf/58AH71q1/x+uuvd5535eue\n4lqzZg0PPvggAF9//TX33HMPixYtYvny5RQUFADtI1n/8i//QlJSEg8++CAlJSU9PLHr27BhA6tX\nr+bhhx/m97//PWlpaaxYsYKf/vSnncnA1q1bufXWW0lJSeGhhx4iPz8fgD/+8Y88/fTT3Hvvvfz1\nr3+96ro//elP+ctf/tL5OiMjg9mzZ2OxWPjv//5vkpOTSU5O5qGHHqK0tLTXcS9dupTm5mbOnz8P\nwLp160hJSWH+/Pn87Gc/o7m5GWj/uv/ud7/jtttuY+vWrVc9h66+Ly0WC//+7//OvHnzuPfee8nM\nzOy875EjR7jrrrtYunQpS5YsYevWrb2OXYgBpwoh+mzs2LFqcXFx5+uamhp11apV6uuvv66qqqr+\n6U9/Un/wgx+obW1talNTk3rPPfeoGzduVM1ms7pkyRL1s88+U1VVVU+ePKnOmDFDraurUw8fPqwu\nXLjwuvf7+OOP1V/+8pfqU0891XluXV2dumDBAvXDDz9Uf/nLX6qqqqqvvfaa+vDDD6stLS1qQ0OD\neuedd6o7d+5UVVVVb731VvXzzz9XVVVVP/nkk857FRQUqLGxseratWtVVVXVLVu2qIsWLbpuHE88\n8YSalJSk/u1vf1Ozs7Ov+lhWVpY6ffp0taysTG1ra1P/+Z//WU1KSlJVVVV/+ctfqv/7v//beeyV\nr7uLKy4uTt2wYUPn5ztjxgx1//79qqqq6meffabeddddqqqq6nvvvaeuWrVKbWtrU6uqqtSkpKTO\nr8mVuvsad3ydJ0+erObm5nYeP3HiRPXgwYOqqqpqUVGROm3aNPXChQuqqqrqO++8oz788MOqqqrq\nq6++qs6ePVutrKy85rqbN29WV61a1fn6f/7nf9Tnn39ePXv2rLp48WK1tbVVVVVV/fvf/65+8skn\nXcbX8XUZP378Ne/PmDFDzcnJUY8ePaomJCSoJSUlqqqq6jPPPKO+9NJLqqq2f91vu+02tbm5ufP1\n//7v/3b7fbl792518eLFan19vdrU1KTee++96oMPPqiqqqrefffdalpamqqqqpqbm6v+7Gc/6zZ2\nIexBRnCE6KfU1FRSUlJYsGABCxYsID4+nh/84AcA7N69m+XLl6PT6XB2dua2227jwIEDFBYWUlFR\nwbJlywCYOHEioaGhnDp1yqp7Llu2jM8//xyAL7/8kqSkJDSay/+cd+3axcqVKzEYDLi6unLHHXew\nfft2ADZu3MiSJUsAmDZtWufoB4DJZOLuu+8GIC4ujosXL173/v/xH//BqlWr+Oyzz7j11luZP38+\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": "7fGYXBygpGTB",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 347
+ },
+ "outputId": "e3571482-6472-4fe0-c58e-06aa0a80309b"
+ },
+ "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": 12,
+ "outputs": [
+ {
+ "output_type": "display_data",
+ "data": {
+ "image/png": "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\nVBEAAAAASUVORK5CYII=\n",
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ }
+ }
+ ]
+ },
+ {
+ "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": {}
+ },
+ "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": 0,
+ "outputs": []
+ },
+ {
+ "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",
+ " # 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",
+ " \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\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " "
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "VM0wmnFUIYH9",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 618
+ },
+ "outputId": "da4c2e9a-1e86-4fcd-cf4b-82db8532be8b"
+ },
+ "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": 11,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "Training model...\n",
+ "LogLoss (on training data):\n",
+ " period 00 : 0.59\n",
+ " period 01 : 0.58\n",
+ " period 02 : 0.56\n",
+ " period 03 : 0.55\n",
+ " period 04 : 0.54\n",
+ " period 05 : 0.54\n",
+ " period 06 : 0.54\n",
+ " period 07 : 0.53\n",
+ " period 08 : 0.52\n",
+ " period 09 : 0.53\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": 50
+ },
+ "outputId": "b8cfa1e7-f7b9-44c9-aa6e-91308fc26415"
+ },
+ "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": 13,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "AUC on the validation set: 0.72\n",
+ "Accuracy on the validation set: 0.75\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": "1416a02b-bc88-49fb-be6c-d97e91d5687c"
+ },
+ "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": 14,
+ "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": 652
+ },
+ "outputId": "e5336757-4423-4d61-a391-95fa21566bed"
+ },
+ "cell_type": "code",
+ "source": [
+ "# TUNE THE SETTINGS BELOW TO IMPROVE AUC\n",
+ "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)\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": 15,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "Training model...\n",
+ "LogLoss (on training data):\n",
+ " period 00 : 0.59\n",
+ " period 01 : 0.57\n",
+ " period 02 : 0.56\n",
+ " period 03 : 0.55\n",
+ " period 04 : 0.54\n",
+ " period 05 : 0.54\n",
+ " period 06 : 0.53\n",
+ " period 07 : 0.54\n",
+ " period 08 : 0.53\n",
+ " period 09 : 0.52\n",
+ "Model training finished.\n",
+ "AUC on the validation set: 0.73\n",
+ "Accuracy on the validation set: 0.76\n"
+ ],
+ "name": "stdout"
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjMAAAGACAYAAABY5OOEAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJzs3XlYlOX6wPHvOzOsw74riiAiIgoC\nWpr7FmCLmaZo4dpuaWnnnPRXRzvnZJtZZrZZlpmWZqbmRqm5r+CCIrig4MoqIJtsM78/PHEiRFFm\nYMD7c11el/Muz3vP3IzePO/zPo+i1+v1CCGEEEI0UqqGDkAIIYQQoi6kmBFCCCFEoybFjBBCCCEa\nNSlmhBBCCNGoSTEjhBBCiEZNihkhhBBCNGpSzAjRxPn7+5OWlmaQti5cuED79u0N0lZDiI6OpkeP\nHkRERBAeHs6gQYNYtGjRbbcTHx/PhAkTbvu89u3bc+HChds+Twhxc5qGDkAIIerT3/72NwYPHgxA\nZmYmI0aMwMfHh169etW6jaCgIL766itjhSiEuE3SMyPEXaqkpIR//vOfhIeHExkZydtvv01FRQUA\nO3bsoHfv3kRGRrJs2TJCQ0Nv2aOQm5vL5MmTK3s8vvjii8p9H3zwAeHh4YSHhzN69GjS09Nvuv0P\n27Zt46GHHqqybfDgwWzfvp39+/czZMgQBg0aRGRkJBs2bLjtz8DV1ZWIiAh27doFwOnTp3niiScI\nDw/noYce4ujRowDs27ePqKgoJk+ezNSpU9m3bx8DBw685ee4bds2Bg4cSGRkJF9++WXldQsLC5k4\ncSKRkZH079+f1157jbKystuOXwhxnRQzQtylFi1aRFpaGuvWrePnn38mNjaWtWvXUlFRwauvvsq/\n/vUvNmzYQEpKCsXFxbdsb86cOdjb2xMTE8PSpUv5/vvviY2N5dSpU2zcuJG1a9cSExPDwIED2bNn\nT43b/6xbt26kpaVx/vx5AM6fP09aWhr33Xcf77zzDtOmTWP9+vV8+umnbNq06Y4+h/LycszNzdHp\ndEycOJHBgwcTExPDzJkzef755ykvLwfg+PHjREVF8f7779f6c/y///s/ZsyYwYYNG1CpVJVFzqpV\nq7Czs2PDhg3ExMSgVqs5ffr0HcUvhJBiRoi71tatWxk+fDgajQZLS0seeughdu3aRUpKCqWlpfTu\n3Ru4Ps5Ep9Pdsr1t27YxatQoABwcHBg4cCC7du3Czs6OK1eu8Msvv5CXl0d0dDSPPPJIjdv/zNzc\nnL59+7JlyxYANm3axIABA9BoNDg7O7Nq1SqSk5Px9vauVmTUxvnz59m4cSMDBw7kzJkzZGdnM2zY\nMADCwsJwcnLi0KFDAFhaWtKtW7fb/hx79OgBwJAhQyrP+aPdnTt3otPpeOONNwgICLjt+IUQ10kx\nI8Rd6sqVK9jb21e+tre3Jzs7m7y8POzs7Cq3u7m51bq9P59nZ2dHdnY27u7uzJs3j40bN9KnTx+e\nfvppLl++XOP2vwoPD69SzAwaNAiAWbNmYWVlxbhx47j//vvZuHFjreJ87733KgcAT5kyhVdffZWg\noCCuXr3KtWvXiIyMJCIigoiICLKzs8nNza38fGp63zV9jjY2NlW2/yEyMpKxY8cyd+5cunXrxhtv\nvEFpaWmt4hdCVCfFjBB3KRcXl8r/qOH6mBcXFxdsbGwoKiqq3J6VlVWn9gC6du3KF198wa5du2jW\nrBmzZ8++6fY/69mzJ0lJSaSkpJCSkkLXrl0rr/f666+zfft2/vnPfzJt2jQKCwtvGeff/vY3Nm7c\nSExMDD/++GNlceTm5oZWq2Xjxo2Vf3bu3Fk5NuZ237e9vT0FBQWV269cuVLlvKioKH788UfWr19P\nQkICq1atumXsQogbk2JGiLtUnz59WLFiBRUVFRQVFbF69Wp69+6Nt7c35eXl7Nu3D4Dvv/8eRVFq\n1d6yZcuA6/9x//bbb/Tp04edO3fyxhtvoNPpsLa2pl27diiKUuP2vzI3N6dHjx6899579O/fH7Va\nTVlZGdHR0WRkZAAQGBiIRqNBpbrzf9I8PT3x8PCo7OG5cuUKU6ZMqVLY1fS+b/Q5enl5oVarKz/H\nlStXVr6/+fPns2LFCgDc3d1p0aJFrT5jIcSNyaPZQtwFoqOjUavVla//85//EB0dzfnz53nggQdQ\nFIWIiAgiIyNRFIWZM2cybdo0bG1tGTduHCqVCkVR0Ov1VFRUEBERUaX9BQsW8NJLLzFz5kwiIiJQ\nqVQ8/fTTBAUFUVJSwrp16wgPD8fc3BwnJydmzZqFm5vbDbffSHh4OC+++CLffPMNAGZmZgwbNoyx\nY8cCoFKpeO2117CysuK3335jy5YtvPXWW7f1GSmKwpw5c5g5cyYffvghKpWKcePGYW1tfcvPtqbP\n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\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
diff --git a/multi_class_classification_of_handwritten_digits.ipynb b/multi_class_classification_of_handwritten_digits.ipynb
new file mode 100644
index 0000000..4b2568a
--- /dev/null
+++ b/multi_class_classification_of_handwritten_digits.ipynb
@@ -0,0 +1,2500 @@
+{
+ "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": 225
+ },
+ "outputId": "5b257a6b-e346-4d8e-afaa-6940e1ab33aa"
+ },
+ "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": 1,
+ "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",
+ "
9148
\n",
+ "
2
\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",
+ "
9122
\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",
+ "
1295
\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",
+ "
6389
\n",
+ "
8
\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",
+ "
5067
\n",
+ "
2
\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",
+ "9148 2 0 0 0 0 0 0 0 0 0 ... 0 0 0 \n",
+ "9122 7 0 0 0 0 0 0 0 0 0 ... 0 0 0 \n",
+ "1295 3 0 0 0 0 0 0 0 0 0 ... 0 0 0 \n",
+ "6389 8 0 0 0 0 0 0 0 0 0 ... 0 0 0 \n",
+ "5067 2 0 0 0 0 0 0 0 0 0 ... 0 0 0 \n",
+ "\n",
+ " 778 779 780 781 782 783 784 \n",
+ "9148 0 0 0 0 0 0 0 \n",
+ "9122 0 0 0 0 0 0 0 \n",
+ "1295 0 0 0 0 0 0 0 \n",
+ "6389 0 0 0 0 0 0 0 \n",
+ "5067 0 0 0 0 0 0 0 \n",
+ "\n",
+ "[5 rows x 785 columns]"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 1
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "nwx5hdFTuKVI",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ ""
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "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": 404
+ },
+ "outputId": "6abf1d9f-8f8e-4bc0-d22c-01d88cfd400b"
+ },
+ "cell_type": "code",
+ "source": [
+ "mnist_dataframe.loc[:, 72:72]"
+ ],
+ "execution_count": 2,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ "
72
\n",
+ "
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
9148
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
9122
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
1295
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
6389
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
5067
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
...
\n",
+ "
...
\n",
+ "
\n",
+ "
\n",
+ "
1470
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
7620
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
9098
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
3061
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
4307
\n",
+ "
0
\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
10000 rows × 1 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " 72\n",
+ "9148 0\n",
+ "9122 0\n",
+ "1295 0\n",
+ "6389 0\n",
+ "5067 0\n",
+ "... ..\n",
+ "1470 0\n",
+ "7620 0\n",
+ "9098 0\n",
+ "3061 0\n",
+ "4307 0\n",
+ "\n",
+ "[10000 rows x 1 columns]"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 2
+ }
+ ]
+ },
+ {
+ "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": 315
+ },
+ "outputId": "9d9c72a7-02d8-41cc-f27c-a3b6d29e615a"
+ },
+ "cell_type": "code",
+ "source": [
+ "training_targets, training_examples = parse_labels_and_features(mnist_dataframe[:7500])\n",
+ "training_examples.describe()"
+ ],
+ "execution_count": 4,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/html": [
+ "
"
+ ],
+ "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": 6
+ }
+ ]
+ },
+ {
+ "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": 497
+ },
+ "outputId": "edb59ec6-3018-4343-eac5-c8e956aaf625"
+ },
+ "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": 7,
+ "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": {}
+ },
+ "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 = 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",
+ " # 2. 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": "zFFRmvUGh8wd",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 735
+ },
+ "outputId": "3dbb9e90-6082-4c44-f871-81bae6759911"
+ },
+ "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": 13,
+ "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 : 226.06\n",
+ " period 01 : 224.69\n",
+ " period 02 : 223.30\n",
+ " period 03 : 221.93\n",
+ " period 04 : 220.56\n",
+ " period 05 : 219.21\n",
+ " period 06 : 217.90\n",
+ " period 07 : 216.56\n",
+ " period 08 : 215.23\n",
+ " period 09 : 213.92\n",
+ "Model training finished.\n"
+ ],
+ "name": "stdout"
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "image/png": "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\nVCF2evdgp3dP4zUgwGGwy0JNksmNJKMbuhjboI8BhoiIqBsTBCG0Kqo/Lrb1l30tvNy76QTiFoON\n3hbaeTgJSUY3ks2JXRpsGGCIiIguUC0t9wbkwSZyVVRLG/RdkTgEd152S2c3nQGGiIiI5NoKNo2B\nJjgUZdVZuqSNDDBERETULuFgc1GTYNMVVF3dACIiIqKzxQBDREREisMAQ0RERIrDAENERESKwwBD\nREREisMAQ0RERIrDAENERESKwwBDREREisMAQ0RERIrDAENERESKwwBDREREisMAQ0RERIrDAENE\nRESKwwBDREREisMAQ0RERIrDAENERESKwwBDREREisMAQ0RERIrDAENERESKwwBDREREisMAQ0RE\nRIrDAENERESKwwBDREREisMAQ0RERIrDAENERESKwwBDREREisMAQ0RERIrDAENERESKwwBDRERE\nisMAQ0RERIrDAENERESKwwBDREREisMAQ0RERIrDAENERESKwwBDREREisMAQ0RERIrDAENERESK\nwwBDREREisMAQ0RERIoT1QCTlZWFm266CTNmzMDnn38uHd+0aRMGDBggPV67di1mzJiBWbNm4d13\n341mk4iIiKgb0ETrwlu2bMHBgwexevVq+Hw+TJ8+HRMmTMDp06exYsUKuFwuAEAgEMDSpUuRnZ0N\nrVaLmTNnYvz48UhISIhW04iIiEjhotYDk56ejpdeegkAYLVaUVVVhfr6eixfvhy33HILdDodAGDH\njh0YNGgQLBYL9Ho9hg8fjpycnGg1i4iIiLqBqAUYtVoNo9EIAMjOzsaoUaNw4sQJ7Nu3D5MmTZLO\n83q9sNvt0mO73Q6PxxOtZhEREVE3ELUhpLD169cjOzsbK1euxIIFC7Bw4cI2zxdF8YzXtNmM0GjU\nHdXEZlwuS9SuTeeH9yY28b7ELt6b2MV7c36iGmA2bdqE5cuX47XXXkMgEMCRI0fw61//GgBQVFSE\n2267Dffccw+8Xq/0nKKiIgwdOrTN6/p8gai12eWywOOpiNr16dzx3sQm3pfYxXsTu3hv2qetkBe1\nAFNRUYGsrCysWrVKmpC7fv166etjx47F22+/jerqaixcuBDl5eVQq9XIycnBo48+Gq1mERERUTcQ\ntQCzbt06+Hw+zJ8/Xzq2aNEipKSkyM7T6/VYsGAB5syZA0EQMHfuXFgs7FYjIiKi1glieyadxJho\ndruxWy928d7EJt6X2MV7E7t4b9qnrSEk7sRLREREisMAQ0RERIrDAENERESKwwBDREREisMAQ0RE\nRIpzzgHm2LFjHdgMIiIiovZrM8DceeedssfLli2TPn/88cej0yIiIiKiM2gzwNTV1ckeb9myRfpc\ngdvHEBERUTfRZoARBEH2ODK0NP0aERERUWc5qzkwDC1EREQUC9qshVRWVob//ve/0uPy8nJs2bIF\noiiivLw86o0jIiIiakmbAcZqtcom7losFixdulT6nIiIiKgrtBlg3nrrrc5qBxEREVG7tTkHprKy\nEqtWrZIe//3vf8e0adNw7733wuv1RrttRERERC1qM8A8/vjjKC4uBgAcPXoUL7zwAh566CFcffXV\n+OMf/9gpDSQiIiJqqs0Ac/LkSSxYsAAA8NlnnyEjIwNXX301br75ZvbAEBERUZdpM8AYjUbp82++\n+QZXXXWV9JhLqomIiKirtBlg6uvrUVxcjBMnTmD79u0YOXIkAMDv96OqqqpTGkhERETUVJurkO66\n6y5MnjwZ1dXVmDdvHuLj41FdXY1bbrkFmZmZndVGIiIiIpk2A8x1112HzZs34/Tp0zCbzQAAvV6P\n3/zmN7jmmms6pYFERERETbUZYPLy8qTPI3fe7du3L/Ly8pCSkhK9lhERERG1os0AM3bsWPTp0wcu\nlwtA82KOb775ZnRbR0RERNSCNgPMokWL8OGHH8Lv92PKlCmYOnUq7HZ7Z7WNiIiIqEVtBphp06Zh\n2rRpyM/Px/vvv49bb70VqampmDZtGsaPHw+9Xt9Z7SQiIiKStLmMOiw5ORm/+tWv8Mknn2DixIl4\n6qmnOImXiIiIukybPTBh5eXlWLt2LdasWYP6+nrcfffdmDp1arTbRkRERNSiNgPM5s2b8d5772HX\nrl2YMGECnn32WVx88cWd1TYiIiKiFrUZYH72s5+hd+/eGD58OEpKSvD666/Lvv7MM89EtXFERERE\nLWkzwISXSft8PthsNtnXTp06Fb1WEREREbWhzQCjUqlw//334/Tp07Db7Xj11VfRq1cvvP3221ix\nYgVuvPHGzmonERERkaTNAPPiiy9i1apV6NevH/75z3/i8ccfR0NDA+Lj4/Huu+92VhuJiIiIZNpc\nRq1SqdCvXz8AwLhx45Cbm4vbb78dS5YsQWJiYqc0kIiIiKipNgOMIAiyx8nJyRg/fnxUG0RERER0\nJu3ayC6saaAhIiIi6gptzoHZvn07Ro8eLT0uLi7G6NGjIYoiBEHAxo0bo9w8IiIioubaDDCffvpp\nZ7WDiIiIqN3aDDCpqamd1Q4iIiKidjurOTBEREREsYABhoiIiBSHAYaIiIgUhwGGiIiIFIcBhoiI\niBSHAYaIiIgUhwGGiIiIFIcBhoiIiBSHAYaIiIgUhwGGiIiIFIcBhoiIiBSHAYaIiIgUhwGGiIiI\nFIcBhoiIiBSHAYaIiIgUhwGGiIiIFIcBhoiIiBSHAYaIiIgUhwGGiIiIFIcBhoiIiBRHE82LZ2Vl\nYdu2bairq8Pdd98Nl8uFrKwsaDQa6HQ6PPfcc7Db7Vi7di3eeOMNqFQqZGZmYtasWdFsFhERESlc\n1ALMli1bcPDgQaxevRo+nw/Tp0/H4MGDkZWVhR49emDJkiV45513cPvtt2Pp0qXIzs6GVqvFzJkz\nMX78eCQkJESraURERKRwUQsw6enpGDx4MADAarWiqqoKL774ItRqNURRRGFhIa644grs2LEDgwYN\ngsViAQAMHz4cOTk5GDt2bLSaRkRERAoXtTkwarUaRqMRAJCdnY1Ro0ZBrVbjq6++QkZGBrxeL370\nox/B6/XCbrdLz7Pb7fB4PNFqFhEREXUDUZ0DAwDr169HdnY2Vq5cCQAYNWoUrr32WvzpT3/CihUr\nkJqaKjtfFMUzXtNmM0KjUUelvQDgclmidm06P7w3sYn3JXbx3sQu3pvzE9UAs2nTJixfvhyvvfYa\nLBYLvvjiC4wfPx6CIGDixIlYvHgxhg0bBq/XKz2nqKgIQ4cObfO6Pl8gam12uSzweCqidn06d7w3\nsYn3JXbx3sQu3pv2aSvkRW0IqaKiAllZWXj11VelCbmLFy/G3r17AQA7duxAnz59MGTIEOzcuRPl\n5eXw+/3IycnBlVdeGa1mERERUTcQtR6YdevWwefzYf78+dKxxx57DE888QTUajX0ej2ysrKg1+ux\nYMECzJkzB4IgYO7cudKEXiIiIqKWCGJ7Jp3EmGh2u7FbL3bx3sQm3pfYxXsTu3hv2qdLhpCIiIiI\nooUBhoiIiBSHAYaIiIgUhwGGiIiIFIcBhoiIiBSHAYaIiIgUhwGGiIiIFIcBhoiIiBSHAYaIiIgU\nhwGGiIiIFIcBhoiIiBSHAYaIiIgUhwGGiIiIFIcBhoiIiBSHAYaIiIgUhwGGiIiIFIcBhoiIiBSH\nAYaIiIgUhwGGiIiIFEfT1Q2IJUW+AL47UgKTToVUpxlGPb89REREsYj/Qkf4+L/Hsen7fOmx3RqH\nNJcZqS4T0pzBj8kOE7QadlwRERF1JQaYCDeN7Y/hA5Ow76gXpzx+5Hoq8f3hYnx/uFg6RyUISLQb\nkOYyI81lQmroozPBAJUgdGHriYiILhwMMBGMei2u/0FPDOljk45VVtUi11MpBZpTHj9yvZXILw7g\n232Nz9VpVUh1hgKN04RUtxlpLjPiTboueCdERETdGwPMGZgNWgzoacOAno2hRhRFlJSfxilPJXK9\nfpzyVOJUkR8nCitxNL9C9nyLUYtUpynYY+M2I9VpQorTBEMcv/VERETniv+KngNBEOCI18MRr8eQ\n/k7peF19Awp9VU16bCqx70Qp9p0olV3DGa+X5tekuoIBJ8luhEbN+TVERERnwgDTgTTq0DCS04Qf\nDGw8Xl1ThzxvINhj4/GHPlbiu0NefHfIK52nVglIchgb59c4gx8d8XoInF9DREQkYYDpBHqdBn1T\nrOibYpUdL/fXyObVBHttgv99LXu+unF+TcTEYYuR82uIiOjCxADThawmHawmOwb2tkvHGkQRxWXV\nwXk1oWGoXI8fxwoqcDivXPb8eJNOGn4Kf0xxmhCnVXf2WyEiIupUDDAxRiUIcCUY4EowYNhFLul4\nXX0DCooDjROHi4IBZ88xH/Yc80nnCQBcNoNs4nCay4REmxEqFYehiIioe2CAUQiNWhUMI26z7HjV\n6TppJVRuxFLv7Qe92H6wcX6NVqNCitOENFdksOEybyIiUiYGGIUzxGnQPzUe/VPjpWOiKKLcX4OT\noeXdjaui/DheIF/mbTVqQ3NqzEhzcxiKiIiUgQGmGxIEAfHmOMSb43B5H4d0vL6hAUW+KpwMDT8F\nh6Eqsfe4D3uPRwxDCYDbZkQPaX6NGT3c3G2YiIhiBwPMBUStUiHZEaznFLnMO3IY6lREuNlaEsDW\n/R7pvDitOjRZOLgSqkdoKMps0HbBuyEiogsZAwy1OgzlqzgtrYYK99YcL6jAkSaroRLMOtmE4TSX\nmUUviYgoqhhgqEWCIMBu1cNu1WNwP/luw+HVUCdDE4dPFlVi19ES7DpaIp2nEsKb8oUmDYfm2Dis\n3JSPiIjOHwMMnZXI1VBXRRz3V9dKw0+5oXBzyuNHntePb/YWSecZ4tTSpOEe0qZ8Zhj1/FEkIqL2\n478a1CFM+uZFL2Wb8oXn1ngqcTi3DIdOlcme77DGhSYLm1kbioiIzogBhqKmtU35auvqpdpQkeHm\n+8PF+P5wsXSeWiUg2WFCj9Dy7kv7u2DRqWCzxHEYiojoAscAQ51Oq1GjV5IFvZIssuPlgRrkhsLM\nyVDBy3DxS6AQ2HgYAGCM08hqQoU/GvVcDUVEdKFggKGYYTXqYO3dpDZUgwhPaXDvGl+gFgeOl+CU\nx4+DuWU40GQYym6NC+5b42ysD8XVUERE3RMDDMU0lUpAot2IRLsRLpcFHk9wJ+Ga2nrkFfuDOw17\nG+fXNB2GCq+GSo0oo5DqNsMZr+emfERECsYAQ4qk06rRO8mK3klW2fHKquBqKGljvtAwVJ7Xj2/3\nNZ4Xp1XLa0O5TEh1m2E1sjYUEZESMMBQt2I2aHFJLxsu6dW4GkoMr4byNtaFOuWpxInCChzNl2/K\nZzXpGit5u0xIc7M2FBFRLGKAoW5PEAQ4EwxwJhgwtH+TTflKAlIvTXg1VLPaUABcNkNjsAntOOy2\nGaBWcX4NEVFXYIChC5ZGrZJ2CY4UWRsqt6hxKGr7QS+2H/TKnp/iMAZXQbkbdxxOMOu4zJuIKMoY\nYIiaaK02VJm/JrRvTePE4TyvHyeKKoHdjc836TVIdQbn1Ejza5zcbZiIqCPxLypROwiCgARzHBLM\ncbi8j0M63tAgoqi0qsnE4TMs846oD5Xs4G7DRETnggGG6DyoVAKS7EYk2Y24MuJ4eJl3eCO+1pZ5\nq0PLxCM35EtzmeHgMm8iojYxwBBFwbks80ZE0cs4nRppzmCoSY1Y6m3hMm8iIgAMMESdqs1l3qFe\nmnC4OVZQgcN58mXe8SZdRG9NcPJwsoPLvInowsMAQ9TFZMu8L2qyzLs4IBuCyvVUYvcxH3Yfi1jm\nLQDuBIN8fo3bDHeCASoVh6GIqHtigCGKURq1KrjnjFu+zDtQXYe8iCGoU57gBn3bDniw7YBHOk+r\nUSHFYWrssQkt9Y43cZk3ESkfAwyRwhj1GvRPi0f/NPky79LKGtlOw+HhqOOFFbLnmw3aZtW8U50m\nGOL454CIlIN/sYi6AUEQYLPEwWaJw+V9G5d51zc0oMhXFQw1EZOH958oxb4TpbJrOOP1TZZ5m5Bo\n5zJvIopNDDBE3ZhapUKyIzjRN/0St3T8dE24mrd8fs13h7z47pA34vkCkh3GZvvX2K1xHIYioi7F\nAEN0AYrTqdEn2Yo+yfJl3uX+psNQjbsORzLEaaRAc0lvO+INGqS6zDAbtJ35NojoAsYAQ0QSq0kH\nq8mOgb3t0rEGUYS3tEqaLBwON0dyy3HoVBk2bs+Vzk0w66Q5NeFeG1bzJqJoiGqAycrKwrZt21BX\nV4e7774bgwYNwiOPPIK6ujpoNBo899xzcLlcWLt2Ld544w2oVCpkZmZi1qxZ0WwWEZ0FlSDAbTPC\nbTNi+MUu6XhtXT3yiwMoq67HviNe5HqDAWf30RLsPloinScAcCUYkNpk4nCizcD5NUR0zqIWYLZs\n2YKDBw9i9erV8Pl8mD59On74wx8iMzMTkydPxv/93//h9ddfx7x587B06VJkZ2dDq9Vi5syZGD9+\nPBISEqLVNCLqAFqNGj0TLXC5LBjUq/H3VVrm7Q3uMhzutWlazbvp/JpUZ/AjyygQUXtELcCkp6dj\n8ODBAACr1Yqqqir87ne/Q1xcHADAZrNh9+7d2LFjBwYNGgSLxQIAGD58OHJycjB27NhoNY2Ioqi1\nZd7lgVqpdEJuaIl3sFaUfH5NnE4drObtlPfYWI1aThwmIknUAoxarYbRaAQAZGdnY9SoUdLj+vp6\n/PWvf8XcuXPh9XphtzeOt9vtdng8nhavGWazGaHRRG9M3eWyRO3adH54b2JTe+6LG0D/3g7ZsYYG\nEUW+AE4UVOBYfjmOF5TjREEFThRW4EiTMgpWkw69k63omWRBrySr9LlRz4nDbeHvTOzivTk/UZ/E\nu379emRnZ2PlypUAguHlwQcfxFVXXYURI0bgo48+kp0viuIZr+nzBaLSViD4A+XxVJz5ROp0vDex\n6XzvixpAH7cJfdwmYEgygGAZhcKSQGjfmlCPjcePnYe8+D5imTcAOKxxjUUvQ8NQyQ4jtFH8nxyl\n4O9M7OK9aZ+2Ql5UA8ymTZuwfPlyvPbaa9IQ0SOPPIJevXph3rx5AAC32w2vt/EPUlFREYYOHRrN\nZhFRjNOoVaFQYsYPBjYel/avCQ9FhTbm+/5wMb4/XCydpxIEJNoNstVQqS7WhyLqTqIWYCoqKpCV\nlYVVq1ZJE3LXrl0LrVaLe++9VzpvyJAhWLhwIcrLy6FWq5GTk4NHH300Ws0iIgVrbf+ayqpaaV5N\n5HLv/OIAtu5vXh8qGGhC4cZpgs3CjfmIlCZqAWbdunXw+XyYP3++dCwvLw9WqxWzZ88GAPTr1w+/\n//3vsWDBAsyZMweCIGDu3LlSbw0RUXuYDVoM6GnDgJ426ZgoivBVnJYmC4dDTV5x8/pQkRvzpTqD\ne9ekOk2wmnSd/VaIqJ0EsT2TTmJMNMcNOS4Zu3hvYpPS7ktDgwhPaZU0DHUqtH9NYUkVGpr8OTQb\ntMFA4zJJK6NSnCZYjMoINkq7NxcS3pv26bI5MEREsUalEpBoNyLRbsQVAxqPhzfmy/P6pV6bPK8f\nB06WYv9JeeFLq1Eb6qUxI8VlQorDyFIKRJ2MAYaICI0b8/VMlP8f3+naehREBJvgx5YreltNOtkQ\nVIozONfGxKXeRB2OAYaIqA1xWjV6JVnQK6lJsKmpR35JY09NONzsPe7D3uM+2bnxZnmwSXWakeI0\nwajnn2Cic8XfHiKicxCnU6N3khW9k+Qroqpr6pBfHGgSbCqx55gPe47Jg43NEifvrQl9NMTxTzPR\nmfC3hIioA+l1mhaXeledrkNesR95nsihKH+z4pcAYLc2DTZmpDiN0Ov4J5sojL8NRESdwBCnQb+U\nePRLiZcdD1SHgo00cTi4n82uIyXYdUQebBxWPVJd8t6aFIcJcTruOkwXHgYYIqIuZNRr0D81Hv1T\n5cHGX13bOAQV0WvTdNdhAHDG65tNHE52mDrzbRB1OgYYIqIYZNJrcVFaAi5KS5Adr6xqGmwqWww2\nAoAkhwmJNkPjzsNOM5IcRmjUqk5+N0QdjwGGiEhBzAYtLu6RgIt7yINNRaCmcQ+bULjJKw4gv9iP\n7yIKYKpVAtw2A1JdZqRF9Ni4bQaoVQw2pBwMMERE3YDFqMOAnjpZOQWn04zDx0uQ56kM7Tjc2GOT\nXxzA1ojna9QqpDiMjbsOhwKOPV4PFetEUQxigCEi6qYEQUC8SYd4kx0De9ul4+E6UafCgSZUUiHf\n68eJokrZNeK0aqmXJk0qq2BGglnHApjUpRhgiIguMIIgwG7Vw27VY3A/h3S8oUGEp6xKCjThCt8n\nCitwNL9cdg2TXhOqExUsgJnmUladKFI+BhgiIgIQqhNlMyLRZsSwi13S8br6BhT6qoKBJrRB3ymv\nHwdzy3DgVJnsGuFyCqkRQ1Gp3JyPooA/UURE1CaNWiVV48bAxuM1tfUoKAmEqno3hpuWyik4rHFI\ncZqlYJPmMiPZYYROyz1s6NwwwBAR0TnRaVsugBnedVgqpxCaRLzzSDF2HpEv9XbZDLKemlSXCUl2\nLvWmM2OAISKiDtXarsPSHjaRq6I8ldh+0IvtB+VLvZPsRmnycGqo58adYIBKxYnDFMQAQ0REnaKl\nPWxEUUS5v0YKNHmhoahTof1svt3X+HytRoVkh1HeY8Ol3hcsBhgiIuoygiAg3hyHeHMcLmuy1Lu4\nvFqqEXUqNByVV+zHiUl3HngAAAp1SURBVMJKAIXSuXE6NVIcXOp9oWGAISKimCMIApzxBjjjDRjc\nzykdb2gQ4SmtCu44HFrm3dpSb2OcJlRGobG3JsVlgpVLvbsFBhgiIlIMlUpAot2IRLsRw1tZ6i31\n2nj9OJRbhoNNl3obtUh1mSM26At+btTzn0Ql4d0iIiLFky31jlBbV4/84kCojEJjr01LS71tlriI\nPWyCE4dTHCbE6bjUOxYxwBARUbel1bS81Lu6pg553gByI/avyfX6setoCXYdLZGd64zXI80VCjSh\nkJTsMEKrYbDpSgwwRER0wdHrNOibYkXfFKvseKC6NtRTI++x+e6QV1bVWxCARJtRtuNwitOERJuB\ne9h0EgYYIiKiEKNei4vSEnBRWoLseLm/Brle+cZ8eR4/CkoC2LbfI52nVglIdoT3sGncnM8Vzz1s\nOhoDDBER0RlYTTpYTToM7GWTjomiiNLKGmkYKtxrk+cNLvvG3iLpXJ1GhWRHY42ogf2cMGtV3MPm\nPDDAEBERnQNBEGCzxMFmicPlfSKqeosiSsqqpYreeRFDUscLK4InbTwMAIjTqpHiDPXYhFZDpTpN\nsFvjuIfNGTDAEBERdSCVIMCZYIAzwYCh/Rv3sKlvaICntBq5nkqUVtXh4PGS0B42lTiaXyG7hl6n\nRoozuAoqJaK6t83CYBPGAENERNQJ1CoVkuxGJNmNcLks8HiCoaWuviG4OV/Eaqg8rx/HCypwJE++\nOZ8hTt0YakIb86U4LsxgwwBDRETUhTTq4PyYZId8D5vw5nx5EUNRecUBHCuowOFmwUaDFGewTlSK\n0xz6aOrW5RQYYIiIiGJQ5OZ86Ze4peN19Q0oLAk0rooKfTyaV4HDuc3LKYR7aVKlOlEmxJuUH2wY\nYIiIiBREo1YFl2i7zLLjdfUNKCgJSJOGw+HmSG45DjUpp2DSaxqHoSI+WhUUbBhgiIiIugGNWoU0\nlxlpLjMwsPF4bV0w2OR6K5HnDUjBpqU6USa9JtRTY5aFG6sp9gpgMsAQERF1Y1qNCj3cZvRwy3ts\nwnWiIoehcr1+HDxVhgNNgo3ZoJUCTeQE4q6s7M0AQ0REdAFqrU5UTW19qMfGLxuOOnCyFPtPlsrO\ntRi1GDkoGZlj+ndm0wEwwBAREVEEnbblYHO6th4FxU2HoipRUl7dJe1kgCEiIqIzitOq0SvJgl5J\nljOf3AlYMpOIiIgUhwGGiIiIFIcBhoiIiBSHAYaIiIgUhwGGiIiIFIcBhoiIiBSHAYaIiIgUhwGG\niIiIFIcBhoiIiBSHAYaIiIgUhwGGiIiIFIcBhoiIiBSHAYaIiIgURxBFUezqRhARERGdDfbAEBER\nkeIwwBAREZHiMMAQERGR4jDAEBERkeIwwBAREZHiMMAQERGR4jDARHj66adx00034eabb8b333/f\n1c2hCFlZWbjpppswY8YMfP75513dHIpQXV2N66+/HmvWrOnqplCEtWvX4kc/+hFuvPFGbNy4saub\nQwD8fj/mzZuH2bNn4+abb8amTZu6ukmKpunqBsSKb775BsePH8fq1atx+PBhPProo1i9enVXN4sA\nbNmyBQcPHsTq1avh8/kwffp0TJgwoaubRSGvvPIK4uPju7oZFMHn82Hp0qV47733EAgEsHjxYowe\nPbqrm3XBe//999GnTx8s+P/27i6kyb6B4/h3ty+ITkklC1kKrgNRezUPMq2DiqAOhN5W5uooCI8K\ni4ZlK+pkQRBh9EIFsggtgyIqoyhDaEVQSIwsCg8yX5a4UtFpm3sObovbu+e5iadHL6+n3+dsF9c1\nfn8Y22/X/8/1r6qip6eHHTt20NTUZHQs01KBGefz+Vi1ahUAdrudL1++MDg4iNVqNTiZFBUVMX/+\nfABSUlIYHh4mEokQExNjcDJ5//49796904/jNOPz+Vi6dClWqxWr1crRo0eNjiRAamoqb968AaC/\nv5/U1FSDE5mbppDG9fb2TvgwpaWl8enTJwMTyTcxMTEkJiYC0NjYyPLly1VepgmPx4PL5TI6hvxN\nR0cHoVCIXbt2UV5ejs/nMzqSAOvWraOzs5PVq1dTUVHB/v37jY5karoD8x9oh4Xp58GDBzQ2NnLp\n0iWjowhw48YNFi5cyJw5c4yOIv/G58+fqa2tpbOzk+3bt/Po0SMsFovRsX5rN2/eJDMzk4sXL9LW\n1kZ1dbXWjv0CFZhxGRkZ9Pb2fn8dCASYOXOmgYnkr1paWjh79iwXLlwgOTnZ6DgCNDc38+HDB5qb\nm+nu7iY+Pp7Zs2dTXFxsdLTfXnp6OosWLSI2NpasrCySkpLo6+sjPT3d6Gi/tRcvXlBSUgJAbm4u\ngUBA0+G/QFNI45YtW8a9e/cA8Pv9ZGRkaP3LNDEwMMDx48c5d+4cM2bMMDqOjDt58iTXr1/n6tWr\nbNq0icrKSpWXaaKkpISnT58yNjZGMBhkaGhI6y2mgezsbFpbWwH4+PEjSUlJKi+/QHdgxi1evJj8\n/Hy2bNmCxWLB7XYbHUnG3blzh2AwyO7du78f83g8ZGZmGphKZPqaNWsWa9asYfPmzQAcPHiQP/7Q\n/1WjORwOqqurqaioIBwOc/jwYaMjmZolqsUeIiIiYjKq5CIiImI6KjAiIiJiOiowIiIiYjoqMCIi\nImI6KjAiIiJiOiowIjKpOjo6KCgowOl0ft+Ft6qqiv7+/p9+D6fTSSQS+enzt27dyrNnz/6buCJi\nEiowIjLp0tLS8Hq9eL1e6uvrycjI4MyZMz99vdfr1QO/RGQCPchORKZcUVERDQ0NtLW14fF4CIfD\nfP36lUOHDpGXl4fT6SQ3N5fXr19TV1dHXl4efr+f0dFRampq6O7uJhwOU1ZWRnl5OcPDw+zZs4dg\nMEh2djYjIyMA9PT0sHfvXgBCoRAOh4ONGzcaOXQR+R9RgRGRKRWJRLh//z6FhYXs27eP06dPk5WV\n9cPmdomJiVy+fHnCtV6vl5SUFE6cOEEoFGLt2rWUlpby5MkTEhISaGhoIBAIsHLlSgDu3r1LTk4O\nR44cYWRkhGvXrk35eEVkcqjAiMik6+vrw+l0AjA2NsaSJUvYsGEDp06d4sCBA9/PGxwcZGxsDPhz\ne4+/a21tZf369QAkJCRQUFCA3+/n7du3FBYWAn9uzJqTkwNAaWkpV65cweVysWLFChwOx6SOU0Sm\njgqMiEy6b2tg/mpgYIC4uLgfjn8TFxf3wzGLxTLhdTQaxWKxEI1GJ+z1860E2e12bt++zfPnz2lq\naqKuro76+vpfHY6ITANaxCsihkhOTsZms/H48WMA2tvbqa2t/cdrFixYQEtLCwBDQ0P4/X7y8/Ox\n2+28fPkSgK6uLtrb2wG4desWr169ori4GLfbTVdXF+FweBJHJSJTRXdgRMQwHo+HY8eOcf78ecLh\nMC6X6x/Pdzqd1NTUsG3bNkZHR6msrMRms1FWVsbDhw8pLy/HZrMxb948AObOnYvb7SY+Pp5oNMrO\nnTuJjdXXnsj/A+1GLSIiIqajKSQRERExHRUYERERMR0VGBERETEdFRgRERExHRUYERERMR0VGBER\nETEdFRgRERExHRUYERERMZ1/AX8YjXf4ycVNAAAAAElFTkSuQmCC\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": "i1imhjFzbWwt",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "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": 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": 33
+ },
+ "outputId": "d08b8a27-59ed-4077-f7d9-44fe71aee781"
+ },
+ "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",
+ "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": 14,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "Final RMSE (on test data): 221.42\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": 33
+ },
+ "outputId": "c4017954-7b73-4b96-9a96-cd8fbc53a7e3"
+ },
+ "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": 15,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "Final RMSE (on test data): 221.42\n"
+ ],
+ "name": "stdout"
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file