{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## Linear regression\n", "\n", "Using a subset of the [Million Song Dataset](http://labrosa.ee.columbia.edu/millionsong/) we will train a linear regression model in order to predict the release year of a song\n", "in function of other information." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import pyspark\n", "sc = pyspark.SparkContext('local[*]')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1. Reading the data" ] }, { "cell_type": "code", "execution_count": 55, "metadata": {}, "outputs": [], "source": [ "import os.path\n", "baseDir = os.path.join('data')\n", "inputPath = os.path.join('millionsong.txt')\n", "fileName = os.path.join(baseDir, inputPath)\n", "\n", "numPartitions = 2\n", "rawData = sc.textFile(fileName, numPartitions)" ] }, { "cell_type": "code", "execution_count": 56, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "6724\n", "['2001.0,0.884123733793,0.610454259079,0.600498416968,0.474669212493,0.247232680947,0.357306088914,0.344136412234,0.339641227335,0.600858840135,0.425704689024,0.60491501652,0.419193351817', '2001.0,0.854411946129,0.604124786151,0.593634078776,0.495885413963,0.266307830936,0.261472105188,0.506387076327,0.464453565511,0.665798573683,0.542968988766,0.58044428577,0.445219373624', '2001.0,0.908982970575,0.632063159227,0.557428975183,0.498263761394,0.276396052336,0.312809861625,0.448530069406,0.448674249968,0.649791323916,0.489868662682,0.591908113534,0.4500023818', '2001.0,0.842525219898,0.561826888508,0.508715259692,0.443531142139,0.296733836002,0.250213568176,0.488540873206,0.360508747659,0.575435243185,0.361005878554,0.678378718617,0.409036786173', '2001.0,0.909303285534,0.653607720915,0.585580794716,0.473250503005,0.251417011835,0.326976795524,0.40432273022,0.371154511756,0.629401917965,0.482243251755,0.566901413923,0.463373691946']\n" ] } ], "source": [ "numPoints = rawData.count()\n", "print(numPoints)\n", "samplePoints = rawData.take(5)\n", "print(samplePoints)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### The `LabeledPoint` class" ] }, { "cell_type": "code", "execution_count": 57, "metadata": {}, "outputs": [], "source": [ "from pyspark.mllib.regression import LabeledPoint\n", "import numpy as np\n", "\n", "# Here is a sample raw data point:\n", "# '2001.0,0.884,0.610,0.600,0.474,0.247,0.357,0.344,0.33,0.600,0.425,0.60,0.419'\n", "# In this raw data point, 2001.0 is the label, and the remaining values are features" ] }, { "cell_type": "code", "execution_count": 58, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[0.884123733793,0.610454259079,0.600498416968,0.474669212493,0.247232680947,0.357306088914,0.344136412234,0.339641227335,0.600858840135,0.425704689024,0.60491501652,0.419193351817], 2001.0\n", "12\n" ] } ], "source": [ "def parsePoint(line):\n", " \"\"\"Converts a comma separated unicode string into a `LabeledPoint`.\n", "\n", " Args:\n", " line (unicode): Comma separated unicode string where the first element is the label and the\n", " remaining elements are features.\n", "\n", " Returns:\n", " LabeledPoint: The line is converted into a `LabeledPoint`, which consists of a label and\n", " features.\n", " \"\"\"\n", " label_and_features = line.split(',')\n", " return LabeledPoint(label_and_features[0], label_and_features[1:])\n", "\n", "parsedSamplePoints = list(map(parsePoint, samplePoints))\n", "firstPointFeatures = parsedSamplePoints[0].features\n", "firstPointLabel = parsedSamplePoints[0].label\n", "print('{}, {}'.format(firstPointFeatures, firstPointLabel))\n", "\n", "d = len(firstPointFeatures)\n", "print(d)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Feature visualization\n", "\n", "We visualize the raw features for 50 data points by generating a heatmap that shows each feature on a grey-scale and illustrates the variation of each feature across the 50 sampled data points. The features are all between 0 and 1, with values closer to 1 represented via darker shades of grey." ] }, { "cell_type": "code", "execution_count": 67, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "\n", "import matplotlib.pyplot as plt\n", "import matplotlib.cm as cm\n", "\n", "sampleMorePoints = rawData.take(50)\n", "# You can uncomment the line below to see randomly selected features. These will be randomly\n", "# selected each time you run the cell.\n", "# sampleMorePoints = rawData.takeSample(False, 50)\n", "\n", "parsedSampleMorePoints = list(map(parsePoint, sampleMorePoints))\n", "dataValues = list(map(lambda lp: lp.features.toArray(), parsedSampleMorePoints))\n", "\n", "def preparePlot(xticks, yticks, figsize=(10.5, 6), hideLabels=False, gridColor='#999999',\n", " gridWidth=1.0):\n", " \"\"\"Template for generating the plot layout.\"\"\"\n", " plt.close()\n", " fig, ax = plt.subplots(figsize=figsize, facecolor='white', edgecolor='white')\n", " ax.axes.tick_params(labelcolor='#999999', labelsize='10')\n", " for axis, ticks in [(ax.get_xaxis(), xticks), (ax.get_yaxis(), yticks)]:\n", " axis.set_ticks_position('none')\n", " axis.set_ticks(ticks)\n", " axis.label.set_color('#999999')\n", " if hideLabels: axis.set_ticklabels([])\n", " plt.grid(color=gridColor, linewidth=gridWidth, linestyle='-')\n", " map(lambda position: ax.spines[position].set_visible(False),\n", " ['bottom', 'top', 'left', 'right'])\n", " return fig, ax\n", "\n", "# generate layout and plot\n", "fig, ax = preparePlot(np.arange(.5, 11, 1), np.arange(.5, 49, 1),\n", " figsize=(8,7), hideLabels=True,\n", " gridColor='#eeeeee', gridWidth=1.1)\n", "image = plt.imshow(dataValues, interpolation='nearest',\n", " aspect='auto', cmap=cm.Greys)\n", "for x, y, s in zip(np.arange(-.125, 12, 1),\n", " np.repeat(-.75, 12),\n", " [str(x) for x in range(12)]):\n", " plt.text(x, y, s, color='#999999', size='10')\n", "plt.text(4.7, -3, 'Feature', color='#999999', size='11')\n", "ax.set_ylabel('Observation')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Find the range\n", "\n", "Let's examine the labels to find the range of song years. To do this, first parse each element of the `rawData` RDD, and then find the smallest and largest labels." ] }, { "cell_type": "code", "execution_count": 69, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2011.0 1922.0\n" ] } ], "source": [ "parsedDataInit = rawData.map(lambda s: parsePoint(s))\n", "onlyLabels = parsedDataInit.map(lambda p: p.label)\n", "minYear = onlyLabels.min()\n", "maxYear = onlyLabels.max()\n", "print(maxYear, minYear)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Shift labels\n", "\n", "Labels are years in the 1900s and 2000s. In learning problems, it is often natural to shift labels such that they start from zero. Starting with `parsedDataInit`, create a new RDD consisting of `LabeledPoint` objects in which the labels are shifted such that smallest label equals zero." ] }, { "cell_type": "code", "execution_count": 70, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "\n", "[LabeledPoint(79.0, [0.884123733793,0.610454259079,0.600498416968,0.474669212493,0.247232680947,0.357306088914,0.344136412234,0.339641227335,0.600858840135,0.425704689024,0.60491501652,0.419193351817])]\n" ] } ], "source": [ "parsedData = parsedDataInit.map(lambda p: LabeledPoint(p.label-minYear, p.features))\n", "\n", "# Should be a LabeledPoint\n", "print(type(parsedData.take(1)[0]))\n", "# View the first point\n", "print('\\n{0}'.format(parsedData.take(1)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Shifting labels\n", "\n", "We will look at the labels before and after shifting them. Both scatter plots below visualize tuples storing i) a label value and ii) the number of training points with this label. The first scatter plot uses the initial labels, while the second one uses the shifted labels. Note that the two plots look the same except for the labels on the x-axis." ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# get data for plot\n", "oldData = (parsedDataInit\n", " .map(lambda lp: (lp.label, 1))\n", " .reduceByKey(lambda x, y: x + y)\n", " .collect())\n", "x, y = zip(*oldData)\n", "\n", "# generate layout and plot data\n", "fig, ax = preparePlot(np.arange(1920, 2050, 20), np.arange(0, 150, 20))\n", "plt.scatter(x, y, s=14**2, c='#d6ebf2', edgecolors='#8cbfd0', alpha=0.75)\n", "ax.set_xlabel('Year'), ax.set_ylabel('Count')\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# get data for plot\n", "newData = (parsedData\n", " .map(lambda lp: (lp.label, 1))\n", " .reduceByKey(lambda x, y: x + y)\n", " .collect())\n", "x, y = zip(*newData)\n", "\n", "# generate layout and plot data\n", "fig, ax = preparePlot(np.arange(0, 120, 20), np.arange(0, 120, 20))\n", "plt.scatter(x, y, s=14**2, c='#d6ebf2', edgecolors='#8cbfd0', alpha=0.75)\n", "ax.set_xlabel('Year (shifted)'), ax.set_ylabel('Count')\n", "pass" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Training, validation, and test sets\n", "\n", "Our final task involves split it into training, validation and test sets. Use the`randomSplit` with the specified weights and seed to create RDDs storing each of these datasets. Next, cache each of these RDDs, as we will be accessing them multiple times in the remainder of this lab. Finally, compute the size of each dataset and verify that the sum of their sizes equals the total number of data items." ] }, { "cell_type": "code", "execution_count": 71, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "5359 678 687 6724\n", "6724\n" ] } ], "source": [ "weights = [.8, .1, .1]\n", "seed = 42\n", "parsedTrainData, parsedValData, parsedTestData = parsedData.randomSplit(weights, seed=seed)\n", "parsedTrainData.cache()\n", "parsedValData.cache()\n", "parsedTestData.cache()\n", "nTrain = parsedTrainData.count()\n", "nVal = parsedValData.count()\n", "nTest = parsedTestData.count()\n", "\n", "print('{} {} {} {}'.format(nTrain, nVal, nTest, nTrain + nVal + nTest))\n", "print(parsedData.count())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2. Create and evaluate a baseline model" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Average label\n", "\n", "A very simple yet natural baseline model is one where we always make the same prediction independent of the given data point, using the average label in the training set as the constant prediction value. Compute this value, which is the average (shifted) song year for the training set." ] }, { "cell_type": "code", "execution_count": 72, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "53.67923119985066\n" ] } ], "source": [ "averageTrainYear = (parsedTrainData\n", " .map(lambda p: p.label)\n", " .mean())\n", "print(averageTrainYear)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Root mean squared error\n", "\n", "We naturally would like to see how well this naive baseline performs. We will use root mean squared error (RMSE) for evaluation purposes. Implement a function to compute RMSE given an RDD of (label, prediction) tuples, and test out this function on an example." ] }, { "cell_type": "code", "execution_count": 73, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1.29099444874\n" ] } ], "source": [ "def squaredError(label, prediction):\n", " \"\"\"Calculates the the squared error for a single prediction.\n", "\n", " Args:\n", " label (float): The correct value for this observation.\n", " prediction (float): The predicted value for this observation.\n", "\n", " Returns:\n", " float: The difference between the `label` and `prediction` squared.\n", " \"\"\"\n", " return (label - prediction) ** 2\n", "\n", "def calcRMSE(labelsAndPreds):\n", " \"\"\"Calculates the root mean squared error for an `RDD` of (label, prediction) tuples.\n", "\n", " Args:\n", " labelsAndPred (RDD of (float, float)): An `RDD` consisting of (label, prediction) tuples.\n", "\n", " Returns:\n", " float: The square root of the mean of the squared errors.\n", " \"\"\"\n", " return np.sqrt(labelsAndPreds.map(lambda p: squaredError(*p)).mean())\n", "\n", "labelsAndPreds = sc.parallelize([(3., 1.), (1., 2.), (2., 2.)])\n", "# RMSE = sqrt[((3-1)^2 + (1-2)^2 + (2-2)^2) / 3] = 1.291\n", "exampleRMSE = calcRMSE(labelsAndPreds)\n", "print(exampleRMSE)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Training, validation and test RMSE\n", "\n", "Now let's calculate the training, validation and test RMSE of our baseline model. To do this, first create RDDs of (label, prediction) tuples for each dataset, and then call calcRMSE. Note that each RMSE can be interpreted as the average prediction error for the given dataset (in terms of number of years)." ] }, { "cell_type": "code", "execution_count": 74, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Baseline Train RMSE = 21.506\n", "Baseline Validation RMSE = 20.877\n", "Baseline Test RMSE = 21.260\n" ] } ], "source": [ "labelsAndPredsTrain = parsedTrainData.map(lambda p: (p.label, averageTrainYear))\n", "rmseTrainBase = calcRMSE(labelsAndPredsTrain)\n", "\n", "labelsAndPredsVal = parsedValData.map(lambda p: (p.label, averageTrainYear))\n", "rmseValBase = calcRMSE(labelsAndPredsVal)\n", "\n", "labelsAndPredsTest = parsedTestData.map(lambda p: (p.label, averageTrainYear))\n", "rmseTestBase = calcRMSE(labelsAndPredsTest)\n", "\n", "print('Baseline Train RMSE = {0:.3f}'.format(rmseTrainBase))\n", "print('Baseline Validation RMSE = {0:.3f}'.format(rmseValBase))\n", "print('Baseline Test RMSE = {0:.3f}'.format(rmseTestBase))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Predicted vs. actual\n", "\n", "We will visualize predictions on the validation dataset. The scatter plots below visualize tuples storing i) the predicted value and ii) true label. The first scatter plot represents the ideal situation where the predicted value exactly equals the true label, while the second plot uses the baseline predictor (i.e., `averageTrainYear`) for all predicted values. Further note that the points in the scatter plots are color-coded, ranging from light yellow when the true and predicted values are equal to bright red when they drastically differ." ] }, { "cell_type": "code", "execution_count": 75, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from matplotlib.colors import ListedColormap, Normalize\n", "from matplotlib.cm import get_cmap\n", "cmap = get_cmap('YlOrRd')\n", "norm = Normalize()\n", "\n", "actual = np.asarray(parsedValData\n", " .map(lambda lp: lp.label)\n", " .collect())\n", "error = np.asarray(parsedValData\n", " .map(lambda lp: (lp.label, lp.label))\n", " .map(lambda lp: squaredError(*lp))\n", " .collect())\n", "clrs = cmap(np.asarray(norm(error)))[:,0:3]\n", "\n", "fig, ax = preparePlot(np.arange(0, 100, 20), np.arange(0, 100, 20))\n", "plt.scatter(actual, actual, s=14**2, c=clrs, edgecolors='#888888', alpha=0.75, linewidths=0.5)\n", "ax.set_xlabel('Predicted'), ax.set_ylabel('Actual')\n", "pass" ] }, { "cell_type": "code", "execution_count": 76, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(Text(0.5,0,'Predicted'), Text(0,0.5,'Actual'))" ] }, "execution_count": 76, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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ANlw+vRpeTwepVIpud1u7d27V0uWzK7kPXnyRLdv39aBAwcUDAY1MDAgn8837baJREKPHj3Spk2bftZnXL9+XTabTY2NjbOKEQBmwkwfgEXJarXK7/ertbVVVqtV9+/fn/R+Op3WbO5YVVdX996GT5JGR0enfBYAFAJm+gAseuXl5Xr16pUGBwfV0dGhyspKPX/+XPv371c0GtX169eVTCblcrnU0tIim82mUCikzs5O2e12lZaWZvb18OFD9ff3q7m5WcPDw7p69apisZgkqbm5WXfv3lUsFlMgEFBVVZV27NihW7du6fHjx0omk6qrq8usAd3V1aXu7m45nc4pnwMA842mD8CilkqlFAqFMisiDAwMaM+ePWpubtbr16/V1dWlgwcPymaz6ebNm7p9+7YaGxv1zTff6NChQ3K5XLp8+fK0++7s7FRFRYX279+vVCql8fFxbfQYxU0AAAH3SURBVN++XZFIRH6/X5LU19enaDSqI0eOSJK++uorPX36VEuWLFFPT4/8fr9SqZTa29tp+gBkFU0fgEUpmUwqEAhIejPTt379eg0PD2v58uXyer2SpOfPnysSiej8+fOZMV6vVwMDA1q+fLlKSkokSWvXrtWDBw+mfMaTJ0+0d+9eSZLFYlFRUZESicSkbfr6+tTX16f29nZJb9ZijUajGhsb0+rVqzPnGdbW1mbhvwAA/0fTB2BRmjin713vXsxRXV2tjz/+eNJrL1++lGEY8xLHxPqpGzdunPT6nTt35mX/APChuJADgGmtWrVKz549UzQalSSNj49rYGBAbrdbsVgsc65eT0/PtOMrKyszF22kUimNjo7KZrNpbGwss01NTY0ePnyYeS0ej2tkZEQVFRUKBoMaHx/X6Oioent7s/lVAYCZPgDmVVxcrJaWFn399ddKJpOSpKamJrndbu3evVsdHR2y2+0qLy9XJBKZMn7nzp26cuWKHjx4IIvFoubmZnm9Xnm9Xp09e1Y1NTXasWOHIpGIzp07J0my2Wzat2+fSktLVV9fr0AgIKfTqfLy8px+dwDmY6Rnc88CAAAALCgc3gUAADABmj4AAAAToOkDAAAwAZo+AAAAE6DpAwAAMAGaPgAAABOg6QMAADABmj4AAAAT+B/XAnPCURZSYQAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "predictions = np.asarray(parsedValData\n", " .map(lambda lp: averageTrainYear)\n", " .collect())\n", "error = np.asarray(parsedValData\n", " .map(lambda lp: (lp.label, averageTrainYear))\n", " .map(lambda lp: squaredError(*lp))\n", " .collect())\n", "norm = Normalize()\n", "clrs = cmap(np.asarray(norm(error)))[:,0:3]\n", "\n", "fig, ax = preparePlot(np.arange(53.0, 55.0, 0.5), np.arange(0, 100, 20))\n", "ax.set_xlim(53, 55)\n", "plt.scatter(predictions, actual, s=14**2, c=clrs, edgecolors='#888888', alpha=0.75, linewidths=0.3)\n", "ax.set_xlabel('Predicted'), ax.set_ylabel('Actual')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3. Train via gradient descent and evaluate a linear regression model" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Gradient summand\n", "\n", "Now let's see if we can do better via linear regression, training a model via gradient descent (we'll omit the intercept for now). Recall that the gradient descent update for linear regression is: $$ \\scriptsize \\mathbf{w}_{i+1} = \\mathbf{w}_i - \\alpha_i \\sum_j (\\mathbf{w}_i^\\top\\mathbf{x}_j - y_j) \\mathbf{x}_j \\,.$$ where $ \\scriptsize i $ is the iteration number of the gradient descent algorithm, and $ \\scriptsize j $ identifies the observation.\n", "\n", "First, implement a function that computes the summand for this update, i.e., the summand equals $ \\scriptsize (\\mathbf{w}^\\top \\mathbf{x} - y) \\mathbf{x} \\, ,$ and test out this function on two examples. Use the `DenseVector` [dot](http://spark.apache.org/docs/latest/api/python/pyspark.mllib.html#pyspark.mllib.linalg.DenseVector.dot) method." ] }, { "cell_type": "code", "execution_count": 77, "metadata": {}, "outputs": [], "source": [ "from pyspark.mllib.linalg import DenseVector" ] }, { "cell_type": "code", "execution_count": 78, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[18.0,6.0,24.0]\n", "[1.7304,-5.1912,-2.5956]\n" ] } ], "source": [ "def gradientSummand(weights, lp):\n", " \"\"\"Calculates the gradient summand for a given weight and `LabeledPoint`.\n", "\n", " Note:\n", " `DenseVector` behaves similarly to a `numpy.ndarray` and they can be used interchangably\n", " within this function. For example, they both implement the `dot` method.\n", "\n", " Args:\n", " weights (DenseVector): An array of model weights (betas).\n", " lp (LabeledPoint): The `LabeledPoint` for a single observation.\n", "\n", " Returns:\n", " DenseVector: An array of values the same length as `weights`. The gradient summand.\n", " \"\"\"\n", " return (weights.dot(DenseVector(lp.features)) - lp.label) * lp.features\n", "\n", "exampleW = DenseVector([1, 1, 1])\n", "exampleLP = LabeledPoint(2.0, [3, 1, 4])\n", "# gradientSummand = (dot([1 1 1], [3 1 4]) - 2) * [3 1 4] = (8 - 2) * [3 1 4] = [18 6 24]\n", "summandOne = gradientSummand(exampleW, exampleLP)\n", "print(summandOne)\n", "\n", "exampleW = DenseVector([.24, 1.2, -1.4])\n", "exampleLP = LabeledPoint(3.0, [-1.4, 4.2, 2.1])\n", "summandTwo = gradientSummand(exampleW, exampleLP)\n", "print(summandTwo)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Use weights to make predictions\n", "\n", "Next, implement a `getLabeledPredictions` function that takes in weights and an observation's `LabeledPoint` and returns a (label, prediction) tuple. Note that we can predict by computing the dot product between weights and an observation's features." ] }, { "cell_type": "code", "execution_count": 79, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[(2.0, 1.75), (1.5, 1.25)]\n" ] } ], "source": [ "def getLabeledPrediction(weights, observation):\n", " \"\"\"Calculates predictions and returns a (label, prediction) tuple.\n", "\n", " Note:\n", " The labels should remain unchanged as we'll use this information to calculate prediction\n", " error later.\n", "\n", " Args:\n", " weights (np.ndarray): An array with one weight for each features in `trainData`.\n", " observation (LabeledPoint): A `LabeledPoint` that contain the correct label and the\n", " features for the data point.\n", "\n", " Returns:\n", " tuple: A (label, prediction) tuple.\n", " \"\"\"\n", " return (observation.label, weights.dot(DenseVector(observation.features)))\n", "\n", "weights = np.array([1.0, 1.5])\n", "predictionExample = sc.parallelize([LabeledPoint(2, np.array([1.0, .5])),\n", " LabeledPoint(1.5, np.array([.5, .5]))])\n", "labelsAndPredsExample = predictionExample.map(lambda lp: getLabeledPrediction(weights, lp))\n", "print(labelsAndPredsExample.collect())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Gradient descent\n", "\n", "Next, implement a gradient descent function for linear regression and test out this function on an example." ] }, { "cell_type": "code", "execution_count": 80, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[LabeledPoint(79.0, [0.884123733793,0.610454259079,0.600498416968]), LabeledPoint(79.0, [0.854411946129,0.604124786151,0.593634078776])]\n", "[ 48.20389904 34.53243006 30.60284959]\n" ] } ], "source": [ "def linregGradientDescent(trainData, numIters):\n", " \"\"\"Calculates the weights and error for a linear regression model trained with gradient descent.\n", "\n", " Note:\n", " `DenseVector` behaves similarly to a `numpy.ndarray` and they can be used interchangably\n", " within this function. For example, they both implement the `dot` method.\n", "\n", " Args:\n", " trainData (RDD of LabeledPoint): The labeled data for use in training the model.\n", " numIters (int): The number of iterations of gradient descent to perform.\n", "\n", " Returns:\n", " (np.ndarray, np.ndarray): A tuple of (weights, training errors). Weights will be the\n", " final weights (one weight per feature) for the model, and training errors will contain\n", " an error (RMSE) for each iteration of the algorithm.\n", " \"\"\"\n", " # The length of the training data\n", " n = trainData.count()\n", " # The number of features in the training data\n", " d = len(trainData.take(1)[0].features)\n", " w = np.zeros(d)\n", " alpha = 1.0\n", " # We will compute and store the training error after each iteration\n", " errorTrain = np.zeros(numIters)\n", " for i in range(numIters):\n", " # Use getLabeledPrediction with trainData to obtain an RDD of (label, prediction)\n", " # tuples. Note that the weights all equal 0 for the first iteration,\n", " # so the predictions will have large errors to start.\n", " labelsAndPredsTrain = trainData.map(lambda p: getLabeledPrediction(w, p))\n", " errorTrain[i] = calcRMSE(labelsAndPredsTrain)\n", "\n", " # Calculate the `gradient`. Make use of the `gradientSummand` function you wrote in (3a).\n", " # Note that `gradient` sould be a `DenseVector` of length `d`.\n", " gradient = sum([DenseVector(gradientSummand(w, lp)) for lp in trainData.collect()])\n", "\n", " # Update the weights\n", " alpha_i = alpha / (n * np.sqrt(i+1))\n", " w -= alpha_i * gradient\n", " return w, errorTrain\n", "\n", "# create a toy dataset with n = 10, d = 3, and then run 5 iterations of gradient descent\n", "# note: the resulting model will not be useful; the goal here is to verify that\n", "# linregGradientDescent is working properly\n", "exampleN = 10\n", "exampleD = 3\n", "exampleData = (sc\n", " .parallelize(parsedTrainData.take(exampleN))\n", " .map(lambda lp: LabeledPoint(lp.label, lp.features[0:exampleD])))\n", "print(exampleData.take(2))\n", "exampleNumIters = 5\n", "exampleWeights, exampleErrorTrain = linregGradientDescent(exampleData, exampleNumIters)\n", "print(exampleWeights)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Train the model\n", "\n", "Now let's train a linear regression model on all of our training data and evaluate its accuracy on the validation set. Note that the test set will not be used here. If we evaluated the model on the test set, we would bias our final results.\n", "\n", "We've already done much of the required work: we computed the number of features, we created the training and validation datasets and computed their sizes, and we wrote a function to compute RMSE." ] }, { "cell_type": "code", "execution_count": 84, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Validation RMSE:\n", "\tBaseline = 20.877\n", "\tLR0 = 16.418\n" ] } ], "source": [ "numIters = 500\n", "weightsLR0, errorTrainLR0 = linregGradientDescent(parsedTrainData, numIters)\n", "\n", "labelsAndPreds = parsedValData.map(lambda p: getLabeledPrediction(weightsLR0, p))\n", "rmseValLR0 = calcRMSE(labelsAndPreds)\n", "\n", "print('Validation RMSE:\\n\\tBaseline = {0:.3f}\\n\\tLR0 = {1:.3f}'.format(rmseValBase,\n", " rmseValLR0))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Visualization of training error\n", "\n", "We will look at the log of the training error as a function of iteration. The first scatter plot visualizes the logarithm of the training error for all 50 iterations. The second plot shows the training error itself, focusing on the final 44 iterations." ] }, { "cell_type": "code", "execution_count": 85, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "norm = Normalize()\n", "clrs = cmap(np.asarray(norm(np.log(errorTrainLR0))))[:,0:3]\n", "\n", "fig, ax = preparePlot(np.arange(0, 60, 10), np.arange(2, 6, 1))\n", "ax.set_ylim(2, 6)\n", "#plt.scatter(range(0, numIters), np.log(errorTrainLR0), s=14**2, c=clrs, edgecolors='#888888', alpha=0.75)\n", "plt.plot(range(0, numIters), np.log(errorTrainLR0))\n", "\n", "ax.set_xlabel('Iteration'), ax.set_ylabel(r'$\\log_e(errorTrainLR0)$')\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 88, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "norm = Normalize()\n", "clrs = cmap(np.asarray(norm(errorTrainLR0[6:])))[:,0:3]\n", "\n", "fig, ax = preparePlot(np.arange(0, 60, 10), np.arange(17, 22, 1))\n", "ax.set_ylim(16.8, 21.2)\n", "#plt.scatter(range(0, numIters-6), errorTrainLR0[6:], s=14**2, c=clrs, edgecolors='#888888', alpha=0.75)\n", "plt.plot(range(0, numIters-6), errorTrainLR0[6:])\n", "ax.set_xticklabels(map(str, range(6, 66, 10)))\n", "ax.set_xlabel('Iteration'), ax.set_ylabel(r'Training Error')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 4. Train using MLlib and perform grid search" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### The class `LinearRegressionWithSGD`\n", "\n", "We're already doing better than the baseline model, but let's see if we can do better by adding an intercept, using regularization, and (based on the previous visualization) training for more iterations. MLlib's [LinearRegressionWithSGD](https://spark.apache.org/docs/latest/api/python/pyspark.mllib.html#pyspark.mllib.regression.LinearRegressionWithSGD) essentially implements the same algorithm that we implemented in Part (3b), albeit more efficiently and with various additional functionality, such as stochastic gradient approximation, including an intercept in the model and also allowing L1 or L2 regularization. First use LinearRegressionWithSGD to train a model with L2 regularization and with an intercept. This method returns a [LinearRegressionModel](https://spark.apache.org/docs/latest/api/python/pyspark.mllib.html#pyspark.mllib.regression.LinearRegressionModel). Next, use the model's [weights](http://spark.apache.org/docs/latest/api/python/pyspark.mllib.html#pyspark.mllib.regression.LinearRegressionModel.weights) and [intercept](http://spark.apache.org/docs/latest/api/python/pyspark.mllib.html#pyspark.mllib.regression.LinearRegressionModel.intercept) attributes to print out the model's parameters." ] }, { "cell_type": "code", "execution_count": 89, "metadata": {}, "outputs": [], "source": [ "from pyspark.mllib.regression import LinearRegressionWithSGD\n", "# Values to use when training the linear regression model\n", "numIters = 500 # iterations\n", "alpha = 1.0 # step\n", "miniBatchFrac = 1.0 # miniBatchFraction\n", "reg = 1e-1 # regParam\n", "regType = 'l2' # regType\n", "useIntercept = True # intercept" ] }, { "cell_type": "code", "execution_count": 90, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[15.9694010246,13.9897244172,0.669349383773,6.24618402989,4.00932179503,-2.30176663131,10.478805422,3.06385145385,7.14414111075,4.49826819526,7.87702565069,3.00732146613] 13.332056210482524\n" ] } ], "source": [ "firstModel = LinearRegressionWithSGD.train(parsedTrainData,\n", " iterations=numIters,\n", " step=alpha,\n", " miniBatchFraction=miniBatchFrac,\n", " regParam=reg,\n", " regType=regType,\n", " intercept=useIntercept)\n", "\n", "# weightsLR1 stores the model weights; interceptLR1 stores the model intercept\n", "weightsLR1 = firstModel.weights\n", "interceptLR1 = firstModel.intercept\n", "print(weightsLR1, interceptLR1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Predict\n", "\n", "Now use the [LinearRegressionModel.predict()](http://spark.apache.org/docs/latest/api/python/pyspark.mllib.html#pyspark.mllib.regression.LinearRegressionModel.predict) method to make a prediction on a sample point. Pass the `features` from a `LabeledPoint` into the `predict()` method." ] }, { "cell_type": "code", "execution_count": 91, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "56.4065674104\n" ] } ], "source": [ "samplePoint = parsedTrainData.take(1)[0]\n", "samplePrediction = firstModel.predict(samplePoint.features)\n", "print(samplePrediction)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Evaluate RMSE\n", "\n", "Next evaluate the accuracy of this model on the validation set. Use the `predict()` method to create a `labelsAndPreds` RDD, and then use the `calcRMSE()` function." ] }, { "cell_type": "code", "execution_count": 92, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Validation RMSE:\n", "\tBaseline = 20.877\n", "\tLR0 = 16.418\n", "\tLR1 = 19.025\n" ] } ], "source": [ "labelsAndPreds = parsedValData.map(lambda p: (p.label, firstModel.predict(p.features)))\n", "rmseValLR1 = calcRMSE(labelsAndPreds)\n", "\n", "print(('Validation RMSE:\\n\\tBaseline = {0:.3f}\\n\\tLR0 = {1:.3f}' +\n", " '\\n\\tLR1 = {2:.3f}').format(rmseValBase, rmseValLR0, rmseValLR1))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Grid search\n", "\n", "We're already outperforming the baseline on the validation set by almost 2 years on average, but let's see if we can do better. Perform grid search to find a good regularization parameter. Try `regParam` values `1e-10`, `1e-5`, and `1`." ] }, { "cell_type": "code", "execution_count": 47, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "16.6813542516\n", "16.6816816062\n", "23.40950259\n", "Validation RMSE:\n", "\tBaseline = 20.877\n", "\tLR0 = 18.253\n", "\tLR1 = 19.025\n", "\tLRGrid = 16.681\n" ] } ], "source": [ "bestRMSE = rmseValLR1\n", "bestRegParam = reg\n", "bestModel = firstModel\n", "\n", "numIters = 500\n", "alpha = 1.0\n", "miniBatchFrac = 1.0\n", "for reg in (1e-10, 1e-5, 1):\n", " model = LinearRegressionWithSGD.train(parsedTrainData, numIters, alpha,\n", " miniBatchFrac, regParam=reg,\n", " regType='l2', intercept=True)\n", " labelsAndPreds = parsedValData.map(lambda lp: (lp.label, model.predict(lp.features)))\n", " rmseValGrid = calcRMSE(labelsAndPreds)\n", " print(rmseValGrid)\n", "\n", " if rmseValGrid < bestRMSE:\n", " bestRMSE = rmseValGrid\n", " bestRegParam = reg\n", " bestModel = model\n", "rmseValLRGrid = bestRMSE\n", "\n", "print(('Validation RMSE:\\n\\tBaseline = {0:.3f}\\n\\tLR0 = {1:.3f}\\n\\tLR1 = {2:.3f}\\n' +\n", " '\\tLRGrid = {3:.3f}').format(rmseValBase, rmseValLR0, rmseValLR1, rmseValLRGrid))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Visualization of best model's predictions\n", "\n", "Next, we create a visualization similar to what we have already done, using the predictions from the best model on the validation dataset. Specifically, we create a color-coded scatter plot visualizing tuples storing i) the predicted value from this model and ii) true label." ] }, { "cell_type": "code", "execution_count": 48, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "predictions = np.asarray(parsedValData\n", " .map(lambda lp: bestModel.predict(lp.features))\n", " .collect())\n", "actual = np.asarray(parsedValData\n", " .map(lambda lp: lp.label)\n", " .collect())\n", "error = np.asarray(parsedValData\n", " .map(lambda lp: (lp.label, bestModel.predict(lp.features)))\n", " .map(lambda lp: squaredError(*lp))\n", " .collect())\n", "\n", "norm = Normalize()\n", "clrs = cmap(np.asarray(norm(error)))[:,0:3]\n", "\n", "fig, ax = preparePlot(np.arange(0, 120, 20), np.arange(0, 120, 20))\n", "ax.set_xlim(15, 82), ax.set_ylim(-5, 105)\n", "plt.scatter(predictions, actual, s=14**2, c=clrs, edgecolors='#888888', alpha=0.75, linewidths=.5)\n", "ax.set_xlabel('Predicted'), ax.set_ylabel(r'Actual')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Vary alpha and the number of iterations\n", "\n", "In the previous grid search, we set `alpha = 1` for all experiments. Now let's see what happens when we vary `alpha`. Specifically, try `1e-5` and `10` as values for `alpha` and also try training models for 500 iterations (as before) but also for 5 iterations. Evaluate all models on the validation set. Note that if we set `alpha` too small the gradient descent will require a huge number of steps to converge to the solution, and if we use too large of an `alpha` it can cause numerical problems, like you'll see below for `alpha = 10`." ] }, { "cell_type": "code", "execution_count": 49, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "alpha = 1e-05, numIters = 5, RMSE = 57.488\n", "alpha = 1e-05, numIters = 500, RMSE = 57.488\n", "alpha = 1e+01, numIters = 5, RMSE = 352324534.657\n", "alpha = 1e+01, numIters = 500, RMSE = 9998568542740355072223778751368350117464460902480099789685641437530696027686823661355294570310998736575249361239487283200.000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/usr/local/spark/python/pyspark/statcounter.py:83: RuntimeWarning: overflow encountered in double_scalars\n", " self.m2 += other.m2 + (delta * delta * self.n * other.n) / (self.n + other.n)\n" ] } ], "source": [ "reg = bestRegParam\n", "modelRMSEs = []\n", "\n", "for alpha in (1e-5, 10):\n", " for numIters in (5, 500):\n", " model = LinearRegressionWithSGD.train(parsedTrainData, numIters, alpha,\n", " miniBatchFrac, regParam=reg,\n", " regType='l2', intercept=True)\n", " labelsAndPreds = parsedValData.map(lambda lp: (lp.label, model.predict(lp.features)))\n", " rmseVal = calcRMSE(labelsAndPreds)\n", " print('alpha = {0:.0e}, numIters = {1}, RMSE = {2:.3f}'.format(alpha,\n", " numIters,\n", " rmseVal))\n", " modelRMSEs.append(rmseVal)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Hyperparameter heat map\n", "\n", "Next, we perform a visualization of hyperparameter search using a larger set of hyperparameters (with precomputed results). Specifically, we create a heat map where the brighter colors correspond to lower RMSE values. The first plot has a large area with brighter colors. In order to differentiate within the bright region, we generate a second plot corresponding to the hyperparameters found within that region." ] }, { "cell_type": "code", "execution_count": 50, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from matplotlib.colors import LinearSegmentedColormap\n", "\n", "# Saved parameters and results, to save the time required to run 36 models\n", "numItersParams = [10, 50, 100, 250, 500, 1000]\n", "regParams = [1e-8, 1e-6, 1e-4, 1e-2, 1e-1, 1]\n", "rmseVal = np.array([[ 20.36769649, 20.36770128, 20.36818057, 20.41795354, 21.09778437, 301.54258421],\n", " [ 19.04948826, 19.0495 , 19.05067418, 19.16517726, 19.97967727, 23.80077467],\n", " [ 18.40149024, 18.40150998, 18.40348326, 18.59457491, 19.82155716, 23.80077467],\n", " [ 17.5609346 , 17.56096749, 17.56425511, 17.88442127, 19.71577117, 23.80077467],\n", " [ 17.0171705 , 17.01721288, 17.02145207, 17.44510574, 19.69124734, 23.80077467],\n", " [ 16.58074813, 16.58079874, 16.58586512, 17.11466904, 19.6860931 , 23.80077467]])\n", "\n", "numRows, numCols = len(numItersParams), len(regParams)\n", "rmseVal = np.array(rmseVal)\n", "rmseVal.shape = (numRows, numCols)\n", "\n", "fig, ax = preparePlot(np.arange(0, numCols, 1), np.arange(0, numRows, 1), figsize=(8, 7), hideLabels=True,\n", " gridWidth=0.)\n", "ax.set_xticklabels(regParams), ax.set_yticklabels(numItersParams)\n", "ax.set_xlabel('Regularization Parameter'), ax.set_ylabel('Number of Iterations')\n", "\n", "colors = LinearSegmentedColormap.from_list('blue', ['#0022ff', '#000055'], gamma=.2)\n", "image = plt.imshow(rmseVal,interpolation='nearest', aspect='auto',\n", " cmap = colors)\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 51, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Zoom into the bottom left\n", "numItersParamsZoom, regParamsZoom = numItersParams[-3:], regParams[:4]\n", "rmseValZoom = rmseVal[-3:, :4]\n", "\n", "numRows, numCols = len(numItersParamsZoom), len(regParamsZoom)\n", "\n", "fig, ax = preparePlot(np.arange(0, numCols, 1), np.arange(0, numRows, 1), figsize=(8, 7), hideLabels=True,\n", " gridWidth=0.)\n", "ax.set_xticklabels(regParamsZoom), ax.set_yticklabels(numItersParamsZoom)\n", "ax.set_xlabel('Regularization Parameter'), ax.set_ylabel('Number of Iterations')\n", "\n", "colors = LinearSegmentedColormap.from_list('blue', ['#0022ff', '#000055'], gamma=.2)\n", "image = plt.imshow(rmseValZoom,interpolation='nearest', aspect='auto',\n", " cmap = colors)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 5. Add interactions between features" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Add 2-way interactions\n", "\n", "So far, we've used the features as they were provided. Now, we will add features that capture the two-way interactions between our existing features. Write a function `twoWayInteractions` that takes in a `LabeledPoint` and generates a new `LabeledPoint` that contains the old features and the two-way interactions between them. Note that a dataset with three features would have nine ( $ \\scriptsize 3^2 $ ) two-way interactions.\n", "\n", "We will use [itertools.product](https://docs.python.org/2/library/itertools.html#itertools.product) to generate tuples for each of the possible 2-way interactions. Remember that you can combine two `DenseVector` or `ndarray` objects using [np.hstack](http://docs.scipy.org/doc/numpy/reference/generated/numpy.hstack.html#numpy.hstack)." ] }, { "cell_type": "code", "execution_count": 52, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(0.0,[2.0,3.0,4.0,6.0,6.0,9.0])\n" ] } ], "source": [ "import itertools\n", "\n", "def twoWayInteractions(lp):\n", " \"\"\"Creates a new `LabeledPoint` that includes two-way interactions.\n", "\n", " Note:\n", " For features [x, y] the two-way interactions would be [x^2, x*y, y*x, y^2] and these\n", " would be appended to the original [x, y] feature list.\n", "\n", " Args:\n", " lp (LabeledPoint): The label and features for this observation.\n", "\n", " Returns:\n", " LabeledPoint: The new `LabeledPoint` should have the same label as `lp`. Its features\n", " should include the features from `lp` followed by the two-way interaction features.\n", " \"\"\"\n", " features = lp.features\n", " return LabeledPoint(lp.label,\n", " np.hstack((lp.features,\n", " [a*b for a, b in itertools.product(features,\n", " features)])))\n", "\n", "print(twoWayInteractions(LabeledPoint(0.0, [2, 3])))\n", "\n", "# Transform the existing train, validation, and test sets to include two-way interactions.\n", "trainDataInteract = parsedTrainData.map(lambda p: twoWayInteractions(p))\n", "valDataInteract = parsedValData.map(lambda p: twoWayInteractions(p))\n", "testDataInteract = parsedTestData.map(lambda p: twoWayInteractions(p))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Build interaction model\n", "\n", "Now, let's build the new model. We've done this several times now. To implement this for the new features, we need to change a few variable names. Remember that we should build our model from the training data and evaluate it on the validation data.\n", "\n", "Note that you should re-run your hyperparameter search after changing features, as using the best hyperparameters from your prior model will not necessary lead to the best model. For this exercise, we have already preset the hyperparameters to reasonable values." ] }, { "cell_type": "code", "execution_count": 53, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Validation RMSE:\n", "\tBaseline = 20.877\n", "\tLR0 = 18.253\n", "\tLR1 = 19.025\n", "\tLRGrid = 16.681\n", "\tLRInteract = 15.500\n" ] } ], "source": [ "numIters = 500\n", "alpha = 1.0\n", "miniBatchFrac = 1.0\n", "reg = 1e-10\n", "\n", "modelInteract = LinearRegressionWithSGD.train(trainDataInteract, numIters, alpha,\n", " miniBatchFrac, regParam=reg,\n", " regType='l2', intercept=True)\n", "labelsAndPredsInteract = valDataInteract.map(lambda lp: (lp.label, modelInteract.predict(lp.features)))\n", "rmseValInteract = calcRMSE(labelsAndPredsInteract)\n", "\n", "print(('Validation RMSE:\\n\\tBaseline = {0:.3f}\\n\\tLR0 = {1:.3f}\\n\\tLR1 = {2:.3f}\\n\\tLRGrid = ' +\n", " '{3:.3f}\\n\\tLRInteract = {4:.3f}').format(rmseValBase, rmseValLR0, rmseValLR1,\n", " rmseValLRGrid, rmseValInteract))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Evaluate interaction model on test data\n", "\n", "Our final step is to evaluate the new model on the test dataset. Note that we haven't used the test set to evaluate any of our models. Because of this, our evaluation provides us with an unbiased estimate for how our model will perform on new data. If we had changed our model based on viewing its performance on the test set, our estimate of RMSE would likely be overly optimistic.\n", "\n", "We'll also print the RMSE for both the baseline model and our new model. With this information, we can see how much better our model performs than the baseline model." ] }, { "cell_type": "code", "execution_count": 54, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Test RMSE:\n", "\tBaseline = 21.260\n", "\tLRInteract = 16.054\n" ] } ], "source": [ "labelsAndPredsTest = testDataInteract.map(lambda lp: (lp.label, modelInteract.predict(lp.features)))\n", "rmseTestInteract = calcRMSE(labelsAndPredsTest)\n", "\n", "print('Test RMSE:\\n\\tBaseline = {0:.3f}\\n\\tLRInteract = {1:.3f}'.format(rmseTestBase,\n", " rmseTestInteract))" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.3" } }, "nbformat": 4, "nbformat_minor": 1 }