Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
jupyter_notebook_test
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Regression Week 4: Ridge Regression (interpretation)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In this notebook, we will run ridge regression multiple times with different L2 penalties to see which one produces the best fit. We will revisit the example of polynomial regression as a means to see the effect of L2 regularization. In particular, we will:\n",
"* Use a pre-built implementation of regression (GraphLab Create) to run polynomial regression\n",
"* Use matplotlib to visualize polynomial regressions\n",
"* Use a pre-built implementation of regression (GraphLab Create) to run polynomial regression, this time with L2 penalty\n",
"* Use matplotlib to visualize polynomial regressions under L2 regularization\n",
"* Choose best L2 penalty using cross-validation.\n",
"* Assess the final fit using test data.\n",
"\n",
"We will continue to use the House data from previous notebooks. (In the next programming assignment for this module, you will implement your own ridge regression learning algorithm using gradient descent.)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Fire up graphlab create"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import graphlab\n",
"import numpy as np"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Polynomial regression, revisited"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We build on the material from Week 3, where we wrote the function to produce an SFrame with columns containing the powers of a given input. Copy and paste the function `polynomial_sframe` from Week 3:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's use matplotlib to visualize what a polynomial regression looks like on the house data."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO] graphlab.cython.cy_server: GraphLab Create v2.1 started. Logging: /tmp/graphlab_server_1509441024.log\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"This non-commercial license of GraphLab Create for academic use is assigned to johnkirkhoughton1@gmail.com and will expire on April 06, 2018.\n"
]
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"This non-commercial license of GraphLab Create for academic use is assigned to johnkirkhoughton1@gmail.com and will expire on April 06, 2018.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO] graphlab.cython.cy_server: GraphLab Create v2.1 started. Logging: /tmp/graphlab_server_1510595653.log\n"
]
}
],
"source": [
"sales = graphlab.SFrame('kc_house_data.gl/')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"As in Week 3, we will use the sqft_living variable. For plotting purposes (connecting the dots), you'll need to sort by the values of sqft_living. For houses with identical square footage, we break the tie by their prices."
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"sales = sales.sort(['sqft_living','price'])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let us revisit the 15th-order polynomial model using the 'sqft_living' input. Generate polynomial features up to degree 15 using `polynomial_sframe()` and fit a model with these features. When fitting the model, use an L2 penalty of `1e-5`:"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"l2_small_penalty = 1e-5"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Note: When we have so many features and so few data points, the solution can become highly numerically unstable, which can sometimes lead to strange unpredictable results. Thus, rather than using no regularization, we will introduce a tiny amount of regularization (`l2_penalty=1e-5`) to make the solution numerically stable. (In lecture, we discussed the fact that regularization can also help with numerical stability, and here we are seeing a practical example.)\n",
"\n",
"With the L2 penalty specified above, fit the model and print out the learned weights.\n",
"\n",
"Hint: make sure to add 'price' column to the new SFrame before calling `graphlab.linear_regression.create()`. Also, make sure GraphLab Create doesn't create its own validation set by using the option `validation_set=None` in this call."
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def polynomial_sframe(feature, degree):\n",
" # assume that degree >= 1\n",
" # initialize the SFrame:\n",
" poly_sframe = graphlab.SFrame()\n",
" # and set poly_sframe['power_1'] equal to the passed feature\n",
" poly_sframe['power_1'] = feature\n",
" # first check if degree > 1\n",
" if degree > 1:\n",
" # then loop over the remaining degrees:\n",
" # range usually starts at 0 and stops at the endpoint-1. We want it to start at 2 and stop at degree\n",
" for power in range(2, degree+1): \n",
" # first we'll give the column a name:\n",
" name = 'power_' + str(power)\n",
" # then assign poly_sframe[name] to the appropriate power of feature\n",
" poly_sframe[name] = feature**power\n",
" return poly_sframe"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def polynomial_regression(sframe, cols, target, deg, l2_penalty):\n",
" global poly_data\n",
" poly_data = polynomial_sframe(sframe[cols], deg)\n",
" my_features = poly_data.column_names()\n",
" poly_data[target] = sframe[target]\n",
" model = graphlab.linear_regression.create(poly_data, target=target, features = my_features,\n",
" l2_penalty=l2_penalty,\n",
" validation_set=None,verbose=False)\n",
" return model"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def print_coefficients(model): \n",
" # Get the degree of the polynomial\n",
" deg = len(model.coefficients['value'])-1\n",
"\n",
" # Get learned parameters as a list\n",
" w = list(model.coefficients['value'])\n",
"\n",
" # Numpy has a nifty function to print out polynomials in a pretty way\n",
" # (We'll use it, but it needs the parameters in the reverse order)\n",
" print 'Learned polynomial for degree ' + str(deg) + ':'\n",
" w.reverse()\n",
" print np.poly1d(w)"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def plot_poly_predictions(data, model): \n",
" plt.plot(poly_data['power_1'],poly_data['price'],'.',\n",
" poly_data['power_1'], model.predict(poly_data),'-')\n",
" plt.xlabel('x')\n",
" plt.ylabel('y')"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [
{
"ename": "NameError",
"evalue": "name 'l2_small_penalty' is not defined",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-12-ec6586222559>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mmodel\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpolynomial_regression\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msales\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'sqft_living'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'price'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m15\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0ml2_small_penalty\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;31mNameError\u001b[0m: name 'l2_small_penalty' is not defined"
]
}
],
"source": [
"model = polynomial_regression(sales, 'sqft_living', 'price', 15, l2_small_penalty)"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [
{
"ename": "NameError",
"evalue": "name 'model' is not defined",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-13-c0e4e5589e8c>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mprint_coefficients\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmodel\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;31mNameError\u001b[0m: name 'model' is not defined"
]
}
],
"source": [
"print_coefficients(model)"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAawAAAEPCAYAAAAeQPDsAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsnXl8VNX5/99PdoWwb4YQFpElREVUoAqaqgjaVu3Pr5Uu\nilb7VXFBa78qdgG741IoKihWrUsrbrWgIkuqKQgBVFBkC7iwhU1ki6JAkvP749zr3Exmss7MnZk8\n79frvubOueec+8wM3E+ec57zHDHGoCiKoijxTorfBiiKoihKfVDBUhRFURICFSxFURQlIVDBUhRF\nURICFSxFURQlIVDBUhRFURKCqAuWiNwmIqtFZJWI/ENEMkSkrYjMF5FSEZknIq099ceLyEYRWSci\n53vKBzl9bBCRKZ7yDBGZ6bQpEZE8z7UxTv1SEbnSU95DRJY6154TkbRofw+KoihK04iqYIlIDnAz\nMMgYcxKQBvwQuAsoMsb0Bd4Exjv184EfAP2BC4BpIiJOd9OBa4wxfYA+IjLSKb8G2GuMOQGYAtzr\n9NUW+A1wOjAEmOARxknAA05f+50+FEVRlDgmFkOCqUALx4s5BigDLgaecq4/BVzinF8EzDTGVBhj\nNgEbgcEi0gXINsa849R72tPG29dLwDnO+UhgvjHmgDFmPzAfGOVcOwd42XP/70fosyqKoihRIqqC\nZYzZDjwAbMEK1QFjTBHQ2Rizy6mzE+jkNOkKbPV0UeaUdQW2ecq3OWXV2hhjKoEDItIuXF8i0h7Y\nZ4yp8vSV0/RPqyiKokSTaA8JtsF6QN2xotBCRH4MBOeDimR+KKm7Sr3qKIqiKHFEtIMNzgM+Mcbs\nBRCRV4AzgF0i0tkYs8sZ7tvt1C8Dunna5zpl4cq9bbaLSCrQyhizV0TKgMKgNm8ZYz4XkdYikuJ4\nWd6+qiEimmhRURSlERhjIu4YRHsOawswVESynOCJc4G1wGzgKqfOGGCWcz4bGO1E/vUEegPLnWHD\nAyIy2OnnyqA2Y5zzy7BBHADzgBGOOLUFRjhlAG85dYPvXwNjTMIeEyZM8N2G5mi72u//ofb7e0SL\nqHpYxpjlIvISsBI46rzOALKBF0Tkp8BmbGQgxpi1IvICVtSOAmNN4NPfCPwdyALmGGPmOuWPA8+I\nyEbgc2C009c+Efkd8C52yPEeY4MvwEYpznSur3T6UBRFUeKYqK8/MsbcA9wTVLwXO1wYqv6fgD+F\nKH8PODFE+WEcwQtx7e9YkQsu/xQb6q4oiqIkCJrpIokpLCz024RGk8i2g9rvN2p/ciLRHG9MdETE\n6PejKIrSMEQEk4BBF4qiKEoDKS+HkhL7qgRQwVIURYkjVmzZQO7/XcywWx9l+HAVLS8qWIqiKHFA\n+eFy7iq6i3OePYPyvVlU9XmFtWthzRq/LYsfVLAURVF8xBjDs6uepd/D/djxxQ7eufpD8jc9BLkl\n9M+vZMAAvy2MH3RbDUVRFJ9YsWMFN79xM4crDvPSZS/xrW7fAqDkP3Diozk8/PIqsrNP8dnK+EE9\nLEVRlBiz59Aernv1Oi78x4VcPfBqll277BuxAsjOhhF9hrFyz9s+Whl/qGApiqLEiIqqCh5a/hD5\nD+eTlZbFuhvXce2ga0lNSa1Rd1jeMN7eqoLlRYcEFUVRYkDxpmJueeMWOhzbgTfHvElBp4Ja6w/L\nG8bdb96NMYbAPrbNGxUsRVGUKLL1wFZ+seAXLN22lAfOf4BL+19aLwHq1bYXxhg27d9Ez7Y9Y2Bp\n/KNDgoqiKFHg64qv+f3C3zPw0YH0a9+PdTeu43/y/6fe3pKI2GHBLTos6KKCpSiKEkGMMcxaP4v8\nh/NZuXMl7/7sXe759j0cm35sg/saljeMRVsWRcHKxESHBBVFUSLE+j3rGTd3HFsPbOXR7z7KiONH\nNKm/YXnDeOTdRyJkXeKjHpaiKEoTOXj4IL+Y/wuGPzmcC3pfwAfXf9BksQI4qfNJbDu4jT2H9kTA\nysRHBUtRFKWRVJkq/v7+3+n3UD/2fbWP1Tes5taht5Kemh6R/tNS0hiaO5QlW5dEpL9ER4cEFUVR\nGsE7Ze9w8xs3YzD8e/S/Gdx1cFTuMzxvOG9veZuL+l4Ulf4TCfWwFEVRGsCuL3ZxzaxruGjmRVx/\n2vWUXFMSNbECNFLQgwqWoihKPThaeZQpS6dQML2ANlltWH/jeq4aeBUpEt3H6OCug/lg1wd8dfSr\nqN4nEYjqNy0ifURkpYiscF4PiMgtItJWROaLSKmIzBOR1p4240Vko4isE5HzPeWDRGSViGwQkSme\n8gwRmem0KRGRPM+1MU79UhG50lPeQ0SWOteeExEdGlUUJSz/+eQ/DHx0IHM2zmHhVQt5YOQDtM5q\nXXfDCNAiowUFnQpYXrY8JveLZ6IqWMaYDcaYU4wxg4BTgS+BV4C7gCJjTF/gTWA8gIjkAz8A+gMX\nANMksMpuOnCNMaYP0EdERjrl1wB7jTEnAFOAe52+2gK/AU4HhgATPMI4CXjA6Wu/04eiKElCpHbs\n3bR/E5e+cCnXvnotfzjnD8z7yTz6d+wfGSMbwLBuOiwIsR0SPA/42BizFbgYeMopfwq4xDm/CJhp\njKkwxmwCNgKDRaQLkG2Mecep97Snjbevl4BznPORwHxjzAFjzH5gPjDKuXYO8LLn/t+P2KdUFMVX\nysth+HA46ywavWPvoaOHmFg8kVNnnMrAzgNZO3Ytl/S7xLecfpoI1xJLwboc+Kdz3tkYswvAGLMT\n6OSUdwW2etqUOWVdgW2e8m1OWbU2xphK4ICItAvXl4i0B/YZY6o8feU0+dMpihIXrF5td+mtqKDB\nO/YaY3h57cvkP5zPuj3rWHndSn599q85Jv2Y6BlcD4blDaNkawmVVZW+2uE3MZm7EZF0rPd0p1Nk\ngqoEv2/S7SJUR1GUBKSgAAYMsGKVn0+9d+xds3sNt8y9hd1f7ubJi5/k2z2/HV1DG0DHFh3p0rIL\nq3ev5uQuJ/ttjm/EKtjgAuA9Y4y7XHuXiHQ2xuxyhvt2O+VlQDdPu1ynLFy5t812EUkFWhlj9opI\nGVAY1OYtY8znItJaRFIcL8vbVw0mTpz4zXlhYSGFhYXhqiqKEgdkZ8OiRdazGjDAvq+N/V/vZ8Jb\nE/jn6n8y4ewJXH/a9aSlxF8clptXMB4Fq7i4mOLi4ujfyBgT9QN4DhjjeT8JuNM5vxP4s3OeD6wE\nMoCewEeAONeWAoOx3tEcYJRTPhaY5pyPxs6BAbQFPgZae87bONeeBy53zqcD14ex2yiKEv8cPGjM\nkiX2tb5UVFaYx957zHS+r7P539n/a3Z/sTt6BkaAJ1c+aS5/8XK/zagXzrMz4lriikHUEJFjgc1A\nL2NMuVPWDngB6xltBn5gbGAEIjIeG7V3FBhnjJnvlJ8K/B3IAuYYY8Y55ZnAM8ApwOfAaGMDNhCR\nq4BfYoccf2+Medop7wnMxArZSuAnxpijIWw30f5+FEVpGm6QhetRLVpUt1e1dNtSbppzE5lpmTx4\nwYMMOm5QbIxtAh/t/Yiz/342227bFvcbOooIxpiIGxl1wUpkVLAUJf4pKbERgRUVkJ4OCxfC0KGh\n6+78Yid3Fd3Fgk8WMOm8Sfz4xB/H/cPfxRjDcQ8cx9Jrl9KjTQ+/zamVaAmWZrpQFCWhcYMs0tPD\nB1kcqTzC/Uvup2BaAV1admH9jev5yUk/SRixAisCw7sPb9brseJvZlFRFKUB1BVkMe+jeYybO45e\nbXux5Jol9Gnfxx9DI4C7gPgnJ/3Eb1N8QQVLUZSEJzu75jDgJ/s+4bZ5t7Fm9xqmjJrCd074TkJ5\nVKEYljeMGStm+G2Gb+iQoKIoScdT7z/F6Y+dztCuQ1kzdg3f7fPdhBcrgJO7nMzWA1v5/NDnfpvi\nC+phKYqSVByuOMxd/7mLoiuKOOW4U/w2J6KkpaQxJHcIS7Yu4Xt9v+e3OTFHPSxFUZKK59c8T0Gn\ngqQTK5fmnAhXBUtRlKTBGMPkpZO5behtfpsSNYZ3H95sE+GqYCmKkjQs3LyQr45+xajeo+qunKAM\n6TqE93e+3yw3dFTBUhQlaZi8dDLjhoyL+i7AftIiowUDOg7g3e3v+m1KzEneX1VRlGbFx3s/5u0t\nb3PlyVfWXTnBcRPhNjdUsBRFSQqmLpvKtYOupUVGC79NiTrD8ppn4IUKlqIoCc+Brw/wzKpnuGnw\nTX6bEhPO7HYmS7YuaXYbOqpgKYqS8Dy+8nFG9R5Fbqtcv02JCZ1bdqZzy86s+awB2yknASpYiqIk\nNBVVFUxdNpVbh97qtykxpTmux1LBUhQlofn3+n/TtVVXBncd7LcpMaU5zmOpYCmKktBMWTolqRcK\nh8ONFGxOe/apYCmKkrC8U/YO2w5u45J+l/htSszp3a43RyqPsOXAFr9NiRkqWIqiJCxTlk3h5sE3\nk5bS/PJ4i0izGxZUwVIUJSEpO1jGGxvf4NpB1/ptim8Mz2teOxBHXbBEpLWIvCgi60RkjYgMEZG2\nIjJfREpFZJ6ItPbUHy8iG53653vKB4nIKhHZICJTPOUZIjLTaVMiInmea2Oc+qUicqWnvIeILHWu\nPScize/PM0VJcB5a/hA/OekntM5qXXflJGVY3rBmlQg3Fh7WX4E5xpj+wMnAeuAuoMgY0xd4ExgP\nICL5wA+A/sAFwDQJ7Lo2HbjGGNMH6CMiI53ya4C9xpgTgCnAvU5fbYHfAKcDQ4AJHmGcBDzg9LXf\n6UNRlATh0NFD/G3l3xg3ZJzfpvjKwC4D2bR/E/u+2ue3KTEhqoIlIq2A4caYJwGMMRXGmAPAxcBT\nTrWnAHfG9CJgplNvE7ARGCwiXYBsY8w7Tr2nPW28fb0EnOOcjwTmG2MOGGP2A/MBN4XzOcDLnvt/\nP0IfWVGUGPD0B09zZrczOb7d8X6b4itpKWkM6TqExVsX+21KTIi2h9UT2CMiT4rIChGZISLHAp2N\nMbsAjDE7gU5O/a7AVk/7MqesK7DNU77NKavWxhhTCRwQkXbh+hKR9sA+Y0yVp6+ciHxaRVGiTpWp\nYsrSKc1uoXA4mlPgRbTnbtKAQcCNxph3RWQydjgweOFAJBcSSN1V6lUHgIkTJ35zXlhYSGFhYcMt\nUhQlYsz7aB7HpB/D2d3P9tuUuGBY3jAmFk/01Ybi4mKKi4ujfp9oC9Y2YKsxxt245WWsYO0Skc7G\nmF3OcN9u53oZ0M3TPtcpC1fubbNdRFKBVsaYvSJSBhQGtXnLGPO5EwiS4nhZ3r5q4BUsRVH8x91R\nODC93bwZmjuUlTtX8nXF12SlZfliQ/Af8/fcc09U7hPVIUFn2G+riPRxis4F1gCzgaucsjHALOd8\nNjDaifzrCfQGljvDhgdEZLAThHFlUJsxzvll2CAOgHnACEec2gIjnDKAt5y6wfdXFCWOWb17NR/u\n/pDLB1zutylxQ8uMluR3zG8WGzrGIpz7FuAfIpIOfAJcDaQCL4jIT4HN2MhAjDFrReQFYC1wFBhr\nAnlHbgT+DmRhow7nOuWPA8+IyEbgc2C009c+Efkd8C52yPEeJ/gCrJc307m+0ulDUZQ4569L/8rY\n08aSmZbptylxhZsId1jeML9NiSrSnPJQNRQRMfr9KEp88NmXn9HnoT5suGkDHVt09NucuOLltS/z\n5PtP8tqPXvPbFMBm4TDGRHzMVjNdKIqSEDz63qNc2v9SFasQnJl3Jou3Lqbqm+Dn5EQFS1GUuOdw\nxWGmvTNNQ9nD0KVlFzoc24E1u5N7Q0cVLEVR4p7n1zxPQacCCjoV+G1K3NIc1mOpYCmKEtcYY3Sh\ncD0Ynjc86fMKqmApihLXLNy8kENHDzGq96i6Kzdj1MNSFEWJAeXlUFJiX4OZvHQy44aMI0X0cVUb\nJ7Q7ga+OfpXUGzrqvwBFUXylvByGD4ezzrKvXtH6eO/HLN66mCtPvjJ8BwrQPDZ0VMFSFMVXVq+G\nNWugogLWrrXnLlOXTeXaU66lRUYL/wxMIFSwFEVRokhBAQwYAOnpkJ9vzwEOfH2AZ1Y9w42Db/TX\nwAQi2QVLd9pVFMVXsrNh0SLrWQ0YYN8DPL7ycUb1HkVuq1x/DUwgTulyCp/u/5R9X+2j7TFt/TYn\n4qiHpSiK72Rnw9ChAbGqqKpg6rKpGsreQNJT0xncdTAl20r8NiUqqGApihJ3zFo/i66tujK462C/\nTUk43ES4yYgKlqIo1agtxDxWuHteKQ1nWN4wFm1Z5LcZUUEFS1GSlMYIT20h5rHinbJ32HZwG5f0\nuyT2N08ChuYOZcWOFXxd8bXfpkQcFSxFSUIaKzy1hZjHiinLpnDz4JtJS9GYsMaQnZlNvw79eG/7\ne36bEnFUsBQlCWms8IQLMY8VZQfLeGPjG1w76NrY3jjJGJ43PCnnsVSwFCUJaazwuCHmCxfaVzdq\nL1Y8/M7DXHHSFbTOah3bGycZw/KGJWUiXN1xuBZ0x2ElkSkvr7m2KZ45dPQQ3ad0Z+k1Szm+3fF+\nm5PQ7CjfwYBpA9hzxx5fcjDqjsOKojSI4LVN9cWvKMGnP3iaM7udqWIVAY7LPo52x7Rj7Wdr/TYl\nokRdsERkk4h8ICIrRWS5U9ZWROaLSKmIzBOR1p7640Vko4isE5HzPeWDRGSViGwQkSme8gwRmem0\nKRGRPM+1MU79UhG50lPeQ0SWOteeExGd3VUU/IsSrDJV/HXZXzWUPYIkY5qmWHhYVUChMeYUY4y7\nCvAuoMgY0xd4ExgPICL5wA+A/sAFwDQRcd3K6cA1xpg+QB8RGemUXwPsNcacAEwB7nX6agv8Bjgd\nGAJM8AjjJOABp6/9Th+K0uzxK0pw3kfzyErL4qzuZ8Xmhs0AFazGISHuczHwlHP+FOAuuLgImGmM\nqTDGbAI2AoNFpAuQbYx5x6n3tKeNt6+XgHOc85HAfGPMAWPMfmA+4O4Adw7wsuf+32/SJ1SUJMGv\nKMH7S+7ntqG3Efj7VGkqyRgpGAvBMsACEXlHRNxY1c7GmF0AxpidQCenvCuw1dO2zCnrCmzzlG9z\nyqq1McZUAgdEpF24vkSkPbDPGFPl6SunyZ9SUZIAP6IEl25bysd7P+aHBT+M/s2aEX3a9+HLo1+y\n9cDWuisnCLGYuznTGLNDRDoC80WkFCtiXiIZilefP9Hq/WfcxIkTvzkvLCyksLCw4RYpSgLhBmvE\nij8s+gN3nnkn6anpsbtpM8Dd0HHx1sWMbj06qvcqLi6muLg4qveAGAiWMWaH8/qZiPwbGAzsEpHO\nxphdznDfbqd6GdDN0zzXKQtX7m2zXURSgVbGmL0iUgYUBrV5yxjzuYi0FpEUx8vy9lUDr2ApihJZ\n3t/5Pit2rODFy17025SkxE2EO7oguoIV/Mf8PffcE5X7RHVIUESOFZGWznkL4HzgQ2A2cJVTbQww\nyzmfDYx2Iv96Ar2B5c6w4QERGewEYVwZ1GaMc34ZNogDYB4wwhGntsAIpwzgLadu8P0VRYkhf1z0\nR27/1u1kpWX5bUpSkmyJcKPtYXUGXhER49zrH8aY+SLyLvCCiPwU2IyNDMQYs1ZEXgDWAkeBsZ6V\nuzcCfweygDnGmLlO+ePAMyKyEfgcGO30tU9Efge8ix1yvMcJvgAbpTjTub7S6UNRlBiy7rN1/Hfz\nf3ny4if9NiVpOeW4U/hk3yfs/3o/bbLa+G1Ok9FMF7WgmS4UJXpc+cqV9G3fl1+e9Uu/TUlqznnq\nHP7vjP/jghMuiNk9NdOFoihJwyf7PmHOxjncNPgmv01JepJpPZYKlqIoMWfS25O4/rTrNcltDEim\nRLiakkhRlJiy7eA2Xlz7Ihtu3uC3Kc2CoblDeW/7exyuOExmWqbf5jQJ9bAURYkp9y+5n6sHXk2H\nYzs0uK1fiXkTmVaZrejTvg/v7Uj8DR1VsBRFiRm7v9zN0x88ze1n3N7gtn4l5k0GkmUeSwVLUZSY\nMblkMqMLRpOT3fBsaH4l5k0GkiWvoAqWoigxYd9X+5ixYgZ3nHlHo9r7lZg3GTgz70wWb11M1Tcp\nVBMTFSxFiTOSdZ7mweUPclHfi+jRpkej2vuRmDdZyMnOoU1WG9bvWe+3KU1CBUtRfCRYnJJ1nqb8\ncDkPLn+Q8cPGN6mfxu6irCTHPJYKlqL4RChxStZ5mkfefYRze55Ln/Z9/Dal2TKsW+LnFVTBUhSf\nCCVOyThP89XRr/jL0r9w9/C7/TalWaMelqIojSaUOCXjPM3jKx9ncNfBnNT5JL9Nadb069CP8sPl\nbDu4re7KcYoKlqL4RDhxSqZ5miOVR7h38b38crgmuPWbbzZ03LLYb1MajQqWovhIMolTKJ754Bn6\ndejH4K6D/TZFIfGHBVWwFEWJChVVFfzp7T/xq7N+5bcpikOiJ8JVwVKUJMbPNV0vrHmB47KP46zu\nZ8X+5kpIBh03iI2fb+TA1wf8NqVRqGApSpLi55quKlPFHxb9gV8NV+8qnshIzeC0nNMo2VbitymN\nQgVLUZIUP9d0/Xv9vzkm7RjOP/782N1UqReJnFdQBUtRkhS/1nQZY6x3ddavEIn4LulKE0nkwIuY\nCJaIpIjIChGZ7bxvKyLzRaRUROaJSGtP3fEislFE1onI+Z7yQSKySkQ2iMgUT3mGiMx02pSISJ7n\n2hinfqmIXOkp7yEiS51rz4mIbmSpJB1+rel6bcNrHK44zEV9L4rNDZUG8a1u3+Ld7e9ypPKI36Y0\nmFh5WOOAtZ73dwFFxpi+wJvAeAARyQd+APQHLgCmSeBPtOnANcaYPkAfERnplF8D7DXGnABMAe51\n+moL/AY4HRgCTPAI4yTgAaev/U4fipJ0xDps/tDRQ4ybO44Hzn+AFNEBnHikVWYrTmh/Ait2rPDb\nlAYT9X9RIpILXAj8zVN8MfCUc/4UcIlzfhEw0xhTYYzZBGwEBotIFyDbGPOOU+9pTxtvXy8B5zjn\nI4H5xpgDxpj9wHxglHPtHOBlz/2/39TPqSixJh6zuv9h4R8Y3HUwI3uPrLuy4hvDuiXmsGCdgiUi\nNzveSmOZDPwfYDxlnY0xuwCMMTuBTk55V2Crp16ZU9YV8OYT2eaUVWtjjKkEDohIu3B9iUh7YJ8x\n32wMsw1o+G5yiuIj8ZjVfe1na5mxYgaTR0722xSlDoblJWYi3PrM3XQG3hGRFcATwDxjjKmjDQAi\n8h1glzHmfREprKVqvfqrJ/WZ5a33TPDEiRO/OS8sLKSwsLDhFilKhAkVATh0qH/2GGO44fUbmHj2\nRI7LPs4/Q5R6MSxvGDfOuZEqUxWRodvi4mKKi4ubblgd1ClYxphficivgfOBq4GHROQF4HFjzMd1\nND8TuEhELgSOAbJF5Blgp4h0Nsbscob7djv1y4Bunva5Tlm4cm+b7SKSCrQyxuwVkTKgMKjNW8aY\nz0WktYikOF6Wt68aeAVLUeIFNwJw7dr4yOr+1AdPcejoIa4/7Xp/DVHqRddWXWmV2YrSPaX079i/\nyf0F/zF/zz33NLnPUNRLWh2PaqdzVABtgZdE5N462t1tjMkzxvQCRgNvGmOuAF4FrnKqjQFmOeez\ngdFO5F9PoDew3Bk2PCAig50gjCuD2oxxzi/DBnEAzANGOOLUFhjhlAG85dQNvr+iNAi/5pHiKav7\n54c+586iO3nkO4+QmpLqnyFKg0jE8Pb6zGGNE5H3sNF3i4ETjTE3AKcClzbyvn/GikkpcK7zHmPM\nWuAFbEThHGCsZ/jxRuBxYAOw0Rgz1yl/HOggIhuBW7ERiBhj9gG/A94FlgH3OMEXOHV+LiIbgHZO\nH4rSIPyeR4qXxLl3Ft3J6AGjOTXnVH8NURpEIuYVlLqmo0TkHuAJY8zmENf6G2PWRcs4vxGR+k7X\nKUmOuxtwQUFAIEpKrFhVVNjFuQsXxm4eKZQ9frBo8yJ++PIPWXvjWlpltvLPEKXBrP1sLd977nt8\nfEtdMzsNR0QwxkR81XidHpYxZkIosXKuJa1YKYpLOE/Kr0wSfnt2Lkcqj3DD6zcwZdQUFasEpF+H\nfuz/ej/by7f7bUq90ZV9ilIH3oi81ath+XJb7tc8kp85Ar1MLplMXus8Lu3f2JkBxU9SJCXh5rFU\nsBSlDgoKoF8/e15ZCbfeGvBq/JhH8suz87Jp/ybuW3IfD134kOYLTGASbQGxCpaS9ISK5GtIdF95\nOZx3HqQ6AXClpf55NeB/hKAxhpvm3MTt37qdXm17xfbmSkRJNA9Lk74qSY0737NmjfVEFjmL+884\nA9avt57TkiXhH/rbt8Pxx8PXX4OIv16NF9ez84NX1r/CJ/s+4V+X/8sfA5SIMei4QWz4fAMHDx9M\niHlI9bCUpCbU/NOyZfY8eE4qFK+9ZsUKwBi4/Xb/1z35SfnhcsbNHccj332EjNQMv81RmkhmWian\n5pzK0m1L/TalXqhgKUlNqPmnQ4fq3/6734WsLHuelQU339x8xQpgQvEEzut1nm57n0QM6zaMRZsT\nI6+gCpaS1GRnw+TJkOYMfpeWQosWVshSU+3r4MHh2+fkwMcfw2OP2decZpwmeeWOlfzjw39w34j7\n/DZFiSCJtIC4zoXDzRldOJwcuPNYbt49dx7Lnddqzh5TfamsquSMJ87gulOv46en/NRvc5QIcuDr\nA3T9S1f23rk3YsO8vi0cVpREJ1RUXX3D0eNxzyk/mPHeDDJSM7hq4FV+m6JEmNZZrendrjcrd6z0\n25Q6UcFSEoqGhqO7desjUMF9x0tGCb/Z+cVOflP8G6Z/Z7ruIpykJEp4u/7rUxKGhghIQ8UmuP72\n7fDcc/GRUcJvbp9/O9eccg0FnQr8NkWJEokyj6WCpSQMDUlJ1ND0Rd76a9bA2WfD2LE2WCNe1l75\nQdEnRSzZuoTfnP0bv01RoojrYcX7nL0KlpIwdO8OPXrUT0Aamr7IW79HD9i0yYbBV1TAtGlNX3vV\nlLmwaMyj1dVneTkUv/011786locueIhj04+N3M2VuCO3VS4t0ltQ+nmp36bUigqWkhCUl8OFF8Kn\nn1rhmjOndgFpaPoib/3//jcgXgMGwOWXN12sGjsXFo15tLr6dK+fM+HP7FlzImcd952m31SJe4Z3\nHx7381iLWS8mAAAgAElEQVQqWEpC4A7ZVVbC5s2wZUvdbbzpi+rjobj1c3Iim6uvKdnVo5GZva4+\nV6+G1Ts2YE57iC9f/muznbtrbiRCIlwVLCUh8A7Z9e0LX3wR2jMIleS2MR5KJLOwu9k2UlOt7Q2Z\nCws1tOn9nI0ZLqxruDR/QBXHXHY9KYt/yYBuuc1y7q45kgiRgipYSkLgDtm98YZ9f8EF1QUonDDF\ny95RYJPnNpTgoU0IfM4zzrBHY8S4Ng9y8orfcvLASv57783NOm9ic6N/x/7s/WovO8p3+G1KWFSw\nlLiiNo8hOxuOPdZmWfcKUHl5+BD0uryJWCwMXr06YHNjtibxenteAV63ruZ30Zg+vby+4XX+tuJv\nvDT6eYadkaZi1YxIkRTOzDuTxVsX+21KWKIqWCKSKSLLRGSliHwoIhOc8rYiMl9ESkVknoi09rQZ\nLyIbRWSdiJzvKR8kIqtEZIOITPGUZ4jITKdNiYjkea6NceqXisiVnvIeIrLUufaciOg2K3FAebn1\nGIYPt69e78kVlWABysuz9ceOtUNuaWnVh91q8yZitTA4khsudu8eyIuYlgZ9+kQu7P7jvR9z9ayr\neeGyF+jSskvTOlMSkrhPhGuMieoBHOu8pgJLgcHAJOAOp/xO4M/OeT6wErtPVw/gIwL5DpcBpzvn\nc4CRzvkNwDTn/HJgpnPeFvgYaA20cc+da88Dlznn04HrwthulNixYIExdhMPexQVGXPwoDEnn2xM\nWpp9PXjQHiUl9nXJEnvNbZOaakxBgb1WF9626em2z2jhtbkpLFliPyNY24uKItPvl0e+NCdPP9k8\nuOzBpnWkJDSLtyw2gx4d1OR+nGdnxPUk6kOCxhh3M4dMrBAZ4GLgKaf8KeAS5/wirOBUGGM2ARuB\nwSLSBcg2xrzj1Hva08bb10vAOc75SGC+MeaAMWY/MB8Y5Vw7B3jZc//vR+CjKlEg1ByUN/rvyy8D\nAQ1gowjXrau5x1WooT83GCLYKwtXvyk0JIijtnsXFNjDDbkfPLjpwSFVpoorXrmCk7uczI2n39j4\njpSE59TjTqV0Tynlh+MzD1nUBUtEUkRkJbATWOCITmdjzC4AY8xOoJNTvSuw1dO8zCnrCmzzlG9z\nyqq1McZUAgdEpF24vkSkPbDPGFPl6asZbxoRP+TnQ69eVkDcbT/CDae5w3kXXGBF6o9/tKIDgX2v\nvEOKoYYaXYIX90drqLA+IljXvRuyvqy+onvHgjvYc2gPM747A2lMZIiSNGSmZTLouEFxu6Fj1Odu\nHGE4RURaAa+IyACsl1WtWgRvWZ//cfX+Xzlx4sRvzgsLCyksLGy4RUqduAuDN2+Gnj1h3rzAw3jR\noppbgSxbVj344Je/hK5dISUFqqoCwQ1DhwZ2GIbADsPnnhsIhqisrF4/lFfX1O3oXSFyP0c4sanP\nvb0eZlPvN/2d6by24TWWXLOEzLTMxn9AJWlww9tHHD+i3m2Ki4spLi6OnlEu0RhnDHcAvwZuB9Zh\nvSyALsA65/wu4E5P/bnAEG8dp3w0MN1bxwTmyXZ76jziafMIcLlzvhtIcc6HAm+EsbcRo7dKQ3Dn\noRYsqP980sGDdp7KO98VfHjnsULNjRljTFmZMb172/sVFNh67hxZQYG1p675sLIyYx591L7WRn3n\ny9w5u/T0wJxdY6jP/V7f8Lrpcn8X89HnHzXuJmFwf9Omzqsp/vD6htfNOU+d06Q+iNIcVrQFqgOB\nQIdjgIXAhdigizud8lBBFxlAT6oHXbgBG4INuhjllI8lEHQxmtBBF+55G+fa8x7xmg5cH8b+Jv1o\nSu14AyoKCuxRnwe192GckmJMr1721StKs2dXv0+wALlilZpq2+fnBwI7yspsvboCOMrKjMnKsvfL\nyqpdtBoiRJEI0Kjrfou3LDYd7u1glmxZ0vib1HJfb5CMkljs+2qfafnHluZIxZFG95GognUisAJ4\nH1gF/NIpbwcUAaXYYIg2njbjHaFaB5zvKT8V+BAbiPFXT3km8IJTvhTo4bl2lVO+AbjSU94TG3W4\nwRGv9DD2N/oHU+om2Auob8Rb8MO4rMyYqVOrC5brRXnbuH0fPGjFyhtZ6LVjxoz6eUOPPlr9no89\nVrfdkYjoqy/h7vfe9vdMx3s7mrkb50b8nrGMvFSix0nTTzLLti1rdPuEFKxEP1SwoktThr+CH8au\nF+V6TLV5O97QcLD1vd5dWVn97GqIhxUvrNm9xnS5v4t5ee3LUek/UkOair+MfW2seWDJA41uHy3B\ncofblBCIiNHvJ7qUl9cMqAhVZ/VqGzEYXMd7rbzc7mO1aVPtgQbegIQePWx29uzs6nbUxy6wGz3O\nmWMDRnLqEWta22eJNh/s/IBR/xjFfSPu4ycn/SRq96nvd6fEL899+Bwvrn2Rf13+r0a1FxGMMZEP\nOY2GCibLgXpYMSF4kt77Pnieyw2McOt556YaGrgRbnguWkEDwfM7ZWWxC05Yvm256XRfJ/PC6hfC\n2qaBEorLlv1bTMd7O5qqqqpGtUeHBFWwkpFQD3Hve68IufNNvXvbesHRf7NnN304KppBA975nbQ0\n+zliEZzw9ua3Tcd7O5rZ62eHvK6BEkoo8ibnmdI9pY1qGy3B0uS3iq8Erzt6/fXq70Xs0JI3k8VH\nH9mhv0OHqvd17LGBjO6//a1df9XQRb/hsrtHIvNFqF2No51F/rUNr3HJ85fw7P97lu/1/V7IOvGU\n0V6JH4blxV9eQRUsJWrU5yEfnMniO9+p/n7wYCtC8+bZLBgumzdDixa2fWpqIDMG2CwXF18MI0aE\nzmxRG927WzEJ3n8qEpkvwu1qHInEtcEYY3h4+cP87NWf8fqPXuf8488PWzeSyXmV5GF43nDe3hpn\n+2NFw21LlgMdEmww7lxI8NBeQ9YdhZtf8i709SbCLSoKzG0FRwCmptow9foMc7lDY95hR2OiF6od\nrTD3wxWHzf/O/l9TMK3AfLz3Y19tURKXD3d9aHpP7d2otmiUYOzRKMGGERx95w55padbryI4ndD2\n7fDaa/Dd79YdYedG13XvDlu22G1FNm+27y+8MBCVNmcOjBwZSMWUmWmHEYOjBkNF65WUWC+qosJ6\nba+8Ah06QPv2cPLJ8PXXkJUFH39cv4jAaFBXlOFnX37G/7z4P7TJasOz33+W7EwN01MaR5WposO9\nHVh749oGbzejUYLqYcU9oTJQpKXZ11mzqv/1XtsaplBRg15vrbQ0ELDgvnq9H9frmjo1tGcULsgg\nOOVTZmbAfjeTRkM8tkhTV3DEki1LTPfJ3c34ovGmsqoy9gYqScd3/vEd89KalxrcDo0SVMGKd4If\n+H36GNOjR+C9N81RuCwRoR7KwUKYk2OqDfnl5taMDDx40Ipkr141r9U2xLdgQfUhxeDDFbFIRNN5\nh09rCymvK99iZVWl+ePCP5rO93U2s9bPappRiuLhT4v+ZG5949YGt1PBUsFKCLwP1dTU6g//tLTA\nQzachxVKTOpKdhs85xRcPzjzRW3enfeaSHX7U1IC75s6l+WdL8vKCi+CdeVb3H5wuznv6fPM8CeG\nm60HtjbJHl2HpQSzaPMic9qM0xrcLlqCpVGCSqMIFwE4ZEgg4qxPH+jWLXCtXz97zZ27WrwYHnsM\nPvjAzkeVl9eMWMvLs+HpV1wRCG0PprLStt+yxfbx3HN2yxGXLVsC10pKbOj20aP2WkWFveayebMt\nA3u/KVOsHe4mj/37h46ma0jYu2vjmjXW9q+/Dh9S7g05Ly219ixcCAsXGl7d9E8GPjqQM7udyZtj\n3iS3VW7dNw9jTzT2/1ISn9NzTmfdZ+v44sgXfptiiYYKJsuBelghqW0OyB3iKiqqnttv5kzrfZWW\nVvduSktr9uVGrLlZ073DcenpxvTvb4caU1ICZd5Fx6mpttw7FOmNWiwoCGRnD87GHiqxrvs5+ve3\nw4xFRaHb1DciMtizysoKv9g5VG6+T/d9ai78x4VmwMMDzDtl7zT599SEtUptDHtimFnw8YIGtUGH\nBFWw4oVww3bhMlR4gyO6djXVhvPuuiv8wzJUiPpjjwVEJC3NzpNNmmSFJPieDz4YEJfgLBNuIEWo\nRLneEG9vO7dtsEg/+mj9H/jBdrifp7aQcteez/cdMZPenmTaT2pv/rjwj+ZwxeGm/ZCe/jVhrRKO\nuxbcZSa8NaFBbVSwVLDihlAPOO+DODXVelTumilvJF9qqjEZGaaGhxW8tmrBAmOeeMKYTp0CYtG/\nvy0PTtfkvR5uTy2vze4+WG673r1r1g3OZeitHyzSrrdU372uGioOVVVV5tXSV03+w/lm5DMj6722\nqiHoOiwlHK+VvmYKnzi3QXOcKlgqWHGFd9jOHQYMHr5zI/qefLK6kJSWBjyL4L4WLLDCEyxG3boF\nhvH6968+5Of1foL31PIOUy5YYK+7C5C97aZOtddDLXh2w+SDxTCUt1TfBcr1FYfl25abs5882+Q/\nnG9eLX21zmSkGjyhRJrNu/ealF+2NKkZR+r9R5YKlgpW3BE8DDhrVmjPx43Uu/deY557rnrGdXeL\nedfTChdSLlJ9LVSoevn51T20WbMC80/BkXiuaKWlVRc/d+1YqOG9UBk5XJu7drWfwS1vqmh89PlH\n5vIXLzc5D+SYx957zBytPNrg30NFS4kES5YYI98fY2i5vd5znCpYKlhxR6gdg90HZnp6aOHxBkJ4\nAzAyMsKLnXvdPT/hhIAQeee33Pmq2kLggxcQz5hRM3Q9OP1TbZSWhh7ibKxobNq3yVz36nWm/aT2\n5nf//Z354vAXjf49NHhCiQSNGcaOlmBpWLvSaIITxbqJaufOhZ49a2+7fj088YQN6QY4cgRatrR9\n9e9v+xWBLl3gd78LhJqDTfn01FMwebK9b3p6IPmtGwYeTGZm6HD0zp3huOMC79PTbcb4hQvDbwDp\npbjY2g72szz5ZOMyn5fuKeXa2dcyaMYg2ma1Zf1N6/nVWb+iRUaL+nWAJrFVooM3aXN9/k9EE80l\nWAuaSzA87tqd1autOL3+evX1TBdcUF1kgikogJdfDuToc8nIgA8/tCLi5gcEK2JlZYF6ubmwc6dd\n2zVlihWr7Gy7xqtHj8A6KwjkBezYsfqOwmecEcg56OLmPRwwwK7/Aru2LNx/0u3b4fjjA3kGP/gA\nfvADK1b5+XX/B1+6bSn3Lr6Xt7e8zQ2n3cAtQ26h/bHtwzeoA93tV4kHEjKXIJALvAmsAT4EbnHK\n2wLzgVJgHtDa02Y8sBFYB5zvKR8ErAI2AFM85RnATKdNCZDnuTbGqV8KXOkp7wEsda49B6SFsb9u\n37eZEipMPFS0Xvfugbkndy7KG0peVmbMFVdUH7Zz0zR58Q69pacHhvG82TNcu4Lnt4LXWoWr50YM\nBgeQhGrvpawsdBBJuDZHKo6YmR/ONGc+fqbpPrm7mbp0aoOG/hQl3iER57CALsBA57ylIxz9gEnA\nHU75ncCfnfN8YCWQ5ojKRwS8wGXA6c75HGCkc34DMM05vxyYaQKi+DHQGmjjnjvXngcuc86nA9eF\nsT8yv14SUluYuDdaz7uY13vdKzLB80ChEuGWlVkhFLEBDm6gRKj67v1ycox5/vnQwhFqrssV0mAx\nC7a3sewo32F+W/xbk/NAjjnrybPMC6tfMEcqjjS9Y0WJMxJSsGrcDP4NnAesBzqbgKitd87vAu70\n1H8DGOLUWespHw1Md87nAkOc81Rgd3AdExCmy53zz4AU53woMDeMvU382RKPcBFubuRdcITfjBlW\ncGrzSMrKbIRgKJFxhSMlxa65+u1vq19zAxiCRdEbRFFUVD2JrDebe22TxG64+uzZgXD3UCH6obJh\n1DcKsKqqypRsLTE/fvnHps2f25ifzf6ZeX/H+/X6zhUlUUl4wXI8pk2Op7Uv6Npe5/VB4Eee8r8B\n/w84FZjvKR8GzHbOPwRyPNc2Au2A24G7PeW/An4OtAc2eMpzgVVhbG7ar5ZAuILkZpCobdsNb6oj\nN/Fsaal96Hsf/N7w8VALb42x9wwVEfjee8b89a+BdikpxnTpUr2em6miS5dAmiZ3eNKbpNYVtPos\n6HU/u5teqrFpmL46+pV56v2nzGkzTjM9p/Q0f3jzfjP3v5/Xmtw20qHoKoSKX0RLsNKIASLSEngJ\nGGeM+UJEgiMZIhnZUJ+JvnpPBk6cOPGb88LCQgoLCxtuUZzjDaCorLRlboTb0KG23JtMdv16G2Tx\n4YdQVQUffWSDLN5/3153N3Hs1w8OHYJPPgm0TU210YV5eeHtOXLEBlG4toC9T3Dy26qq6n0fPmxf\nvWW9esHNN8OGDTZwY8mS0MEI3iSza9faAJJzz627nvsduWw9sJVH3n2Ev638GwO7DGTC2RMY1vkC\nCs9OZcKamhtJ1tVffQne2NG7mWbwPcO1UZTGUlxcTHFxcfRvFA0V9B7Y+ai5WLFyy9ZRfUhwnXMe\nPCQ4l8CQ4DpPeX2HBB/xtHmEwJDgbqoPCb4RxvYm/p2RGATnywvOsXfwYPXsEwUFxixcWD2YAuzQ\n2qxZ4Rf49ugRWJjbv7/1oNzhRJGanlZjjuBhw2CvrKgo8LmDs2CES+vkJdSalAMHqszUV/9jvvfs\n903bP7c1N8+52az/bH3I7zfUYmTvsGdwXsP6EMpLq2tNli4yVqIJiTokCDwN/CWobJIrTIQOusgA\nelI96GIpMBjrHc0BRjnlYwkEXYwmdNCFe97Gufa8R7ymA9eHsT0Sv13c4314eRfounM3ZWVWaESs\nAEybFnqRb25u9fZ9+wYW+Obm2vyCwe0yMmzOwKlTjfnLX5omVjk59h7eiMVgAXMFK1TW9P79rR3h\nRMMrcCUlxmz77IC5f+FDJvPn/Q1jB5iul0wzZXtqPvnrWnjpzbrRGPGoLRlxuHvqImMlmiSkYAFn\nApXA+44QrQBGYeeYirBRg/NdIXHajHeEKjis/VTsfNVG4K+e8kzgBad8KdDDc+0qp3wD1cPae2Kj\nDjc44pUexv7I/HoJQKisD260nzfvXm1HsMd1333VH8buBoTB9dyjW7emCVZKSiCDhputwt1KxN3m\nJNRGkd6jPhsp9h221vzslRtN2z+3Nd+e/j8m5fi3DFTVyKLhnT8KldbJvR4qY0hD5p7CiVNt4fWa\noV2JJgkpWIl+NCfBMib00F9dW8Z7D1ck3Pf9+tXc1r2oyEYM1tVXRkZ4YQsnkF4vyvuw9gZ+uMNu\nXgHKyqqZnmn27MB3smCBMZOnVJiUAf8yXHmO4RddzNVP/9psPbA15IO/ruE2N4jFFXE3gMUV2FCB\nL/X57RqabV0ztCvRIlqCpZkuaiGZM12EmnB3sz+sXWuzRSxaZMvdTA5ecnLg6qth1y4YNgzatYO7\n766ZOWLmTBgzxgZEpKXBs8/aYIBvf9sGQtRGx47w2WcN/2yzZ0OHDoHPVlJi7+kGcfTuDStW2PM1\na2wAyLp1MHZswKbMTFi1Ci75wResy3oChk5BDnUmZfkt5MulLF6Y8U1ww7Jl8NVXcMwxNivG6tV2\n996KChsoMm9e9QCOoiIYMaL6+8GDrS1ffBHIEuJm3WhMEIai+ElCZrpI9IMk9bBChXAvWFA9jNxN\nJrtkSWhPJicnMF+VmRl6fgrsuqrgsl697JYjDQm0uPRS67HV1SYnxx7Bmdm9c2spKXauKjhc/dZb\nPX212mqG/upOwx3tDT+41JC75JsNJENla8/MtK+ux1TbOq7gUP7gQBAdqlMSHXRIUAUrUtSWVsl7\n5OdXz6he29G5c+jyH/4wdHld2dxDzS316WNMmzbh64jUXO9VVGR3JA73+bxDhikpxtBlpeH7PzHc\n2dZc8c9bTJ8hH39T391A0hWRcPNgRUU1h0KDIwPdYJRQaZ+iOVSna7OUWKCC5cORrIJVW1ol75Ga\naj0k18Oqa04p3o4uXexWJLXVmT3bCSrJW2j4yUjDz7sazpxk+py075v5KDcbhruBpDd6MpSYu3No\ntXlKfswfaSi7EiuiJVg6h1ULyTyHtX27Xfx79tlw6aWBuaeMjMB2GcHk5Ng5JW8m9HjmuONgx47a\nahhueGAB01f/HrLL4O3x8MEVUJlZbf6ovNxuGzJuXKBlUREce2z1ubHU1OqLkzdssFuo/PSn0KdP\n7bbGYhFvSUlgbk3nx5RoonNYPhwkkYflHQoKFaXmpiEqLTXmttsSz5tKSal9A0jvkZZeaVLyXzHH\n3HKa6f2XfJM+6FlDylGTlmZMXl4gWm/BgkAEX/D3MXNmdY+lVy/rhXnzLLq5EzMza18QHCvPR+fH\nlFiBDgmqYDWW4AfirFnVH75uAIIrZJHKOhHJo23b2q//7Gehh/9SUwMLnh+eVmmuuu9502dygen7\nl0Hm2fdeNvPmV9YIac/JsQEebvaJUELoilBpqV0U7c2puGCBMWPH1vyOwxHLRbwayq7EAhUsH45E\nFKxQk+rBD8SpU6s/TFNS7PxMsJBBfIhXVpbNrtHY9l1zq8zfiueaY249xfC/p5qe588x27ZVmQUL\nqq87C3W4opWeXjPN04MP1lxUHS6YZObM2n+z2oIwwv2uihKvREuwUiI+xqj4hpvw9Kyz7Ov27Xbe\nont3mwA1Lc2ejxxp50pcqqrs2qv//Kdmn927Q/vGb4AbEf74R7vGqSF06uSc5JZQdt63uXvhOA4X\n/RJmvMOmBRdw+unCyJHVk/oGk5Zmv7f//hfeeANatQpcy8y067c+/bR6m3Dzex061G2zhBnxD/5d\ny8vr7ktRkpJoqGCyHCSYh+UNpfYOZ518st2uIyen+lqhG2+s7gWEmrdq375+Xky4w53HifXRqveH\nJnPMRYbbuhlOedz0yz9q+vQJXTdUlGSvXtW3FvF6qW4mDO86rIwMe937eTMyaveaXOoaEtS8f0qi\nQZQ8LI0SrIVEihLcvt3+9e1urdG9O2zbZiPY0tKsx7F9e6D+7Nnwi1/UnW0i4WjzKXx7Ahw/Dxbf\nCe+MhYosUlOhdWvYu7dmk9/+1kbzbdpk3/fqZbN85OQE6rheztq1kJ8Pc+bY80OHoEULGx24ZUsg\nawYEygYMqD3yL7jv4K1A6rquKPFGtKIEVbBqIVEEq7wcBg2y+1IBpKRAbq59WAJ07gy7d9u/+11u\nvBEefjj2tkaNFruQs3+PKfgnLL8ZSn4Oh+0YnogNOa+oqNksL88O9a1bB9262fRMF18c+O7y82Hz\nZvsHwNq1tq/+/e2wqrsUoKAgEMre2PD08vLA3lWh2tV1XVHiCRUsH0gUwQrOlde+PXz+ub82xYzM\nA3DmfXDadGTVlZhFd8OXHatVEaku1i65uXZzx1/+MiBmqanWI3U3g8zMDKxbqqiwgnH//TBqVOD7\nTkuzXs+AATU3TYTwAqYbKCrJSrQES4MuEpTycitU5eX2gVdQYB+2GRmwb5/f1sWAtK/gjPvglhMg\nezs8uoI+n06mV+eONaqGEisRG2xy991WcNzdjCsrA2IF9ryy0ib/dXcFFqm+EDg11Sb/fe656rsH\nL19uBWz4cOsBe4dkQwVSeH9TRVFqooKVgLhZ1c86y76Wl9t5mJtvtg/hqqrG950S7/8iUo7CqTOs\nUHUrgb8Xw6wn4EB3zjoLpk0L3zQ9Hfr1s58xJcUKSGWlzewxYYKdu0pLs16VS2amretG8LnZLKZO\nDYjc0aM2w/rYsbZ9erodSjTGelCVlXa49uyzA2K0enX9xU1RFIdoRHIky0GcRQm6ezMFJ3Pt0aN6\nZFp6ujEdOoSPoAt3xHV2C6k0DJhpuPkEuydV16Uh69W2biwtzeZGDBUVmJlpP3+vXnbxb1GRzSjf\npUv17yUtLbDwNtQarrS0QEb3gwerr9MK3uDRm3UieN+x3r11zZWSuKBRgrEnnuawXK8qeL8pqDlH\n06WL/au+MXtJxR8Ges+Dc+8GkwJFf4ZPzmtQD2lpgdfDh0MPEXopKrJeVM+e1fMquuuy3LmpgQMD\nUZnB1905qe3brWe1eXMgunDz5sA6OHe+C6oHzmiuPyWR0TmsZs7q1XboyEtKip2zCn4A79yZJGKV\nWwJXfRtG3QoL7aLfhooV2CHSX/zCDr8Ff1d5eTWHQffsgTvuqC5WOTkwd25AjFavtsLj0qMH/OUv\nNjz+uefscoGSElt3xQorPnPmwIUXBuatwApSdrY9/vtfu7mkO6ToCplLfee4dC5MSVqi4bYly0Ec\nDQkePGhM9+7Vh5/atav+vmPH8MNhCXV0WmUYHVj0S8rRJvf53nuBfIoZGXaYr08fm45q9mw7vJea\nasuCFztnZNhhQvd3WLIkkBTXTXybn2/7dIckRWoms63PAuBwuf7qmyDXu5i5d+/ak+4qSrQgSkOC\n0X7gPw7sAlZ5ytoC84FSYB7Q2nNtPLARWAec7ykfBKwCNgBTPOUZwEynTQmQ57k2xqlfClzpKe8B\nLHWuPQek1WJ/BH66yHDwoKmRqSF4zul734sDsWnK0W6j4f/9yPCLToZvPWBI+ypifY8ebcwTT9hd\nld05Kjdj/ckn27IZM2rOD15xReChH2qn5pKS6hlGgo/a5q0aMkdV32wXS5boXJjiP4kqWMOAgUGC\nNQm4wzm/E/izc54PrATSHFH5iMA6sWXA6c75HGCkc34DMM05vxyY6Zy3BT4GWgNt3HPn2vPAZc75\ndOC6WuyPxG/XKLx/yS9ZEjoxbY8exvTta4XLuwV8wh2tthi+9zO7Hf1ZvzNkHIzq/dydg0OlserT\np7qX5HpWxoQXDa9X420bSpgamy29vmJXW6CHosSKhBQsazfdgwRrPdDZOe8CrHfO7wLu9NR7Axji\n1FnrKR8NTHfO5wJDnPNUYHdwHef9dOBy5/wzIMU5HwrMrcX2Jv5sjcP7AMzKsq/BmcK9onXRRTEW\nmEgdx+42jLzNcEc7w7l3GY75PGJ9t25d+/WZMwO7Bbt5AKFmBGFRUfXfJVxWdVeISkttlGBpaeS3\n8UPxB58AAA/bSURBVKiv2JWVBTLM675Xih9ES7Cc+KmY0skYs8tRg50i4ubV7ood1nMpc8oqgG2e\n8m1Oudtmq9NXpYgcEJF23nJvXyLSHthnjKny9OXJGBcfLFtmo8cqKwPZFHbuDF1306ZADryEIWsf\nfOsvcPo0+PBHMG01fHFcRG9x4EDt17dsCWRWr6y0EYGbN9v0TN7IPwhkpOje3b43xuYk3LEjEA2Y\nnR2I6Ktrd+HG4r1HbeTk2EAPTeWkJBt+CFYwJoJ91SeMskGhlhMnTvzmvLCwkMLCwoZZ1AC2b4eX\nXoKHHgqkCkpPT5wt6evk2D1WqE59FNZfAjPeg/09YnLrlJTAguq+fe2W9+4fA927w/PPw+LF0LIl\n3HCDDX/PzLQCNny4FawuXaxIVVXZ3yo/30ZuhhMoP1Mv1VfcFCUSFBcXU1xcHP0bRcNt8x7UHBJc\nR/UhwXXOefCQ4FwCQ4LrPOX1HRJ8xNPmEQJDgrupPiT4Ri22N8Eprh/uYuCHHw69oDUeNlBs8tFy\nh+H82w13tjV89zpDm09jen+RwHebmmo3sPQGSaSkhN4Gxa0bvCOxt05OTvgNF2O17b1u7KjEG0Rp\nSDAW67CE6l7NbOAq53wMMMtTPlpEMkSkJ9AbWG6M2QkcEJHBIiLAlUFtxjjnlwFvOufzgBEi0lpE\n2gIjnDKAt5y6wfePOe5i4BEjbPZ09y9+LyaS/mesabUVRo2DG/Mh9QhMXwWvPRIzr8olNdV6Vamp\n1ks680w7VOamVqqqqp4/0KWy0nq7nTsHyoJ/j9277dBbMMGpl0LVaSq6saPS7IiGCroH8E9gO3AY\n2AJcjY3gK8KGm88H2njqj8dGBwaHtZ8KfIgNX/+rpzwTeMEpXwr08Fy7yinfQPWw9p7YqMMN2IjB\n9Frsj8QfG2GZNStJPKjg47h3DZf+0HpU5//c0HK77zZNmxaIpExLM2bhwuqh7V4Pq3v36l6Vu6Yq\nLc3WP+GEwLXatrRvbAh7falvqLt6YUqsIUoelqZmqoVopmbasMHOgYTyqhISqYITXoczHoC2n8Cy\nW+C9n8Hh1n5bBtgt6vfsCbxPS7NBFtnZ1vtxN148dMhK0fjxUFpa/ffJzbUBMdnZNlktwODB9jXU\nXFW097Cqz8aObh3vlicahKFEG90PyweiJVjl5TZreFJk5M7aByc/YyP+jrSAktthzWVQle63ZdXw\nbh/i8thjcO21gffuw331aitoR4/adm7QS6j8fm6uwE2b/BGEukSxpMQOGbp7eml+QiUWaC7BJGH7\ndvjNbxJdrAx0XQYXXw3jekHuUnh1Bsx414apx5lYgY32mzo1kAg3K8vm9fPizju5e2K5W7Xk5obO\n71debsXqo4+iO1dVG240YDiRLCiwNofLT6goiYR6WLUQaQ9rwwY48cTqSVUTimM/g4KZcMoTkFkO\n714H718Fh2pumhhv9OgB27bBCSfYsPVLL7Xrlbx4PayqKjs0mJUFH3xg110FezHBOz337m3XP8Xb\nkFu0hyYVJRgdEvSBSApWwg4Dpn0FfWfbYb+8t2HDd+H9MfDpuWDi30FPTbXrrLZsCT0sFrxWqrwc\nZs60olZZaT2yRYtCD6N554d69LDZ1oNFUFGaI9ESrHhYONwsWLYsgcQq7Ss4fj70f8WK1fbT4IMr\n4KWZcKSl39bVi06dYNIkOxTYv78d/lu71oa3f/FFIAQ8VEDC6NHw8MM16wd7J9nZto16L4oSG9TD\nqoWmeljuX+/t29u5jnDpleKCrP3Q5zXo9wr0KoIdp8K678O6S6E8MdwGd18rN6OFd0PF8nJ4+WV4\n5BE7NDtgANx/v93aPpzntXw53HorrF+vEXaK0hDUw0ow3OGiDz+0792HaNyQUgE571pP6vj50PkD\n+PQcWP99G0DxVXu/LWwwwd+xGwixfDncfrv9Ldw6a9fanZoHDAiEhXsDErKz4dhjbah7ZaX1otas\n0Qg7RfETFawoMWcOrFoVR5kqpBI6rbHzUD3ftMfBXPhoJBRPgC3DoOIYv62MKO781ZdfBgIpXPr2\ntWuoahvS697del7uXFZeXmztVxSlOjokWAuNHRLcsME+EH0l/RDkvGMFKu9t6FYCX3S2wrT5bPh4\nRMQzpMeCNm2gRQsoKwt9PTPTClPv3jY0fcsWG+xy6FAgC3tqKsybZwWrtuS0uoZJURqHDgkmAO6c\n1aOPxvKuBrJ32CG9Lu9DF+e19WbYdbIVqPeug38/BV92qru7OGf/fjh4MPS11FR48UXo2NEGSrjz\nU6Wldv7q5z+32S3y820gRl0ZINw1TKGGDBVFiT3qYdVCQzwsN+PBRx9F0aCUo9Ch1AqSV6CkCnYO\nhJ0n29ddJ8OeflCZEUVj4o+CAliyJBCeHpy2CAICtXp1/bwnXcOkKA1H12H5QH0Fq7wcBg6sufFf\nk8ja74jSBwGB6rgODnQLiJIrUOU5NHCbr7inbVvrJdVnL7BOneBvf4PCwvrn8qtPHj5FURqHCpYP\n1EewysvtZoDjxjX2LgbaflpzSO/YPbDrpOpe064T4WiLxt4ooXjySfjZz6wHlJYGkyfbob4tW+Dx\nx+0wH9h1VkuXNm7BrnpPihIdVLB8oC7B2rChgeur0r6CTqutKLkC1XkVHG7leEyeYb19xydEJolI\n0qkTXHYZ3HILHHdceA/IXSMFNnBCxUZR4gsVLB+oTbC2b7dJUcN+fS131vSa2nwKn/fxDOk5ApWA\na54iQadOdgNEgF69rCh5PSX1gBQlMdEowTjj8ccdsUqpgPYbagZCpB4JCNJHI2HxHfBZf6jM9Nt0\nX3HDzvPz7Vq1detseShPyc1EriiKAuph1Uo4D+ufH/6T3//jTdbt/cAuxj3YteaQ3sFcki0QIhwX\nXQRbt8IvfgETJsCnn9r5piuusK8XX2yvgw0n37JFvSZFSWZ0SNAHwgnW1MUzeH9VBU/+aaANhDjS\nfJ68br6+Xr3sXFPwNh06jKcoigpWhBGRUcAU7CaWjxtjJoWoU0OwvFtK9OplE9uWlMTG5mgxfjxM\nn24X5bZoASedZDOdd+5so/Uuuwz27bN11UNSFKUuVLAiiIikABuAc4HtwDvAaGPM+qB6NQQrOF3P\nr39tdxCOT4pp06aQ9u2tZ1RVZQWnf3/IyIDWreHHP7YeUrx5RsXFxRQWFvptRqNR+/1F7fcXDbqI\nLIOBjcaYzQAiMhO4GFhfayuqp+vp2xeeey7KloYgN9funuuSkWGDE3r1ghEjYMoUK1D9+xfz5JOF\n9eoz3gIcEv0/rNrvL2p/ctJcBasrsNXzfhtWxOrEu2mfm68uGmRlwdVX20jEkhL7euKJ1pvr08eG\n1f/rXzajeHCGhx/9yL5OnBgd2xRFUfyguQpWk3C9kfLy6t7W2LHw2mvQsiW89RZ89lnNtllZ1kM6\n8UQ4/3zrKW3bZjM2DB4Mp55avzminBy46abofUZFUZR4o7nOYQ0FJhpjRjnv7wJMcOCFiDS/L0dR\nFCUCaNBFhBCRVKAUG3SxA1gO/NAYs85XwxRFUZSwNMshQWNMpYjcBMwnENauYqUoihLHNEsPS1EU\nRUk8mlc68HoiIqNEZL2IbBCRO/22x0VEckXkTRFZIyIfisgtTnlbEZkvIqUiMk9EWnvajBeRjSKy\nTkTO95QPEpFVzmecEsPPkCIiK0RkdgLa3lpEXnTsWSMiQxLM/ttEZLVz73+ISEY82y8ij4vILhFZ\n5SmLmL3O55/ptCkRkbwY2H+vY9/7IvKyiLRKJPs9124XkSoRaRdT+40xengOrIh/BHQH0oH3gX5+\n2+XY1gUY6Jy3xM7D9QMmAXc45XcCf3bO84GV2KHfHs7ncr3qZcDpzvkcYGSMPsNtwLPAbOd9Itn+\nd+Bq5zwNaJ0o9gM5wCdAhvP+eWBMPNsPDAMGAqs8ZRGzF7gBmOacXw7MjIH95wEpzvmfgT8lkv1O\neS4wF/gUaOeU9Y+F/VH/T55oBzAUeMPz/i7gTr/tCmPrv53/AOuBzk5ZF2B9KNuBN4AhTp21nvLR\nwPQY2JsLLAAKCQhWotjeCvg4RHmi2J8DbAbaOg+V2Ynwbwf7h6P3gR8xe7EP3SHOeSrwWbTtD7p2\nCfBMotkPvAicSHXBion9OiRYk1CLirv6ZEtYRKTH/2/vfkLkKOIojn+frJqYKEFkDf6LG4MHL2IU\nkeSgGBBR2JsoSjR6F08BjYeANw8iOejBgyIBFfEPu94kBC9CUFkT459DYIUsK1mRYECRKOF5qNrY\nuzHRw0zPlL4PDOxUT8+8bpj9VVfXdFN6P4coX+AlANsngMn6stXbsljbrqVs17K+tvFlYDfQPXHa\nSvYp4CdJb9QhzdckXUYj+W3/ALwEHK9ZTtk+QCP5OyYHmPfsOrbPAD93h7h68BTliGNFlmos80ua\nBhZsH121qJf8KVgNkrQeeA94xvYvrCwA/M3zkZP0ILBk+zAXvu/K2GWvJoCtwCu2twK/UnqVY7/v\nASRtoFx+bBPlaGudpMdoJP8FDDJvb/cDkvQ88IftQV7cbaj5Ja0F9gB7h/UR//SCFKxzLQLdk3/X\n1baxIGmCUqz2256pzUuSrq7LNwL1Pr4sAtd3Vl/elvO1D9N2YFrSPPA2cK+k/cCJBrJD6Rku2P6i\nPn+fUsBa2PdQhv/mbZ+svdkPgW20k3/ZIPOeXaby28wrbJ8cXvRC0i7gAeDRTnML+W+inJ86Iun7\nmmVO0iTn/7850PwpWOf6HNgiaZOkSyhjrrMjztT1OmVMeF+nbRbYVf9+ApjptD9SZ+NMAVuAz+pQ\nyilJd0oS8HhnnaGwvcf2DbY3U/bpQds7gY/GPXvNvwQsSLq5Nu0AvqGBfV8dB+6StKZ+7g7g2wby\ni5U970Hmna3vAfAQcHDY+VVua7QbmLZ9uvO6sc9v+2vbG21vtj1F6cTdZvvHmuXhoecf9Em6/8ID\nuJ8yA+8Y8Oyo83RybQfOUGYufgnM1axXAgdq5o+BDZ11nqPM2PkOuK/TfjtwtG7jvp63427+mnTR\nTHbgVkqH5jDwAWWWYEv599YsXwFvUmbBjm1+4C3K7X9OUwruk5RJIwPJC1wKvFvbDwE39pD/GGXy\ny1x9vNpS/lXL56mTLvrKnx8OR0REEzIkGBERTUjBioiIJqRgRUREE1KwIiKiCSlYERHRhBSsiIho\nQgpWREQ0IQUrIiKakIIV0RBJd0g6Ui+Bs07lhoy3jDpXRB9ypYuIxkh6AVhbHwu2XxxxpIhepGBF\nNEbSxZRrGv4GbHO+xPE/kSHBiPZcBawHLgfWjDhLRG9yhBXRGEkzlHuKTQHX2H56xJEiejEx6gAR\n8e9J2gn8bvsdSRcBn0q6x/YnI44WMXQ5woqIiCbkHFZERDQhBSsiIpqQghUREU1IwYqIiCakYEVE\nRBNSsCIiogkpWBER0YQUrIiIaMKfBt7hVm+vzmcAAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x11fdeed10>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plot_poly_predictions(poly_data, model)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"***QUIZ QUESTION: What's the learned value for the coefficient of feature `power_1`?***"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"answer = 103.1"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Observe overfitting"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Recall from Week 3 that the polynomial fit of degree 15 changed wildly whenever the data changed. In particular, when we split the sales data into four subsets and fit the model of degree 15, the result came out to be very different for each subset. The model had a *high variance*. We will see in a moment that ridge regression reduces such variance. But first, we must reproduce the experiment we did in Week 3."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"First, split the data into split the sales data into four subsets of roughly equal size and call them `set_1`, `set_2`, `set_3`, and `set_4`. Use `.random_split` function and make sure you set `seed=0`. "
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"(semi_split1, semi_split2) = sales.random_split(.5,seed=0)\n",
"(set_1, set_2) = semi_split1.random_split(0.5, seed=0)\n",
"(set_3, set_4) = semi_split2.random_split(0.5, seed=0)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Next, fit a 15th degree polynomial on `set_1`, `set_2`, `set_3`, and `set_4`, using 'sqft_living' to predict prices. Print the weights and make a plot of the resulting model.\n",
"\n",
"Hint: When calling `graphlab.linear_regression.create()`, use the same L2 penalty as before (i.e. `l2_small_penalty`). Also, make sure GraphLab Create doesn't create its own validation set by using the option `validation_set = None` in this call."
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"model = polynomial_regression(set_1, 'sqft_living', 'price', 15, l2_small_penalty)"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"collapsed": false,
"scrolled": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Learned polynomial for degree 15:\n",
" 15 14 13 12\n",
"-2.338e-53 x + 1.527e-49 x + 3.8e-45 x + 2.851e-41 x \n",
" 11 10 9 8\n",
" - 1.627e-37 x - 6.838e-33 x - 6.928e-29 x + 1.593e-25 x\n",
" 7 6 5 4 3\n",
" + 1.069e-20 x + 5.975e-17 x - 3.798e-13 x - 1.529e-08 x + 0.0001415 x\n",
" 2\n",
" - 0.3973 x + 585.9 x + 9306\n"
]
}
],
"source": [
"print_coefficients(model)"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x11ef7e590>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plot_poly_predictions(poly_data, model)"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"model = polynomial_regression(set_2, 'sqft_living', 'price', 15, l2_small_penalty)"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Learned polynomial for degree 15:\n",
" 15 14 13 12\n",
"1.301e-50 x - 1.004e-46 x - 1.024e-42 x - 9.413e-40 x \n",
" 11 10 9 8\n",
" + 6.517e-35 x + 6.218e-31 x - 2.713e-29 x - 4.597e-23 x\n",
" 7 6 5 4 3\n",
" - 2.064e-19 x + 2.512e-15 x + 6.843e-12 x - 1.152e-07 x + 0.0004388 x\n",
" 2\n",
" - 0.7678 x + 783.5 x - 2.512e+04\n"
]
}
],
"source": [
"print_coefficients(model)"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nbZgyu3FgoAAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1206a92d0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plot_poly_predictions(poly_data, model)"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"model = polynomial_regression(set_3, 'sqft_living', 'price', 15, l2_small_penalty)"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Learned polynomial for degree 15:\n",
" 15 14 13 12\n",
"-2.858e-51 x + 3.556e-47 x + 2.426e-43 x - 1.066e-39 x \n",
" 11 10 9 8\n",
" - 2.968e-35 x - 1.72e-31 x + 1.243e-27 x + 2.571e-23 x\n",
" 7 6 5 4 3\n",
" + 4.088e-20 x - 2.082e-15 x - 2.261e-12 x + 1.154e-07 x - 0.0005283 x\n",
" 2\n",
" + 1.029 x - 759.3 x + 4.624e+05\n"
]
}
],
"source": [
"print_coefficients(model)"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x122f789d0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plot_poly_predictions(poly_data, model)"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"model = polynomial_regression(set_4, 'sqft_living', 'price', 15, l2_small_penalty)"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Learned polynomial for degree 15:\n",
" 15 14 13 12\n",
"4.395e-50 x - 6.029e-46 x - 1.799e-42 x + 2.334e-38 x \n",
" 11 10 9 8\n",
" + 2.399e-34 x + 1.602e-31 x - 1.324e-26 x - 7.999e-23 x\n",
" 7 6 5 4 3\n",
" + 4.215e-19 x + 4.818e-15 x - 2.202e-11 x - 6.383e-08 x + 0.0005553 x\n",
" 2\n",
" - 1.225 x + 1248 x - 1.702e+05\n"
]
}
],
"source": [
"print_coefficients(model)"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x127237a90>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plot_poly_predictions(poly_data, model)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The four curves should differ from one another a lot, as should the coefficients you learned.\n",
"\n",
"***QUIZ QUESTION: For the models learned in each of these training sets, what are the smallest and largest values you learned for the coefficient of feature `power_1`?*** (For the purpose of answering this question, negative numbers are considered \"smaller\" than positive numbers. So -5 is smaller than -3, and -3 is smaller than 5 and so forth.)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"smallest power_1 = - 759 & largest power_1 = 1248\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Ridge regression comes to rescue"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Generally, whenever we see weights change so much in response to change in data, we believe the variance of our estimate to be large. Ridge regression aims to address this issue by penalizing \"large\" weights. (Weights of `model15` looked quite small, but they are not that small because 'sqft_living' input is in the order of thousands.)\n",
"\n",
"With the argument `l2_penalty=1e5`, fit a 15th-order polynomial model on `set_1`, `set_2`, `set_3`, and `set_4`. Other than the change in the `l2_penalty` parameter, the code should be the same as the experiment above. Also, make sure GraphLab Create doesn't create its own validation set by using the option `validation_set = None` in this call."
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"l2_penalty_big=1e5"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"model = polynomial_regression(set_1, 'sqft_living', 'price', 15, l2_penalty_big)"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {
"collapsed": false,
"scrolled": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Learned polynomial for degree 15:\n",
" 15 14 13 12\n",
"3.601e-58 x + 5.845e-54 x + 9.392e-50 x + 1.498e-45 x \n",
" 11 10 9 8\n",
" + 2.382e-41 x + 3.789e-37 x + 6.066e-33 x + 9.861e-29 x\n",
" 7 6 5 4 3\n",
" + 1.65e-24 x + 2.896e-20 x + 5.422e-16 x + 1.06e-11 x + 1.749e-07 x\n",
" 2\n",
" + 0.001274 x + 2.587 x + 5.303e+05\n"
]
}
],
"source": [
"print_coefficients(model)"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1209b13d0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plot_poly_predictions(poly_data, model)"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"model = polynomial_regression(set_2, 'sqft_living', 'price', 15, l2_penalty_big)"
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Learned polynomial for degree 15:\n",
" 15 14 13 12\n",
"4.715e-55 x + 4.427e-51 x + 4.183e-47 x + 3.985e-43 x \n",
" 11 10 9 8\n",
" + 3.842e-39 x + 3.767e-35 x + 3.777e-31 x + 3.901e-27 x\n",
" 7 6 5 4 3\n",
" + 4.16e-23 x + 4.531e-19 x + 4.808e-15 x + 4.435e-11 x + 2.931e-07 x\n",
" 2\n",
" + 0.001131 x + 2.045 x + 5.192e+05\n"
]
}
],
"source": [
"print_coefficients(model)"
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x120c96050>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plot_poly_predictions(poly_data, model)"
]
},
{
"cell_type": "code",
"execution_count": 44,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"model = polynomial_regression(set_3, 'sqft_living', 'price', 15, l2_penalty_big)"
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Learned polynomial for degree 15:\n",
" 15 14 13 12\n",
"1.917e-55 x + 1.912e-51 x + 1.911e-47 x + 1.915e-43 x \n",
" 11 10 9 8\n",
" + 1.927e-39 x + 1.954e-35 x + 2.004e-31 x + 2.093e-27 x\n",
" 7 6 5 4 3\n",
" + 2.247e-23 x + 2.501e-19 x + 2.876e-15 x + 3.209e-11 x + 2.776e-07 x\n",
" 2\n",
" + 0.001259 x + 2.269 x + 5.229e+05\n"
]
}
],
"source": [
"print_coefficients(model)"
]
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\ngv8Hz3yqiJRcH2cAAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x12adaaad0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plot_poly_predictions(poly_data, model)"
]
},
{
"cell_type": "code",
"execution_count": 47,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"model = polynomial_regression(set_4, 'sqft_living', 'price', 15, l2_penalty_big)"
]
},
{
"cell_type": "code",
"execution_count": 48,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Learned polynomial for degree 15:\n",
" 15 14 13 12\n",
"2.679e-54 x + 2.275e-50 x + 1.94e-46 x + 1.663e-42 x \n",
" 11 10 9 8\n",
" + 1.436e-38 x + 1.253e-34 x + 1.108e-30 x + 9.957e-27 x\n",
" 7 6 5 4 3\n",
" + 9.065e-23 x + 8.25e-19 x + 7.205e-15 x + 5.501e-11 x + 3.128e-07 x\n",
" 2\n",
" + 0.001101 x + 1.91 x + 5.137e+05\n"
]
}
],
"source": [
"print_coefficients(model)"
]
},
{
"cell_type": "code",
"execution_count": 49,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nJlKGYRhGZPn/QdUmJAsRSr4AAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x127080750>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plot_poly_predictions(poly_data, model)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"These curves should vary a lot less, now that you applied a high degree of regularization.\n",
"\n",
"***QUIZ QUESTION: For the models learned with the high level of regularization in each of these training sets, what are the smallest and largest values you learned for the coefficient of feature `power_1`?*** (For the purpose of answering this question, negative numbers are considered \"smaller\" than positive numbers. So -5 is smaller than -3, and -3 is smaller than 5 and so forth.)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"smallest power_1 = 1.91 & largest power_1 = 2.587"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Selecting an L2 penalty via cross-validation"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Just like the polynomial degree, the L2 penalty is a \"magic\" parameter we need to select. We could use the validation set approach as we did in the last module, but that approach has a major disadvantage: it leaves fewer observations available for training. **Cross-validation** seeks to overcome this issue by using all of the training set in a smart way.\n",
"\n",
"We will implement a kind of cross-validation called **k-fold cross-validation**. The method gets its name because it involves dividing the training set into k segments of roughtly equal size. Similar to the validation set method, we measure the validation error with one of the segments designated as the validation set. The major difference is that we repeat the process k times as follows:\n",
"\n",
"Set aside segment 0 as the validation set, and fit a model on rest of data, and evalutate it on this validation set<br>\n",
"Set aside segment 1 as the validation set, and fit a model on rest of data, and evalutate it on this validation set<br>\n",
"...<br>\n",
"Set aside segment k-1 as the validation set, and fit a model on rest of data, and evalutate it on this validation set\n",
"\n",
"After this process, we compute the average of the k validation errors, and use it as an estimate of the generalization error. Notice that all observations are used for both training and validation, as we iterate over segments of data. \n",
"\n",
"To estimate the generalization error well, it is crucial to shuffle the training data before dividing them into segments. GraphLab Create has a utility function for shuffling a given SFrame. We reserve 10% of the data as the test set and shuffle the remainder. (Make sure to use `seed=1` to get consistent answer.)"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"(train_valid, test) = sales.random_split(.9, seed=1)\n",
"train_valid_shuffled = graphlab.toolkits.cross_validation.shuffle(train_valid, random_seed=1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Once the data is shuffled, we divide it into equal segments. Each segment should receive `n/k` elements, where `n` is the number of observations in the training set and `k` is the number of segments. Since the segment 0 starts at index 0 and contains `n/k` elements, it ends at index `(n/k)-1`. The segment 1 starts where the segment 0 left off, at index `(n/k)`. With `n/k` elements, the segment 1 ends at index `(n*2/k)-1`. Continuing in this fashion, we deduce that the segment `i` starts at index `(n*i/k)` and ends at `(n*(i+1)/k)-1`."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"With this pattern in mind, we write a short loop that prints the starting and ending indices of each segment, just to make sure you are getting the splits right."
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0 (0, 1938)\n",
"1 (1939, 3878)\n",
"2 (3879, 5817)\n",
"3 (5818, 7757)\n",
"4 (7758, 9697)\n",
"5 (9698, 11636)\n",
"6 (11637, 13576)\n",
"7 (13577, 15515)\n",
"8 (15516, 17455)\n",
"9 (17456, 19395)\n"
]
}
],
"source": [
"n = len(train_valid_shuffled)\n",
"k = 10 # 10-fold cross-validation\n",
"\n",
"def get_segments(data, k):\n",
" n = len(data)\n",
" for i in xrange(k):\n",
" start = (n*i)/k\n",
" end = (n*(i+1))/k-1\n",
" print i, (start, end)\n",
" # return i, (start, end)\n",
" \n",
"get_segments(train_valid_shuffled, 10)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let us familiarize ourselves with array slicing with SFrame. To extract a continuous slice from an SFrame, use colon in square brackets. For instance, the following cell extracts rows 0 to 9 of `train_valid_shuffled`. Notice that the first index (0) is included in the slice but the last index (10) is omitted."
]
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div style=\"max-height:1000px;max-width:1500px;overflow:auto;\"><table frame=\"box\" rules=\"cols\">\n",
" <tr>\n",
" <th style=\"padding-left: 1em; padding-right: 1em; text-align: center\">id</th>\n",
" <th style=\"padding-left: 1em; padding-right: 1em; text-align: center\">date</th>\n",
" <th style=\"padding-left: 1em; padding-right: 1em; text-align: center\">price</th>\n",
" <th style=\"padding-left: 1em; padding-right: 1em; text-align: center\">bedrooms</th>\n",
" <th style=\"padding-left: 1em; padding-right: 1em; text-align: center\">bathrooms</th>\n",
" <th style=\"padding-left: 1em; padding-right: 1em; text-align: center\">sqft_living</th>\n",
" <th style=\"padding-left: 1em; padding-right: 1em; text-align: center\">sqft_lot</th>\n",
" <th style=\"padding-left: 1em; padding-right: 1em; text-align: center\">floors</th>\n",
" <th style=\"padding-left: 1em; padding-right: 1em; text-align: center\">waterfront</th>\n",
" </tr>\n",
" <tr>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">2780400035</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">2014-05-05 00:00:00+00:00</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">665000.0</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">4.0</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">2.5</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">2800.0</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">5900</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">1</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">0</td>\n",
" </tr>\n",
" <tr>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">1703050500</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">2015-03-21 00:00:00+00:00</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">645000.0</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">3.0</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">2.5</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">2490.0</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">5978</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">2</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">0</td>\n",
" </tr>\n",
" <tr>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">5700002325</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">2014-06-05 00:00:00+00:00</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">640000.0</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">3.0</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">1.75</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">2340.0</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">4206</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">1</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">0</td>\n",
" </tr>\n",
" <tr>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">0475000510</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">2014-11-18 00:00:00+00:00</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">594000.0</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">3.0</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">1.0</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">1320.0</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">5000</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">1</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">0</td>\n",
" </tr>\n",
" <tr>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">0844001052</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">2015-01-28 00:00:00+00:00</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">365000.0</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">4.0</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">2.5</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">1904.0</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">8200</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">2</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">0</td>\n",
" </tr>\n",
" <tr>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">2658000373</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">2015-01-22 00:00:00+00:00</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">305000.0</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">4.0</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">2.0</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">1610.0</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">6250</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">1</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">0</td>\n",
" </tr>\n",
" <tr>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">3750603471</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">2015-03-27 00:00:00+00:00</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">239950.0</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">3.0</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">2.5</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">1560.0</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">4800</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">2</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">0</td>\n",
" </tr>\n",
" <tr>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">2114700540</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">2014-10-21 00:00:00+00:00</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">366000.0</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">3.0</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">2.5</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">1320.0</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">4320</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">1</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">0</td>\n",
" </tr>\n",
" <tr>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">2596400050</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">2014-07-30 00:00:00+00:00</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">375000.0</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">3.0</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">1.0</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">1960.0</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">7955</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">1</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">0</td>\n",
" </tr>\n",
" <tr>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">4140900050</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">2015-01-26 00:00:00+00:00</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">440000.0</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">4.0</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">1.75</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">2180.0</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">10200</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">1</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">0</td>\n",
" </tr>\n",
"</table>\n",
"<table frame=\"box\" rules=\"cols\">\n",
" <tr>\n",
" <th style=\"padding-left: 1em; padding-right: 1em; text-align: center\">view</th>\n",
" <th style=\"padding-left: 1em; padding-right: 1em; text-align: center\">condition</th>\n",
" <th style=\"padding-left: 1em; padding-right: 1em; text-align: center\">grade</th>\n",
" <th style=\"padding-left: 1em; padding-right: 1em; text-align: center\">sqft_above</th>\n",
" <th style=\"padding-left: 1em; padding-right: 1em; text-align: center\">sqft_basement</th>\n",
" <th style=\"padding-left: 1em; padding-right: 1em; text-align: center\">yr_built</th>\n",
" <th style=\"padding-left: 1em; padding-right: 1em; text-align: center\">yr_renovated</th>\n",
" <th style=\"padding-left: 1em; padding-right: 1em; text-align: center\">zipcode</th>\n",
" <th style=\"padding-left: 1em; padding-right: 1em; text-align: center\">lat</th>\n",
" </tr>\n",
" <tr>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">0</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">3</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">8</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">1660</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">1140</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">1963</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">0</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">98115</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">47.68093246</td>\n",
" </tr>\n",
" <tr>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">0</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">3</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">9</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">2490</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">0</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">2003</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">0</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">98074</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">47.62984888</td>\n",
" </tr>\n",
" <tr>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">0</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">5</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">7</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">1170</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">1170</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">1917</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">0</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">98144</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">47.57587004</td>\n",
" </tr>\n",
" <tr>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">0</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">4</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">7</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">1090</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">230</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">1920</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">0</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">98107</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">47.66737217</td>\n",
" </tr>\n",
" <tr>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">0</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">5</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">7</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">1904</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">0</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">1999</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">0</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">98010</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">47.31068733</td>\n",
" </tr>\n",
" <tr>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">0</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">4</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">7</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">1610</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">0</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">1952</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">0</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">98118</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">47.52930128</td>\n",
" </tr>\n",
" <tr>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">0</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">4</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">7</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">1560</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">0</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">1974</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">0</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">98001</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">47.26533057</td>\n",
" </tr>\n",
" <tr>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">0</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">3</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">6</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">660</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">660</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">1918</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">0</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">98106</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">47.53271982</td>\n",
" </tr>\n",
" <tr>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">0</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">4</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">7</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">1260</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">700</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">1963</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">0</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">98177</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">47.76407345</td>\n",
" </tr>\n",
" <tr>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">2</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">3</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">8</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">2000</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">180</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">1966</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">0</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">98028</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">47.76382378</td>\n",
" </tr>\n",
"</table>\n",
"<table frame=\"box\" rules=\"cols\">\n",
" <tr>\n",
" <th style=\"padding-left: 1em; padding-right: 1em; text-align: center\">long</th>\n",
" <th style=\"padding-left: 1em; padding-right: 1em; text-align: center\">sqft_living15</th>\n",
" <th style=\"padding-left: 1em; padding-right: 1em; text-align: center\">sqft_lot15</th>\n",
" </tr>\n",
" <tr>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">-122.28583258</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">2580.0</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">5900.0</td>\n",
" </tr>\n",
" <tr>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">-122.02177564</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">2710.0</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">6629.0</td>\n",
" </tr>\n",
" <tr>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">-122.28796</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">1360.0</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">4725.0</td>\n",
" </tr>\n",
" <tr>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">-122.36472902</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">1700.0</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">5000.0</td>\n",
" </tr>\n",
" <tr>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">-122.0012452</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">1560.0</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">12426.0</td>\n",
" </tr>\n",
" <tr>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">-122.27097145</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">1310.0</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">6000.0</td>\n",
" </tr>\n",
" <tr>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">-122.28506088</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">1510.0</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">12240.0</td>\n",
" </tr>\n",
" <tr>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">-122.34716948</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">1190.0</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">4200.0</td>\n",
" </tr>\n",
" <tr>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">-122.36361517</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">1850.0</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">8219.0</td>\n",
" </tr>\n",
" <tr>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">-122.27022456</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">2590.0</td>\n",
" <td style=\"padding-left: 1em; padding-right: 1em; text-align: center; vertical-align: top\">10445.0</td>\n",
" </tr>\n",
"</table>\n",
"[10 rows x 21 columns]<br/>\n",
"</div>"
],
"text/plain": [
"Columns:\n",
"\tid\tstr\n",
"\tdate\tdatetime\n",
"\tprice\tfloat\n",
"\tbedrooms\tfloat\n",
"\tbathrooms\tfloat\n",
"\tsqft_living\tfloat\n",
"\tsqft_lot\tint\n",
"\tfloors\tstr\n",
"\twaterfront\tint\n",
"\tview\tint\n",
"\tcondition\tint\n",
"\tgrade\tint\n",
"\tsqft_above\tint\n",
"\tsqft_basement\tint\n",
"\tyr_built\tint\n",
"\tyr_renovated\tint\n",
"\tzipcode\tstr\n",
"\tlat\tfloat\n",
"\tlong\tfloat\n",
"\tsqft_living15\tfloat\n",
"\tsqft_lot15\tfloat\n",
"\n",
"Rows: 10\n",
"\n",
"Data:\n",
"+------------+---------------------------+----------+----------+-----------+\n",
"| id | date | price | bedrooms | bathrooms |\n",
"+------------+---------------------------+----------+----------+-----------+\n",
"| 2780400035 | 2014-05-05 00:00:00+00:00 | 665000.0 | 4.0 | 2.5 |\n",
"| 1703050500 | 2015-03-21 00:00:00+00:00 | 645000.0 | 3.0 | 2.5 |\n",
"| 5700002325 | 2014-06-05 00:00:00+00:00 | 640000.0 | 3.0 | 1.75 |\n",
"| 0475000510 | 2014-11-18 00:00:00+00:00 | 594000.0 | 3.0 | 1.0 |\n",
"| 0844001052 | 2015-01-28 00:00:00+00:00 | 365000.0 | 4.0 | 2.5 |\n",
"| 2658000373 | 2015-01-22 00:00:00+00:00 | 305000.0 | 4.0 | 2.0 |\n",
"| 3750603471 | 2015-03-27 00:00:00+00:00 | 239950.0 | 3.0 | 2.5 |\n",
"| 2114700540 | 2014-10-21 00:00:00+00:00 | 366000.0 | 3.0 | 2.5 |\n",
"| 2596400050 | 2014-07-30 00:00:00+00:00 | 375000.0 | 3.0 | 1.0 |\n",
"| 4140900050 | 2015-01-26 00:00:00+00:00 | 440000.0 | 4.0 | 1.75 |\n",
"+------------+---------------------------+----------+----------+-----------+\n",
"+-------------+----------+--------+------------+------+-----------+-------+------------+\n",
"| sqft_living | sqft_lot | floors | waterfront | view | condition | grade | sqft_above |\n",
"+-------------+----------+--------+------------+------+-----------+-------+------------+\n",
"| 2800.0 | 5900 | 1 | 0 | 0 | 3 | 8 | 1660 |\n",
"| 2490.0 | 5978 | 2 | 0 | 0 | 3 | 9 | 2490 |\n",
"| 2340.0 | 4206 | 1 | 0 | 0 | 5 | 7 | 1170 |\n",
"| 1320.0 | 5000 | 1 | 0 | 0 | 4 | 7 | 1090 |\n",
"| 1904.0 | 8200 | 2 | 0 | 0 | 5 | 7 | 1904 |\n",
"| 1610.0 | 6250 | 1 | 0 | 0 | 4 | 7 | 1610 |\n",
"| 1560.0 | 4800 | 2 | 0 | 0 | 4 | 7 | 1560 |\n",
"| 1320.0 | 4320 | 1 | 0 | 0 | 3 | 6 | 660 |\n",
"| 1960.0 | 7955 | 1 | 0 | 0 | 4 | 7 | 1260 |\n",
"| 2180.0 | 10200 | 1 | 0 | 2 | 3 | 8 | 2000 |\n",
"+-------------+----------+--------+------------+------+-----------+-------+------------+\n",
"+---------------+----------+--------------+---------+-------------+\n",
"| sqft_basement | yr_built | yr_renovated | zipcode | lat |\n",
"+---------------+----------+--------------+---------+-------------+\n",
"| 1140 | 1963 | 0 | 98115 | 47.68093246 |\n",
"| 0 | 2003 | 0 | 98074 | 47.62984888 |\n",
"| 1170 | 1917 | 0 | 98144 | 47.57587004 |\n",
"| 230 | 1920 | 0 | 98107 | 47.66737217 |\n",
"| 0 | 1999 | 0 | 98010 | 47.31068733 |\n",
"| 0 | 1952 | 0 | 98118 | 47.52930128 |\n",
"| 0 | 1974 | 0 | 98001 | 47.26533057 |\n",
"| 660 | 1918 | 0 | 98106 | 47.53271982 |\n",
"| 700 | 1963 | 0 | 98177 | 47.76407345 |\n",
"| 180 | 1966 | 0 | 98028 | 47.76382378 |\n",
"+---------------+----------+--------------+---------+-------------+\n",
"+---------------+---------------+-----+\n",
"| long | sqft_living15 | ... |\n",
"+---------------+---------------+-----+\n",
"| -122.28583258 | 2580.0 | ... |\n",
"| -122.02177564 | 2710.0 | ... |\n",
"| -122.28796 | 1360.0 | ... |\n",
"| -122.36472902 | 1700.0 | ... |\n",
"| -122.0012452 | 1560.0 | ... |\n",
"| -122.27097145 | 1310.0 | ... |\n",
"| -122.28506088 | 1510.0 | ... |\n",
"| -122.34716948 | 1190.0 | ... |\n",
"| -122.36361517 | 1850.0 | ... |\n",
"| -122.27022456 | 2590.0 | ... |\n",
"+---------------+---------------+-----+\n",
"[10 rows x 21 columns]"
]
},
"execution_count": 52,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"train_valid_shuffled[0:10] # rows 0 to 9"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now let us extract individual segments with array slicing. Consider the scenario where we group the houses in the `train_valid_shuffled` dataframe into k=10 segments of roughly equal size, with starting and ending indices computed as above.\n",
"Extract the fourth segment (segment 3) and assign it to a variable called `validation4`."
]
},
{
"cell_type": "code",
"execution_count": 53,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"validation4 = train_valid_shuffled[5818:7757]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"To verify that we have the right elements extracted, run the following cell, which computes the average price of the fourth segment. When rounded to nearest whole number, the average should be $536,234."
]
},
{
"cell_type": "code",
"execution_count": 54,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"536353\n"
]
}
],
"source": [
"#### Why isn't this value lining up with the above? \n",
"\n",
"print int(round(validation4['price'].mean(), 0))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"After designating one of the k segments as the validation set, we train a model using the rest of the data. To choose the remainder, we slice (0:start) and (end+1:n) of the data and paste them together. SFrame has `append()` method that pastes together two disjoint sets of rows originating from a common dataset. For instance, the following cell pastes together the first and last two rows of the `train_valid_shuffled` dataframe."
]
},
{
"cell_type": "code",
"execution_count": 55,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"+------------+---------------------------+-----------+----------+-----------+\n",
"| id | date | price | bedrooms | bathrooms |\n",
"+------------+---------------------------+-----------+----------+-----------+\n",
"| 2780400035 | 2014-05-05 00:00:00+00:00 | 665000.0 | 4.0 | 2.5 |\n",
"| 1703050500 | 2015-03-21 00:00:00+00:00 | 645000.0 | 3.0 | 2.5 |\n",
"| 4139480190 | 2014-09-16 00:00:00+00:00 | 1153000.0 | 3.0 | 3.25 |\n",
"| 7237300290 | 2015-03-26 00:00:00+00:00 | 338000.0 | 5.0 | 2.5 |\n",
"+------------+---------------------------+-----------+----------+-----------+\n",
"+-------------+----------+--------+------------+------+-----------+-------+------------+\n",
"| sqft_living | sqft_lot | floors | waterfront | view | condition | grade | sqft_above |\n",
"+-------------+----------+--------+------------+------+-----------+-------+------------+\n",
"| 2800.0 | 5900 | 1 | 0 | 0 | 3 | 8 | 1660 |\n",
"| 2490.0 | 5978 | 2 | 0 | 0 | 3 | 9 | 2490 |\n",
"| 3780.0 | 10623 | 1 | 0 | 1 | 3 | 11 | 2650 |\n",
"| 2400.0 | 4496 | 2 | 0 | 0 | 3 | 7 | 2400 |\n",
"+-------------+----------+--------+------------+------+-----------+-------+------------+\n",
"+---------------+----------+--------------+---------+-------------+\n",
"| sqft_basement | yr_built | yr_renovated | zipcode | lat |\n",
"+---------------+----------+--------------+---------+-------------+\n",
"| 1140 | 1963 | 0 | 98115 | 47.68093246 |\n",
"| 0 | 2003 | 0 | 98074 | 47.62984888 |\n",
"| 1130 | 1999 | 0 | 98006 | 47.55061236 |\n",
"| 0 | 2004 | 0 | 98042 | 47.36923712 |\n",
"+---------------+----------+--------------+---------+-------------+\n",
"+---------------+---------------+-----+\n",
"| long | sqft_living15 | ... |\n",
"+---------------+---------------+-----+\n",
"| -122.28583258 | 2580.0 | ... |\n",
"| -122.02177564 | 2710.0 | ... |\n",
"| -122.10144844 | 3850.0 | ... |\n",
"| -122.12606473 | 1880.0 | ... |\n",
"+---------------+---------------+-----+\n",
"[4 rows x 21 columns]\n",
"\n"
]
}
],
"source": [
"n = len(train_valid_shuffled)\n",
"first_two = train_valid_shuffled[0:2]\n",
"last_two = train_valid_shuffled[n-2:n]\n",
"print first_two.append(last_two)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Extract the remainder of the data after *excluding* fourth segment (segment 3) and assign the subset to `train4`."
]
},
{
"cell_type": "code",
"execution_count": 56,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"train4=train_valid_shuffled[0:5818].append(train_valid_shuffled[7758:19396])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"To verify that we have the right elements extracted, run the following cell, which computes the average price of the data with fourth segment excluded. When rounded to nearest whole number, the average should be $539,450."
]
},
{
"cell_type": "code",
"execution_count": 57,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"539450\n"
]
}
],
"source": [
"print int(round(train4['price'].mean(), 0))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now we are ready to implement k-fold cross-validation. Write a function that computes k validation errors by designating each of the k segments as the validation set. It accepts as parameters (i) `k`, (ii) `l2_penalty`, (iii) dataframe, (iv) name of output column (e.g. `price`) and (v) list of feature names. The function returns the average validation error using k segments as validation sets.\n",
"\n",
"* For each i in [0, 1, ..., k-1]:\n",
" * Compute starting and ending indices of segment i and call 'start' and 'end'\n",
" * Form validation set by taking a slice (start:end+1) from the data.\n",
" * Form training set by appending slice (end+1:n) to the end of slice (0:start).\n",
" * Train a linear model using training set just formed, with a given l2_penalty\n",
" * Compute validation error using validation set just formed"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def get_RSS(prediction, output):\n",
" residual = output - prediction\n",
" # square the residuals and add them up\n",
" RS = residual*residual\n",
" RSS = RS.sum()\n",
" return(RSS)\n",
"\n",
"def k_fold_cross_validation(k, l2_penalty, data, features_list):\n",
" n = len(data)\n",
" RSS = 0\n",
" for i in xrange(k):\n",
" start = (n*i)/k\n",
" end = (n*(i+1))/k-1\n",
" validation=data[start:end+1]\n",
" train=data[0:start].append(data[end+1:n])\n",
" model = graphlab.linear_regression.create(train, target='price', features = features_list, l2_penalty=l2_penalty,validation_set=None,verbose = False)\n",
" predictions=model.predict(validation)\n",
" A =get_RSS(predictions,validation['price'])\n",
" RSS = RSS + A\n",
" \n",
" Val_err = RSS/k\n",
" return Val_err"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Once we have a function to compute the average validation error for a model, we can write a loop to find the model that minimizes the average validation error. Write a loop that does the following:\n",
"* We will again be aiming to fit a 15th-order polynomial model using the `sqft_living` input\n",
"* For `l2_penalty` in [10^1, 10^1.5, 10^2, 10^2.5, ..., 10^7] (to get this in Python, you can use this Numpy function: `np.logspace(1, 7, num=13)`.)\n",
" * Run 10-fold cross-validation with `l2_penalty`\n",
"* Report which L2 penalty produced the lowest average validation error.\n",
"\n",
"Note: since the degree of the polynomial is now fixed to 15, to make things faster, you should generate polynomial features in advance and re-use them throughout the loop. Make sure to use `train_valid_shuffled` when generating polynomial features!"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" val_errs penalties\n",
"0 3.258313e+14 1.000000e+01\n",
"1 1.911928e+14 3.162278e+01\n",
"2 1.063884e+14 1.000000e+02\n",
"3 8.092771e+13 3.162278e+02\n",
"4 8.128663e+13 1.000000e+03\n",
"5 8.261466e+13 3.162278e+03\n",
"6 9.071015e+13 1.000000e+04\n",
"7 1.134137e+14 3.162278e+04\n",
"8 1.522393e+14 1.000000e+05\n",
"9 1.688055e+14 3.162278e+05\n",
"10 1.724966e+14 1.000000e+06\n",
"11 1.751939e+14 3.162278e+06\n",
"12 1.765843e+14 1.000000e+07\n"
]
}
],
"source": [
"import numpy as np\n",
"import pandas as pd\n",
"poly_data = polynomial_sframe(train_valid_shuffled['sqft_living'], 15)\n",
"my_features = poly_data.column_names()\n",
"poly_data['price'] = train_valid_shuffled['price']\n",
"stuff = []\n",
"columns = ['val_errs','penalties']\n",
"#pd.DataFrame(columns = [['val_err','penalty']])\n",
"for l2_penalty in np.logspace(1, 7, num=13):\n",
" val_err = k_fold_cross_validation(15, l2_penalty, poly_data, my_features)\n",
" # results.append([l2_penalty, Val_err])\n",
" # val_errs.append(val_err)\n",
" # penalties.append(l2_penalty)\n",
" row = [val_err, l2_penalty]\n",
" stuff.append(row)\n",
"results = pd.DataFrame(stuff, columns=columns)\n",
"print results"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"max_err = results['val_errs'].max()\n",
"min_err = results['val_errs'].min()\n",
"results.loc[results['val_errs'] == min_err]"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>val_errs</th>\n",
" <th>penalties</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>8.092771e+13</td>\n",
" <td>316.227766</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" val_errs penalties\n",
"3 8.092771e+13 316.227766"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"***QUIZ QUESTIONS: What is the best value for the L2 penalty according to 10-fold validation?***"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"You may find it useful to plot the k-fold cross-validation errors you have obtained to better understand the behavior of the method. "
]
},
{
"cell_type": "code",
"execution_count": 106,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.text.Text at 0x11e3c3ed0>"
]
},
"execution_count": 106,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYkAAAEVCAYAAAAVeRmFAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAF0dJREFUeJzt3X2QZXV95/H3ZxhmiDiOhSjl8uQDsIgRR1AYoru0RoWB\nBDeGDYqayJotyqf4sEk0li6TilmNlXIRNbKzGldWXVmJ5apIhFIaFgOsAUYGhYguYRAWFBDkmQG+\n+8c9w7Qzfbpv9/Q9997u96vq1Jx7z++e851T3ffTv995SlUhSdJ0lg27AEnS6DIkJEmtDAlJUitD\nQpLUypCQJLUyJCRJrcYuJJJ8JsltSa7uo+2/SnJFki1JXj3N8lVJbkpyxmCqlaTxNnYhAXwWOKbP\ntjcCfwB8oWX5XwAXLURRkrQYjV1IVNUlwC+mvpfkWUnOS/K9JBclOahpu7mqrgF2uGIwyeHA04Dz\nu6hbksbR2IVEiw3A26rqRcCfAJ+aqXGSAH8N/DGQwZcnSeNp+bAL2FlJdgd+A/hy8+UPsOssH3sL\ncG5V3dJ8xKCQpGmMfUjQ6w39oqoOm8NnjgJekuQtwCpg1yT3VNX7BlKhJI2pgQ83JVmZ5PIkVyXZ\nlOS0adocneSuJFc20/tnW20zUVX3ADckOXHK+g5t+QzNZ15fVc+oqmfRG3I6y4CQpB0NPCSq6iHg\npVX1AmANsC7JEdM0vbiqDmumD7atL8kXgX8ADkqyOckpwOuANyXZmOQa4ISm7QuT3AScCJyZZNMC\n//ckaVHrZLipqu5vZlc225zu/uR9HReoqpNbFq2bpu0/AvvOsr7PAZ/rZ9uStNR0cnZTkmVJrgJu\nBS6oqu9N0+yopidwbpJDuqhLkjSzTkKiqh5rhpv2AY6cJgSuAParqjXAJ4CvdlGXJGlm6frJdEk+\nANxXVR+doc0NwOFVded27/sYPUmah6qa16n+XZzdtGeS1c38rwGvAK7brs1eU+aPoBdevxIQW1WV\nUxWnnXba0GsYlcl94b5wX8w87YwuDlw/HfhckmX0QunsqvpmklOBqqoNwIlJ3gxsAR4ATuqgLknS\nLAYeElW1CdjhQreq+i9T5j8JfHLQtUiS5max3LtpyZmYmBh2CSPDfbGN+2Ib98XC6PzA9c5IUuNU\nrySNgiTUqB64liSNL0NCktTKkJAktTIkJEmtDAlJUitDQpLUypCQJLUyJCRJrQwJSVIrQ0KS1MqQ\nkCS1MiQkSa0MCUlSK0NCktTKkJAktTIkJEmtDAlJUitDQpLUypCQJLUyJCRJrQwJSVIrQ0KS1MqQ\nkCS1MiQkSa0MCUlSK0NCktRq4CGRZGWSy5NclWRTktNa2p2R5PokG5OsGXRdkqTZLR/0BqrqoSQv\nrar7k+wCfDfJeVX1f7a2SbIOeHZVHZjkSOBMYO2ga5MkzayT4aaqur+ZXUkvmGq7Jq8CzmraXg6s\nTrJXF7VJktp1EhJJliW5CrgVuKCqvrddk72Bm6a8vrl5T5I0RF31JB6rqhcA+wBHJjmki+1KknbO\nwI9JTFVVv0xyIXAs8MMpi24G9p3yep/mvR2sX7/+8fmJiQkmJiYWvE5JGmeTk5NMTk4uyLpStf3h\ngYWVZE9gS1XdneTXgG8BH66qb05pcxzw1qo6Psla4PSq2uHAdZIadL2StNgkoaoyn8920ZN4OvC5\nJMvoDW+dXVXfTHIqUFW1oXl9XJIfA/cBp3RQlyRpFgPvSSwkexKSNHc705PwimtJUitDQpLUypCQ\nJLUyJCRJrQwJSVIrQ0KS1MqQkCS1MiQkSa0MCUlSK0NCktTKkJAktTIkJEmtDAlJUitDQpLUypCQ\nJLUyJCRJrQwJSVIrQ0KS1MqQkCS1MiQkSa0MCUlSK0NCktTKkJAktTIkJEmtDAlJUitDQpLUypCQ\nJLUyJCRJrQwJSVKrgYdEkn2SfCfJD5JsSvJH07Q5OsldSa5spvcPui5J0uyWd7CNR4B3V9XGJE8E\nrkhyflVdt127i6vqhA7qkST1aeA9iaq6tao2NvP3AtcCe0/TNIOuRZI0N50ek0jyDGANcPk0i49K\nsjHJuUkO6bIuSdL0uhhuAqAZajoHeEfTo5jqCmC/qro/yTrgq8BB061n/fr1j89PTEwwMTExkHol\naVxNTk4yOTm5IOtKVS3IimbcSLIc+AZwXlV9rI/2NwCHV9Wd271fXdQrSYtJEqpqXkP6XQ03/S3w\nw7aASLLXlPkj6IXXndO1lSR1Z+DDTUleDLwO2JTkKqCA9wH7A1VVG4ATk7wZ2AI8AJw06LokSbPr\nZLhpoTjcJElzNw7DTZKkMWRISJJaGRKSpFaGhCSplSEhSWplSEiSWhkSkqRWhoQkqZUhIUlqZUhI\nkloZEpKkVoaEJKmVISFJamVISJJaGRKSpFaGhCSpVV8hkeQjSZ6UZNck307y8ySvH3RxkqTh6rcn\n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\nAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x120d593d0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Plot the l2_penalty values in the x axis and the cross-validation error in the y axis.\n",
"# Using plt.xscale('log') will make your plot more intuitive.\n",
"plt.plot(results['penalties'],results['val_errs'])\n",
"plt.xlabel('penalties')\n",
"plt.ylabel('val_errs')\n",
"#plt.set(xlim=[0,2],ylim=[1,2])\n",
"#plt.set_xlim(0,2)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Once you found the best value for the L2 penalty using cross-validation, it is important to retrain a final model on all of the training data using this value of `l2_penalty`. This way, your final model will be trained on the entire dataset."
]
},
{
"cell_type": "code",
"execution_count": 60,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1.21192264451e+14\n"
]
}
],
"source": [
"poly1_data = polynomial_sframe(train_valid_shuffled['sqft_living'], 15) # use equivalent of `polynomial_sframe`\n",
"my_features = poly1_data.column_names() \n",
"poly1_data['price'] = train_valid_shuffled['price']\n",
"model1 = graphlab.linear_regression.create(poly1_data, target = 'price', features = my_features, verbose = False, validation_set = None, l2_penalty=1000)\n",
"Val_err = k_fold_cross_validation(10, 1000, poly1_data, my_features)\n",
"print Val_err"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"***QUIZ QUESTION: Using the best L2 penalty found above, train a model using all training data. What is the RSS on the TEST data of the model you learn with this L2 penalty? ***"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.11"
}
},
"nbformat": 4,
"nbformat_minor": 1
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.