{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.5"
},
"colab": {
"name": "Week6_1_python.ipynb",
"provenance": [],
"collapsed_sections": []
}
},
"cells": [
{
"cell_type": "code",
"metadata": {
"id": "oqNZ8FFe_PD1"
},
"source": [
"import numpy as np\n",
"import scipy.linalg\n",
"import matplotlib.pyplot as plt\n",
"import pandas as pd"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "Z4WPxC3D_PEK"
},
"source": [
"## Polyfit and polyval\n",
"The procedure we just outlined for finding a best fit line is so common that python has a predefined command for it. Instead of finding the derivatives of $\\mathcal{E}$ and setting them to zero, then creating the corresponding linear system and solving it with `solve`, you can just use the numpy function `polyfit`. This command takes three inputs: An array of $x$ data, an array of $y$ data and a degree. The $x$ and $y$ arrays are just our original data set. We will talk more about the degree in the next lecture, but to find a best fit line we should just use 1 for the order. We can therefore try "
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"resources": {
"http://localhost:8080/nbextensions/google.colab/files.js": {
"data": "Ly8gQ29weXJpZ2h0IDIwMTcgR29vZ2xlIExMQwovLwovLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgovLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLy8KLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLy8KLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQovLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAovLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAovLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KCi8qKgogKiBAZmlsZW92ZXJ2aWV3IEhlbHBlcnMgZm9yIGdvb2dsZS5jb2xhYiBQeXRob24gbW9kdWxlLgogKi8KKGZ1bmN0aW9uKHNjb3BlKSB7CmZ1bmN0aW9uIHNwYW4odGV4dCwgc3R5bGVBdHRyaWJ1dGVzID0ge30pIHsKICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpOwogIGVsZW1lbnQudGV4dENvbnRlbnQgPSB0ZXh0OwogIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHN0eWxlQXR0cmlidXRlcykpIHsKICAgIGVsZW1lbnQuc3R5bGVba2V5XSA9IHN0eWxlQXR0cmlidXRlc1trZXldOwogIH0KICByZXR1cm4gZWxlbWVudDsKfQoKLy8gTWF4IG51bWJlciBvZiBieXRlcyB3aGljaCB3aWxsIGJlIHVwbG9hZGVkIGF0IGEgdGltZS4KY29uc3QgTUFYX1BBWUxPQURfU0laRSA9IDEwMCAqIDEwMjQ7CgpmdW5jdGlvbiBfdXBsb2FkRmlsZXMoaW5wdXRJZCwgb3V0cHV0SWQpIHsKICBjb25zdCBzdGVwcyA9IHVwbG9hZEZpbGVzU3RlcChpbnB1dElkLCBvdXRwdXRJZCk7CiAgY29uc3Qgb3V0cHV0RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG91dHB1dElkKTsKICAvLyBDYWNoZSBzdGVwcyBvbiB0aGUgb3V0cHV0RWxlbWVudCB0byBtYWtlIGl0IGF2YWlsYWJsZSBmb3IgdGhlIG5leHQgY2FsbAogIC8vIHRvIHVwbG9hZEZpbGVzQ29udGludWUgZnJvbSBQeXRob24uCiAgb3V0cHV0RWxlbWVudC5zdGVwcyA9IHN0ZXBzOwoKICByZXR1cm4gX3VwbG9hZEZpbGVzQ29udGludWUob3V0cHV0SWQpOwp9CgovLyBUaGlzIGlzIHJvdWdobHkgYW4gYXN5bmMgZ2VuZXJhdG9yIChub3Qgc3VwcG9ydGVkIGluIHRoZSBicm93c2VyIHlldCksCi8vIHdoZXJlIHRoZXJlIGFyZSBtdWx0aXBsZSBhc3luY2hyb25vdXMgc3RlcHMgYW5kIHRoZSBQeXRob24gc2lkZSBpcyBnb2luZwovLyB0byBwb2xsIGZvciBjb21wbGV0aW9uIG9mIGVhY2ggc3RlcC4KLy8gVGhpcyB1c2VzIGEgUHJvbWlzZSB0byBibG9jayB0aGUgcHl0aG9uIHNpZGUgb24gY29tcGxldGlvbiBvZiBlYWNoIHN0ZXAsCi8vIHRoZW4gcGFzc2VzIHRoZSByZXN1bHQgb2YgdGhlIHByZXZpb3VzIHN0ZXAgYXMgdGhlIGlucHV0IHRvIHRoZSBuZXh0IHN0ZXAuCmZ1bmN0aW9uIF91cGxvYWRGaWxlc0NvbnRpbnVlKG91dHB1dElkKSB7CiAgY29uc3Qgb3V0cHV0RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG91dHB1dElkKTsKICBjb25zdCBzdGVwcyA9IG91dHB1dEVsZW1lbnQuc3RlcHM7CgogIGNvbnN0IG5leHQgPSBzdGVwcy5uZXh0KG91dHB1dEVsZW1lbnQubGFzdFByb21pc2VWYWx1ZSk7CiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXh0LnZhbHVlLnByb21pc2UpLnRoZW4oKHZhbHVlKSA9PiB7CiAgICAvLyBDYWNoZSB0aGUgbGFzdCBwcm9taXNlIHZhbHVlIHRvIG1ha2UgaXQgYXZhaWxhYmxlIHRvIHRoZSBuZXh0CiAgICAvLyBzdGVwIG9mIHRoZSBnZW5lcmF0b3IuCiAgICBvdXRwdXRFbGVtZW50Lmxhc3RQcm9taXNlVmFsdWUgPSB2YWx1ZTsKICAgIHJldHVybiBuZXh0LnZhbHVlLnJlc3BvbnNlOwogIH0pOwp9CgovKioKICogR2VuZXJhdG9yIGZ1bmN0aW9uIHdoaWNoIGlzIGNhbGxlZCBiZXR3ZWVuIGVhY2ggYXN5bmMgc3RlcCBvZiB0aGUgdXBsb2FkCiAqIHByb2Nlc3MuCiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dElkIEVsZW1lbnQgSUQgb2YgdGhlIGlucHV0IGZpbGUgcGlja2VyIGVsZW1lbnQuCiAqIEBwYXJhbSB7c3RyaW5nfSBvdXRwdXRJZCBFbGVtZW50IElEIG9mIHRoZSBvdXRwdXQgZGlzcGxheS4KICogQHJldHVybiB7IUl0ZXJhYmxlPCFPYmplY3Q+fSBJdGVyYWJsZSBvZiBuZXh0IHN0ZXBzLgogKi8KZnVuY3Rpb24qIHVwbG9hZEZpbGVzU3RlcChpbnB1dElkLCBvdXRwdXRJZCkgewogIGNvbnN0IGlucHV0RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlucHV0SWQpOwogIGlucHV0RWxlbWVudC5kaXNhYmxlZCA9IGZhbHNlOwoKICBjb25zdCBvdXRwdXRFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQob3V0cHV0SWQpOwogIG91dHB1dEVsZW1lbnQuaW5uZXJIVE1MID0gJyc7CgogIGNvbnN0IHBpY2tlZFByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gewogICAgaW5wdXRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIChlKSA9PiB7CiAgICAgIHJlc29sdmUoZS50YXJnZXQuZmlsZXMpOwogICAgfSk7CiAgfSk7CgogIGNvbnN0IGNhbmNlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpOwogIGlucHV0RWxlbWVudC5wYXJlbnRFbGVtZW50LmFwcGVuZENoaWxkKGNhbmNlbCk7CiAgY2FuY2VsLnRleHRDb250ZW50ID0gJ0NhbmNlbCB1cGxvYWQnOwogIGNvbnN0IGNhbmNlbFByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gewogICAgY2FuY2VsLm9uY2xpY2sgPSAoKSA9PiB7CiAgICAgIHJlc29sdmUobnVsbCk7CiAgICB9OwogIH0pOwoKICAvLyBXYWl0IGZvciB0aGUgdXNlciB0byBwaWNrIHRoZSBmaWxlcy4KICBjb25zdCBmaWxlcyA9IHlpZWxkIHsKICAgIHByb21pc2U6IFByb21pc2UucmFjZShbcGlja2VkUHJvbWlzZSwgY2FuY2VsUHJvbWlzZV0pLAogICAgcmVzcG9uc2U6IHsKICAgICAgYWN0aW9uOiAnc3RhcnRpbmcnLAogICAgfQogIH07CgogIGNhbmNlbC5yZW1vdmUoKTsKCiAgLy8gRGlzYWJsZSB0aGUgaW5wdXQgZWxlbWVudCBzaW5jZSBmdXJ0aGVyIHBpY2tzIGFyZSBub3QgYWxsb3dlZC4KICBpbnB1dEVsZW1lbnQuZGlzYWJsZWQgPSB0cnVlOwoKICBpZiAoIWZpbGVzKSB7CiAgICByZXR1cm4gewogICAgICByZXNwb25zZTogewogICAgICAgIGFjdGlvbjogJ2NvbXBsZXRlJywKICAgICAgfQogICAgfTsKICB9CgogIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykgewogICAgY29uc3QgbGkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaScpOwogICAgbGkuYXBwZW5kKHNwYW4oZmlsZS5uYW1lLCB7Zm9udFdlaWdodDogJ2JvbGQnfSkpOwogICAgbGkuYXBwZW5kKHNwYW4oCiAgICAgICAgYCgke2ZpbGUudHlwZSB8fCAnbi9hJ30pIC0gJHtmaWxlLnNpemV9IGJ5dGVzLCBgICsKICAgICAgICBgbGFzdCBtb2RpZmllZDogJHsKICAgICAgICAgICAgZmlsZS5sYXN0TW9kaWZpZWREYXRlID8gZmlsZS5sYXN0TW9kaWZpZWREYXRlLnRvTG9jYWxlRGF0ZVN0cmluZygpIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ24vYSd9IC0gYCkpOwogICAgY29uc3QgcGVyY2VudCA9IHNwYW4oJzAlIGRvbmUnKTsKICAgIGxpLmFwcGVuZENoaWxkKHBlcmNlbnQpOwoKICAgIG91dHB1dEVsZW1lbnQuYXBwZW5kQ2hpbGQobGkpOwoKICAgIGNvbnN0IGZpbGVEYXRhUHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7CiAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7CiAgICAgIHJlYWRlci5vbmxvYWQgPSAoZSkgPT4gewogICAgICAgIHJlc29sdmUoZS50YXJnZXQucmVzdWx0KTsKICAgICAgfTsKICAgICAgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKGZpbGUpOwogICAgfSk7CiAgICAvLyBXYWl0IGZvciB0aGUgZGF0YSB0byBiZSByZWFkeS4KICAgIGxldCBmaWxlRGF0YSA9IHlpZWxkIHsKICAgICAgcHJvbWlzZTogZmlsZURhdGFQcm9taXNlLAogICAgICByZXNwb25zZTogewogICAgICAgIGFjdGlvbjogJ2NvbnRpbnVlJywKICAgICAgfQogICAgfTsKCiAgICAvLyBVc2UgYSBjaHVua2VkIHNlbmRpbmcgdG8gYXZvaWQgbWVzc2FnZSBzaXplIGxpbWl0cy4gU2VlIGIvNjIxMTU2NjAuCiAgICBsZXQgcG9zaXRpb24gPSAwOwogICAgd2hpbGUgKHBvc2l0aW9uIDwgZmlsZURhdGEuYnl0ZUxlbmd0aCkgewogICAgICBjb25zdCBsZW5ndGggPSBNYXRoLm1pbihmaWxlRGF0YS5ieXRlTGVuZ3RoIC0gcG9zaXRpb24sIE1BWF9QQVlMT0FEX1NJWkUpOwogICAgICBjb25zdCBjaHVuayA9IG5ldyBVaW50OEFycmF5KGZpbGVEYXRhLCBwb3NpdGlvbiwgbGVuZ3RoKTsKICAgICAgcG9zaXRpb24gKz0gbGVuZ3RoOwoKICAgICAgY29uc3QgYmFzZTY0ID0gYnRvYShTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIGNodW5rKSk7CiAgICAgIHlpZWxkIHsKICAgICAgICByZXNwb25zZTogewogICAgICAgICAgYWN0aW9uOiAnYXBwZW5kJywKICAgICAgICAgIGZpbGU6IGZpbGUubmFtZSwKICAgICAgICAgIGRhdGE6IGJhc2U2NCwKICAgICAgICB9LAogICAgICB9OwogICAgICBwZXJjZW50LnRleHRDb250ZW50ID0KICAgICAgICAgIGAke01hdGgucm91bmQoKHBvc2l0aW9uIC8gZmlsZURhdGEuYnl0ZUxlbmd0aCkgKiAxMDApfSUgZG9uZWA7CiAgICB9CiAgfQoKICAvLyBBbGwgZG9uZS4KICB5aWVsZCB7CiAgICByZXNwb25zZTogewogICAgICBhY3Rpb246ICdjb21wbGV0ZScsCiAgICB9CiAgfTsKfQoKc2NvcGUuZ29vZ2xlID0gc2NvcGUuZ29vZ2xlIHx8IHt9OwpzY29wZS5nb29nbGUuY29sYWIgPSBzY29wZS5nb29nbGUuY29sYWIgfHwge307CnNjb3BlLmdvb2dsZS5jb2xhYi5fZmlsZXMgPSB7CiAgX3VwbG9hZEZpbGVzLAogIF91cGxvYWRGaWxlc0NvbnRpbnVlLAp9Owp9KShzZWxmKTsK",
"ok": true,
"headers": [
[
"content-type",
"application/javascript"
]
],
"status": 200,
"status_text": ""
}
},
"base_uri": "https://localhost:8080/",
"height": 72
},
"id": "KZ3POkDbYjJI",
"outputId": "dd825583-2c05-408e-f714-adae120280d1"
},
"source": [
"from google.colab import files\n",
"uploaded = files.upload()"
],
"execution_count": null,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/html": [
"\n",
" \n",
" \n",
" Upload widget is only available when the cell has been executed in the\n",
" current browser session. Please rerun this cell to enable.\n",
" \n",
" "
],
"text/plain": [
""
]
},
"metadata": {
"tags": []
}
},
{
"output_type": "stream",
"text": [
"Saving Week6_data1.csv to Week6_data1 (1).csv\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "A_IDK2-DKTA1"
},
"source": [
"df1 = pd.read_csv('Week6_data1.csv')"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 282
},
"id": "sLMFNQDl_PEK",
"outputId": "e4e54dcf-4bdf-4001-d071-991c5e87ee72"
},
"source": [
"data = np.genfromtxt('Week6_data1.csv', delimiter=',')\n",
"x = data[0, :]\n",
"y = data[1, :]\n",
"plt.plot(x, y, 'ko')"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"[]"
]
},
"metadata": {
"tags": []
},
"execution_count": 83
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "MqrIVg8JWHQN",
"outputId": "ac1fe060-a922-4c93-fa7b-941361a7e159"
},
"source": [
"coeffs = np.polyfit(x, y, 1)\n",
"print(coeffs)"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"[2.01506007 1.00376907]\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "roYvxnAV_PEM"
},
"source": [
"This gives us exactly the same values as before, albeit in a 1D array instead of a column vector. \n",
"\n",
"If we want to graph this best fit line, we can take advantage of another useful numpy function called `polyval`. This function takes the coefficients of a polynomial (remember, a line is a 1st degree polynomial) and a 1D array of $x$ values and then returns a corresponding array of $y$ values. We could therefore plot this line with the following code: "
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 299
},
"id": "M2vZKSzW_PEN",
"outputId": "14d59dd3-a2a5-48c1-a155-c9d1dc0b4d1e"
},
"source": [
"xplot = np.linspace(0, 2, 1000)\n",
"yplot = np.polyval(coeffs, xplot)\n",
"plt.plot(xplot, yplot, x, y, 'ko')"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"[,\n",
" ]"
]
},
"metadata": {
"tags": []
},
"execution_count": 85
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "vLK9EZ4j_PEN"
},
"source": [
"The `polyval` function saves a little bit of typing here and also means that you don't have to remember which order the coefficients from `polyfit` come in. The `polyval` function also significantly reduces rounding error when plugging values into higher order polynomials, so it is *always* better to use `polyval` than to type out the equation `coeffs[0] * xplot + coeffs[1]` directly. "
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "osNIshkhItiC"
},
"source": [
"# Nonlinear Curve Fitting\n",
"In the last lecture, we talked about how to find the best fit line through a set of data points, either by hand or with the numpy function `polyfit`. The process that we outlined there can easily be extended to other formulas. In general, if you have a formula $y = f(x)$ that you think fits your data, the RMS error for this fit is defined as \n",
"\n",
"$E = \\sqrt{\\frac{1}{n}\\displaystyle\\sum_{k=1}^{n}(f(x_k) - y_k)^2}$. \n",
"\n",
"If $f$ has parameters (such as the $m$ and $b$ from our linear equation) then we can minimize $E$ by taking its derivative with respect to each parameter and setting them equal to zero. \n",
"\n",
"Unfortunately, the resulting system of equations is not usually linear and will often be impossible to solve by hand. It turns out that if $f$ is an $n$th degree polynomial (such as $f(x) = ax^2 + bx + c$ or $f(x) = ax^3 + bx^2 + cx + d$) then we get an $(n+1)\\times (n+1)$ linear system of equations, which we could solve with `scipy.optimize.solve` just like before. For most other functions $f$, the resulting system will be nonlinear and we will have to resort to some other method. This means that we will almost always resort to python functions to find best fit curves. For some special types of best fit functions, there are pre-defined python functions that will find best fit curves for us. For other curves, we can use `scipy.optimize.minimize` to minimize the RMS error directly. In any case, the curve we find that minimizes the RMS error will be called the *best fit curve* for our data set. Remember that our definition of \"best\" depends both on the choice of error function (we will always choose RMS error unless I specify otherwise, but other versions are possible) and on the choice of function. That is, the best fit line and the best fit quadratic are not really being measured on the same scale. We will talk more about the ramifications of this issue in the next section. "
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "pPKI3kmfItiE"
},
"source": [
"## Higher order polynomial fits and overfitting\n",
"The `polyfit` function doesn't just find linear fits. It can actually compute the best fit polynomial of any order. For example, we could find the best fit parabola (i.e., the best fit curve of the form $f(x) = ax^2 + bx + c$) of the data from last lecture with the code "
]
},
{
"cell_type": "code",
"metadata": {
"id": "J0lGlkAbItiE",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "977fe06c-479d-41f2-b9dd-9b09a30aa6ea"
},
"source": [
"x = data[0, :]\n",
"y = data[1, :]\n",
"coeffs2 = np.polyfit(x, y, 2)\n",
"print(coeffs2)"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"[0.19568272 1.62369463 1.12770146]\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "3IA4orjkItiF"
},
"source": [
"The numbers in `coeffs2` are the coefficients $a$, $b$ and $c$ that give the smallest root-mean-square error with our data set. We can plot this to see if it gives a reasonable fit: "
]
},
{
"cell_type": "code",
"metadata": {
"id": "GGjj3mJcItiF",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 299
},
"outputId": "ca869b9d-2513-4d2f-8f84-3b6db5cbc45e"
},
"source": [
"xplot = np.linspace(0, 2, 1000)\n",
"yplot = np.polyval(coeffs2, xplot)\n",
"plt.plot(xplot, yplot, 'b', x, y, 'ko')"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"[,\n",
" ]"
]
},
"metadata": {
"tags": []
},
"execution_count": 87
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "XX2kByQuItiG"
},
"source": [
"It appears to be slightly better than our best fit line from the last lecture, but it is difficult to say for sure. We could try finding the RMS error to compare: "
]
},
{
"cell_type": "code",
"metadata": {
"id": "87mtHURyItiG",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "74021796-06cf-4e97-c129-d544117f95f2"
},
"source": [
"yhat = np.polyval(coeffs2, x)\n",
"n = x.size\n",
"E2 = np.sqrt((1 / n) * np.sum((yhat - y) ** 2))\n",
"print(E2)"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"0.146793952533115\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "kb-46R-QItiH"
},
"source": [
"We got a value of approximately $0.1468$, which is smaller than the error we got from our line. In some sense, this means that the quadratic fits our data better than the line. However, one should view this \"improvement\" with some trepidation. The problem is that increasing the order *automatically* decreases our error. To see why, imagine what would happen if our line were already the best possible fit. That is, suppose that no other curve could possibly come closer to our data points than the best fit line we already found. In that case, we could just choose the quadratic $y = 0x^2 + mx + b$ and it would be just as good as our line. If the line were anything less than perfect then we could choose some (potentially very small) $a$ in order to improve the fit. This is a problem. \n",
"\n",
"To see why this is bad, you need to know how I came up with the original $\\mathbf{x}$ and $\\mathbf{y}$. I used the formula $y_k = 2x_k + 1 + \\epsilon$, where $\\epsilon$ was a small random number. (In particular, I used normally distributed random numbers with standard deviation $0.16$.) Suppose that I generated one more data point at $x = 5$. "
]
},
{
"cell_type": "code",
"metadata": {
"id": "uh94SAl7ItiI"
},
"source": [
"x_new = 5\n",
"y_new = 2 * x_new + 1 + 0.16 * np.random.randn(1)"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "g9MxVw1IItiI"
},
"source": [
"Let's add this new point to our plot and see which best fit curve most accurately predicted it. (I reproduced the coefficients for our best fit line in `coeffs`, and `coeffs2` holds the coefficients for our best fit quadratic.)"
]
},
{
"cell_type": "code",
"metadata": {
"id": "ob29aSiBItiJ",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 333
},
"outputId": "90db8fae-ed4b-4214-86e9-49884f710ef1"
},
"source": [
"xplot = np.linspace(0, 5, 1000)\n",
"plt.plot(xplot, np.polyval(coeffs, xplot), 'b', xplot, np.polyval(coeffs2, xplot), 'r', x, y, 'ko', x_new, y_new, 'ko')"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"[,\n",
" ,\n",
" ,\n",
" ]"
]
},
"metadata": {
"tags": []
},
"execution_count": 89
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "rluiBodwItiK"
},
"source": [
"Because the new point is random, you will see a different final point every time you run this code, but it will essentially always be much closer to the line (in blue) than to the quadratic (in red). Since our data really did come from a line ($y = 2x + 1 + \\textrm{noise}$), any curve with an $x^2$ term will be worse than the original at predicting new data points. In essence, the $x^2$ term is capturing patterns in the noise from the original data set that don't really matter, not telling us something important about our data. Using a higher order polynomial like this (or using any curve with too many parameters in it) is called *overfitting*. The main problem with overfitting is that your curve will be worse at predicting new data, even though it matches the existing data better. That is, if I make a new data point using the same formula as I did originally (or measure a new data point using the same measurement process) then it is likely to be very close to the original best fit line, but there is no reason to hope that it is close to the overfitted curve. "
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "erUxHwzfItiK"
},
"source": [
"## Extreme overfitting\n",
"We can carry this idea of overfitting to an extreme. Notice that our original data set has 21 data points. Likewise, a 20th order polynomial has 21 coefficients. This means that we can find a 20th order polynomial that *perfectly* fits our data set. (We will just use the `polyfit` function, but the optional videos show a slicker method called \"Lagrange polynomials\".) "
]
},
{
"cell_type": "code",
"metadata": {
"id": "A3b0qChMItiL",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 353
},
"outputId": "ceedcf1a-12a4-47aa-96d3-815c3faae130"
},
"source": [
"coeffs = np.polyfit(x, y, 20)\n",
"xplot = np.linspace(0, 2, 1000)\n",
"yplot = np.polyval(coeffs, xplot)\n",
"plt.plot(xplot, yplot, 'b', x, y, 'ko')"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"/usr/local/lib/python3.7/dist-packages/IPython/core/interactiveshell.py:2882: RankWarning: Polyfit may be poorly conditioned\n",
" exec(code_obj, self.user_global_ns, self.user_ns)\n"
],
"name": "stderr"
},
{
"output_type": "execute_result",
"data": {
"text/plain": [
"[,\n",
" ]"
]
},
"metadata": {
"tags": []
},
"execution_count": 90
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "na9YmLR7ItiL"
},
"source": [
"What happened? We hit every single data point, but this graph certainly doesn't describe any trends in our data. The phenomenon where this best fit polynomial oscillates wildly is called \"Runge's phenomenon\", or the more whimsical \"polynomial wiggle\", and it means that we should essentially never use high order polynomial fits like this. \n",
"\n",
"There is actually another problem with high order fits, although it is hard to see with this data set. High order polynomials naturally lead to serious rounding errors, which make any calculations involving these polynomials (including just graphing) highly unstable. That is why python gives the warning \"Polyfit may be poorly conditioned.\" If you try this on a larger data set (such as the one in the next homework) you will see a dramatic example of rounding error in action. The `polyval` command helps with this issue because it evaluates polynomials in a smarter order, but there is no way to completely eliminate the problem. You should *always* use `polyval` to evaluate higher order polynomials. "
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "CDT9OKYuItiL"
},
"source": [
"## Fitting nonlinear data\n",
"While it is true that overfitting is an important risk to keep in mind, and that the risk grows as we add more parameters to the curve we are fitting, it is also sometimes a good idea to try to fit a more complicated curve to our data. As an example, consider the data in the file `Week6_data2.csv`. "
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"resources": {
"http://localhost:8080/nbextensions/google.colab/files.js": {
"data": "Ly8gQ29weXJpZ2h0IDIwMTcgR29vZ2xlIExMQwovLwovLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgovLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLy8KLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLy8KLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQovLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAovLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAovLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KCi8qKgogKiBAZmlsZW92ZXJ2aWV3IEhlbHBlcnMgZm9yIGdvb2dsZS5jb2xhYiBQeXRob24gbW9kdWxlLgogKi8KKGZ1bmN0aW9uKHNjb3BlKSB7CmZ1bmN0aW9uIHNwYW4odGV4dCwgc3R5bGVBdHRyaWJ1dGVzID0ge30pIHsKICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpOwogIGVsZW1lbnQudGV4dENvbnRlbnQgPSB0ZXh0OwogIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHN0eWxlQXR0cmlidXRlcykpIHsKICAgIGVsZW1lbnQuc3R5bGVba2V5XSA9IHN0eWxlQXR0cmlidXRlc1trZXldOwogIH0KICByZXR1cm4gZWxlbWVudDsKfQoKLy8gTWF4IG51bWJlciBvZiBieXRlcyB3aGljaCB3aWxsIGJlIHVwbG9hZGVkIGF0IGEgdGltZS4KY29uc3QgTUFYX1BBWUxPQURfU0laRSA9IDEwMCAqIDEwMjQ7CgpmdW5jdGlvbiBfdXBsb2FkRmlsZXMoaW5wdXRJZCwgb3V0cHV0SWQpIHsKICBjb25zdCBzdGVwcyA9IHVwbG9hZEZpbGVzU3RlcChpbnB1dElkLCBvdXRwdXRJZCk7CiAgY29uc3Qgb3V0cHV0RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG91dHB1dElkKTsKICAvLyBDYWNoZSBzdGVwcyBvbiB0aGUgb3V0cHV0RWxlbWVudCB0byBtYWtlIGl0IGF2YWlsYWJsZSBmb3IgdGhlIG5leHQgY2FsbAogIC8vIHRvIHVwbG9hZEZpbGVzQ29udGludWUgZnJvbSBQeXRob24uCiAgb3V0cHV0RWxlbWVudC5zdGVwcyA9IHN0ZXBzOwoKICByZXR1cm4gX3VwbG9hZEZpbGVzQ29udGludWUob3V0cHV0SWQpOwp9CgovLyBUaGlzIGlzIHJvdWdobHkgYW4gYXN5bmMgZ2VuZXJhdG9yIChub3Qgc3VwcG9ydGVkIGluIHRoZSBicm93c2VyIHlldCksCi8vIHdoZXJlIHRoZXJlIGFyZSBtdWx0aXBsZSBhc3luY2hyb25vdXMgc3RlcHMgYW5kIHRoZSBQeXRob24gc2lkZSBpcyBnb2luZwovLyB0byBwb2xsIGZvciBjb21wbGV0aW9uIG9mIGVhY2ggc3RlcC4KLy8gVGhpcyB1c2VzIGEgUHJvbWlzZSB0byBibG9jayB0aGUgcHl0aG9uIHNpZGUgb24gY29tcGxldGlvbiBvZiBlYWNoIHN0ZXAsCi8vIHRoZW4gcGFzc2VzIHRoZSByZXN1bHQgb2YgdGhlIHByZXZpb3VzIHN0ZXAgYXMgdGhlIGlucHV0IHRvIHRoZSBuZXh0IHN0ZXAuCmZ1bmN0aW9uIF91cGxvYWRGaWxlc0NvbnRpbnVlKG91dHB1dElkKSB7CiAgY29uc3Qgb3V0cHV0RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG91dHB1dElkKTsKICBjb25zdCBzdGVwcyA9IG91dHB1dEVsZW1lbnQuc3RlcHM7CgogIGNvbnN0IG5leHQgPSBzdGVwcy5uZXh0KG91dHB1dEVsZW1lbnQubGFzdFByb21pc2VWYWx1ZSk7CiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXh0LnZhbHVlLnByb21pc2UpLnRoZW4oKHZhbHVlKSA9PiB7CiAgICAvLyBDYWNoZSB0aGUgbGFzdCBwcm9taXNlIHZhbHVlIHRvIG1ha2UgaXQgYXZhaWxhYmxlIHRvIHRoZSBuZXh0CiAgICAvLyBzdGVwIG9mIHRoZSBnZW5lcmF0b3IuCiAgICBvdXRwdXRFbGVtZW50Lmxhc3RQcm9taXNlVmFsdWUgPSB2YWx1ZTsKICAgIHJldHVybiBuZXh0LnZhbHVlLnJlc3BvbnNlOwogIH0pOwp9CgovKioKICogR2VuZXJhdG9yIGZ1bmN0aW9uIHdoaWNoIGlzIGNhbGxlZCBiZXR3ZWVuIGVhY2ggYXN5bmMgc3RlcCBvZiB0aGUgdXBsb2FkCiAqIHByb2Nlc3MuCiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dElkIEVsZW1lbnQgSUQgb2YgdGhlIGlucHV0IGZpbGUgcGlja2VyIGVsZW1lbnQuCiAqIEBwYXJhbSB7c3RyaW5nfSBvdXRwdXRJZCBFbGVtZW50IElEIG9mIHRoZSBvdXRwdXQgZGlzcGxheS4KICogQHJldHVybiB7IUl0ZXJhYmxlPCFPYmplY3Q+fSBJdGVyYWJsZSBvZiBuZXh0IHN0ZXBzLgogKi8KZnVuY3Rpb24qIHVwbG9hZEZpbGVzU3RlcChpbnB1dElkLCBvdXRwdXRJZCkgewogIGNvbnN0IGlucHV0RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlucHV0SWQpOwogIGlucHV0RWxlbWVudC5kaXNhYmxlZCA9IGZhbHNlOwoKICBjb25zdCBvdXRwdXRFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQob3V0cHV0SWQpOwogIG91dHB1dEVsZW1lbnQuaW5uZXJIVE1MID0gJyc7CgogIGNvbnN0IHBpY2tlZFByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gewogICAgaW5wdXRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIChlKSA9PiB7CiAgICAgIHJlc29sdmUoZS50YXJnZXQuZmlsZXMpOwogICAgfSk7CiAgfSk7CgogIGNvbnN0IGNhbmNlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpOwogIGlucHV0RWxlbWVudC5wYXJlbnRFbGVtZW50LmFwcGVuZENoaWxkKGNhbmNlbCk7CiAgY2FuY2VsLnRleHRDb250ZW50ID0gJ0NhbmNlbCB1cGxvYWQnOwogIGNvbnN0IGNhbmNlbFByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gewogICAgY2FuY2VsLm9uY2xpY2sgPSAoKSA9PiB7CiAgICAgIHJlc29sdmUobnVsbCk7CiAgICB9OwogIH0pOwoKICAvLyBXYWl0IGZvciB0aGUgdXNlciB0byBwaWNrIHRoZSBmaWxlcy4KICBjb25zdCBmaWxlcyA9IHlpZWxkIHsKICAgIHByb21pc2U6IFByb21pc2UucmFjZShbcGlja2VkUHJvbWlzZSwgY2FuY2VsUHJvbWlzZV0pLAogICAgcmVzcG9uc2U6IHsKICAgICAgYWN0aW9uOiAnc3RhcnRpbmcnLAogICAgfQogIH07CgogIGNhbmNlbC5yZW1vdmUoKTsKCiAgLy8gRGlzYWJsZSB0aGUgaW5wdXQgZWxlbWVudCBzaW5jZSBmdXJ0aGVyIHBpY2tzIGFyZSBub3QgYWxsb3dlZC4KICBpbnB1dEVsZW1lbnQuZGlzYWJsZWQgPSB0cnVlOwoKICBpZiAoIWZpbGVzKSB7CiAgICByZXR1cm4gewogICAgICByZXNwb25zZTogewogICAgICAgIGFjdGlvbjogJ2NvbXBsZXRlJywKICAgICAgfQogICAgfTsKICB9CgogIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykgewogICAgY29uc3QgbGkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaScpOwogICAgbGkuYXBwZW5kKHNwYW4oZmlsZS5uYW1lLCB7Zm9udFdlaWdodDogJ2JvbGQnfSkpOwogICAgbGkuYXBwZW5kKHNwYW4oCiAgICAgICAgYCgke2ZpbGUudHlwZSB8fCAnbi9hJ30pIC0gJHtmaWxlLnNpemV9IGJ5dGVzLCBgICsKICAgICAgICBgbGFzdCBtb2RpZmllZDogJHsKICAgICAgICAgICAgZmlsZS5sYXN0TW9kaWZpZWREYXRlID8gZmlsZS5sYXN0TW9kaWZpZWREYXRlLnRvTG9jYWxlRGF0ZVN0cmluZygpIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ24vYSd9IC0gYCkpOwogICAgY29uc3QgcGVyY2VudCA9IHNwYW4oJzAlIGRvbmUnKTsKICAgIGxpLmFwcGVuZENoaWxkKHBlcmNlbnQpOwoKICAgIG91dHB1dEVsZW1lbnQuYXBwZW5kQ2hpbGQobGkpOwoKICAgIGNvbnN0IGZpbGVEYXRhUHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7CiAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7CiAgICAgIHJlYWRlci5vbmxvYWQgPSAoZSkgPT4gewogICAgICAgIHJlc29sdmUoZS50YXJnZXQucmVzdWx0KTsKICAgICAgfTsKICAgICAgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKGZpbGUpOwogICAgfSk7CiAgICAvLyBXYWl0IGZvciB0aGUgZGF0YSB0byBiZSByZWFkeS4KICAgIGxldCBmaWxlRGF0YSA9IHlpZWxkIHsKICAgICAgcHJvbWlzZTogZmlsZURhdGFQcm9taXNlLAogICAgICByZXNwb25zZTogewogICAgICAgIGFjdGlvbjogJ2NvbnRpbnVlJywKICAgICAgfQogICAgfTsKCiAgICAvLyBVc2UgYSBjaHVua2VkIHNlbmRpbmcgdG8gYXZvaWQgbWVzc2FnZSBzaXplIGxpbWl0cy4gU2VlIGIvNjIxMTU2NjAuCiAgICBsZXQgcG9zaXRpb24gPSAwOwogICAgd2hpbGUgKHBvc2l0aW9uIDwgZmlsZURhdGEuYnl0ZUxlbmd0aCkgewogICAgICBjb25zdCBsZW5ndGggPSBNYXRoLm1pbihmaWxlRGF0YS5ieXRlTGVuZ3RoIC0gcG9zaXRpb24sIE1BWF9QQVlMT0FEX1NJWkUpOwogICAgICBjb25zdCBjaHVuayA9IG5ldyBVaW50OEFycmF5KGZpbGVEYXRhLCBwb3NpdGlvbiwgbGVuZ3RoKTsKICAgICAgcG9zaXRpb24gKz0gbGVuZ3RoOwoKICAgICAgY29uc3QgYmFzZTY0ID0gYnRvYShTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIGNodW5rKSk7CiAgICAgIHlpZWxkIHsKICAgICAgICByZXNwb25zZTogewogICAgICAgICAgYWN0aW9uOiAnYXBwZW5kJywKICAgICAgICAgIGZpbGU6IGZpbGUubmFtZSwKICAgICAgICAgIGRhdGE6IGJhc2U2NCwKICAgICAgICB9LAogICAgICB9OwogICAgICBwZXJjZW50LnRleHRDb250ZW50ID0KICAgICAgICAgIGAke01hdGgucm91bmQoKHBvc2l0aW9uIC8gZmlsZURhdGEuYnl0ZUxlbmd0aCkgKiAxMDApfSUgZG9uZWA7CiAgICB9CiAgfQoKICAvLyBBbGwgZG9uZS4KICB5aWVsZCB7CiAgICByZXNwb25zZTogewogICAgICBhY3Rpb246ICdjb21wbGV0ZScsCiAgICB9CiAgfTsKfQoKc2NvcGUuZ29vZ2xlID0gc2NvcGUuZ29vZ2xlIHx8IHt9OwpzY29wZS5nb29nbGUuY29sYWIgPSBzY29wZS5nb29nbGUuY29sYWIgfHwge307CnNjb3BlLmdvb2dsZS5jb2xhYi5fZmlsZXMgPSB7CiAgX3VwbG9hZEZpbGVzLAogIF91cGxvYWRGaWxlc0NvbnRpbnVlLAp9Owp9KShzZWxmKTsK",
"ok": true,
"headers": [
[
"content-type",
"application/javascript"
]
],
"status": 200,
"status_text": ""
}
},
"base_uri": "https://localhost:8080/",
"height": 72
},
"id": "p-e0XKrOKLiK",
"outputId": "69f6581e-1291-4a97-9c87-cf981634a51e"
},
"source": [
"from google.colab import files\n",
"uploaded = files.upload()"
],
"execution_count": null,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/html": [
"\n",
" \n",
" \n",
" Upload widget is only available when the cell has been executed in the\n",
" current browser session. Please rerun this cell to enable.\n",
" \n",
" "
],
"text/plain": [
""
]
},
"metadata": {
"tags": []
}
},
{
"output_type": "stream",
"text": [
"Saving Week6_data2.csv to Week6_data2 (2).csv\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "uaBH669XKPWL"
},
"source": [
"df2 = pd.read_csv('Week6_data2.csv')"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "b_tbOjWpItiM",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 282
},
"outputId": "831f353c-a859-4f57-ad8d-102b52be741d"
},
"source": [
"data = np.genfromtxt('Week6_data2.csv', delimiter=',')\n",
"x = data[0, :]\n",
"y = data[1, :]\n",
"n = x.size\n",
"plt.plot(x, y, 'ko')"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"[]"
]
},
"metadata": {
"tags": []
},
"execution_count": 93
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "yEs8VNYrItiM"
},
"source": [
"This data looks roughly linear, but there does seem to be a recognizable \"curve\" in the graph. We could, of course, try to find a best fit line for this data set. Using the same code as in the last lecture, we get the following plot: "
]
},
{
"cell_type": "code",
"metadata": {
"id": "xy82CoLLItiM",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 299
},
"outputId": "af01c402-bba3-4de9-cb3d-ed5af556d374"
},
"source": [
"coeffs = np.polyfit(x, y, 1)\n",
"xplot = np.linspace(0, 2, 1000)\n",
"yplot = np.polyval(coeffs, xplot)\n",
"plt.plot(xplot, yplot, 'b', x, y, 'ko')"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"[,\n",
" ]"
]
},
"metadata": {
"tags": []
},
"execution_count": 94
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "HQI57tJuItiN"
},
"source": [
"This doesn't look like a terrible fit, but we do seem to be systematically off. Our line is too low at the edges and too high in the middle. We can quantify how \"far off\" our curve is with the root mean square error of this fit. "
]
},
{
"cell_type": "code",
"metadata": {
"id": "sI302nzFItiN",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "79a350e0-fdda-44c3-d9a6-da6866e1f9ad"
},
"source": [
"E = np.sqrt((1 / n) * np.sum((np.polyval(coeffs, x) - y) ** 2))\n",
"print(E)"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"0.6473205589982114\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "cXSEnzMWItiN"
},
"source": [
"We don't really have anything useful to compare this error to yet, but it's worth noting that this is substantially larger than the linear fit from last lecture. (Normally that is not relevant, but when I made the two data sets I used random numbers with the same standard deviation, which means that if our data really were linear we would expect roughly the same RMS error as before.)\n",
"\n",
"Let's try a higher order polynomial fit. "
]
},
{
"cell_type": "code",
"metadata": {
"id": "-1fTRdwSItiN",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 299
},
"outputId": "b63e6df9-c073-4997-b443-17ddbfebd40d"
},
"source": [
"coeffs2 = np.polyfit(x, y, 2)\n",
"yplot = np.polyval(coeffs2, xplot)\n",
"plt.plot(xplot, yplot, 'r', x, y, 'ko')"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"[,\n",
" ]"
]
},
"metadata": {
"tags": []
},
"execution_count": 95
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "oxK1meBvItiO"
},
"source": [
"At least visually, this seems like a big improvement. We can also check the RMS error to try to quantify how much better it is. "
]
},
{
"cell_type": "code",
"metadata": {
"id": "obxxAa_mItiO",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "c6491a85-0552-42df-b591-2296e380cf9e"
},
"source": [
"E = np.sqrt((1 / n) * np.sum((np.polyval(coeffs2, x) - y) ** 2))\n",
"print(E)"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"0.20680182519744578\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "7MYE0MHOItiP"
},
"source": [
"Keep in mind that this error is *automatically* lower than the error for our best fit line, just because we added an extra paramter to our curve. That said, this is a pretty substantial improvement. The error for our best fit quadratic is less than a third of the error for our best fit line. \n",
"\n",
"What if we keep going? If we got this much improvement out of a quadratic, what will happen if we try a cubic fit?"
]
},
{
"cell_type": "code",
"metadata": {
"id": "iBzxY1eKItiP",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 299
},
"outputId": "dc4a218e-b9a8-4db0-bad4-e4b348714a0b"
},
"source": [
"coeffs3 = np.polyfit(x, y, 3)\n",
"yplot = np.polyval(coeffs3, xplot)\n",
"plt.plot(xplot, yplot, 'g', x, y, 'ko')"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"[,\n",
" ]"
]
},
"metadata": {
"tags": []
},
"execution_count": 96
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "Awfq1nGmItiP"
},
"source": [
"This does not look like nearly as much of an improvement as the quadratic. Again, we can quantify the change by finding the RMS error for our new fit. "
]
},
{
"cell_type": "code",
"metadata": {
"id": "ocrJ085pItiP",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "c62ecd70-a504-4ba3-f029-a9222bcc3c61"
},
"source": [
"E = np.sqrt((1 / n) * np.sum((np.polyval(coeffs3, x) - y) ** 2))\n",
"print(E)"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"0.20671029701066426\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "t2-BngZMItiQ"
},
"source": [
"Once again, the error is *automatically* lower because we used an extra parameter in our curve. In this case, though, the error is only 0.1% lower instead of nearly 2/3 lower. This tells us that going from a quadratic to a cubic was not a good idea. \n",
"\n",
"These results are no coincidence. When I generated this data, I did so with the formula $y = 2x^2 - x - 1 + \\epsilon$, where $\\epsilon$ was a small random number. This means that a best fit line can't possibly fully describe the process I used to make the data, but a best fit quadratic can. Notice that the coefficients of our best fit quadratic are actually relatively close to correct. Instead of $2$, $-1$ and $-1$, we got $1.9$, $-0.7$ and $-1.1$. These are not as accurate as with the previous data set, when we predicted the coefficients of our best fit line to the first decimal place, but they are still reasonably close. As a general rule, if your formula has more parameters, you need more data to accurately predict these parameters. If we had 100 points in our data set instead of 21, then we would have obtained a much more accurate estimate of our formula. "
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "y5n3NpgPItiQ"
},
"source": [
"## Non-polynomial curves\n",
"So far, both of our data sets have really come from polynomials. (The first set came from a linear function and the second came from a quadratic function.) In general, we can't actually hope that all of our data will be in such a nice form. As an example, consider the data in `Week6_data3.csv`. "
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"resources": {
"http://localhost:8080/nbextensions/google.colab/files.js": {
"data": "Ly8gQ29weXJpZ2h0IDIwMTcgR29vZ2xlIExMQwovLwovLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgovLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLy8KLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLy8KLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQovLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAovLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAovLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KCi8qKgogKiBAZmlsZW92ZXJ2aWV3IEhlbHBlcnMgZm9yIGdvb2dsZS5jb2xhYiBQeXRob24gbW9kdWxlLgogKi8KKGZ1bmN0aW9uKHNjb3BlKSB7CmZ1bmN0aW9uIHNwYW4odGV4dCwgc3R5bGVBdHRyaWJ1dGVzID0ge30pIHsKICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpOwogIGVsZW1lbnQudGV4dENvbnRlbnQgPSB0ZXh0OwogIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHN0eWxlQXR0cmlidXRlcykpIHsKICAgIGVsZW1lbnQuc3R5bGVba2V5XSA9IHN0eWxlQXR0cmlidXRlc1trZXldOwogIH0KICByZXR1cm4gZWxlbWVudDsKfQoKLy8gTWF4IG51bWJlciBvZiBieXRlcyB3aGljaCB3aWxsIGJlIHVwbG9hZGVkIGF0IGEgdGltZS4KY29uc3QgTUFYX1BBWUxPQURfU0laRSA9IDEwMCAqIDEwMjQ7CgpmdW5jdGlvbiBfdXBsb2FkRmlsZXMoaW5wdXRJZCwgb3V0cHV0SWQpIHsKICBjb25zdCBzdGVwcyA9IHVwbG9hZEZpbGVzU3RlcChpbnB1dElkLCBvdXRwdXRJZCk7CiAgY29uc3Qgb3V0cHV0RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG91dHB1dElkKTsKICAvLyBDYWNoZSBzdGVwcyBvbiB0aGUgb3V0cHV0RWxlbWVudCB0byBtYWtlIGl0IGF2YWlsYWJsZSBmb3IgdGhlIG5leHQgY2FsbAogIC8vIHRvIHVwbG9hZEZpbGVzQ29udGludWUgZnJvbSBQeXRob24uCiAgb3V0cHV0RWxlbWVudC5zdGVwcyA9IHN0ZXBzOwoKICByZXR1cm4gX3VwbG9hZEZpbGVzQ29udGludWUob3V0cHV0SWQpOwp9CgovLyBUaGlzIGlzIHJvdWdobHkgYW4gYXN5bmMgZ2VuZXJhdG9yIChub3Qgc3VwcG9ydGVkIGluIHRoZSBicm93c2VyIHlldCksCi8vIHdoZXJlIHRoZXJlIGFyZSBtdWx0aXBsZSBhc3luY2hyb25vdXMgc3RlcHMgYW5kIHRoZSBQeXRob24gc2lkZSBpcyBnb2luZwovLyB0byBwb2xsIGZvciBjb21wbGV0aW9uIG9mIGVhY2ggc3RlcC4KLy8gVGhpcyB1c2VzIGEgUHJvbWlzZSB0byBibG9jayB0aGUgcHl0aG9uIHNpZGUgb24gY29tcGxldGlvbiBvZiBlYWNoIHN0ZXAsCi8vIHRoZW4gcGFzc2VzIHRoZSByZXN1bHQgb2YgdGhlIHByZXZpb3VzIHN0ZXAgYXMgdGhlIGlucHV0IHRvIHRoZSBuZXh0IHN0ZXAuCmZ1bmN0aW9uIF91cGxvYWRGaWxlc0NvbnRpbnVlKG91dHB1dElkKSB7CiAgY29uc3Qgb3V0cHV0RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG91dHB1dElkKTsKICBjb25zdCBzdGVwcyA9IG91dHB1dEVsZW1lbnQuc3RlcHM7CgogIGNvbnN0IG5leHQgPSBzdGVwcy5uZXh0KG91dHB1dEVsZW1lbnQubGFzdFByb21pc2VWYWx1ZSk7CiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXh0LnZhbHVlLnByb21pc2UpLnRoZW4oKHZhbHVlKSA9PiB7CiAgICAvLyBDYWNoZSB0aGUgbGFzdCBwcm9taXNlIHZhbHVlIHRvIG1ha2UgaXQgYXZhaWxhYmxlIHRvIHRoZSBuZXh0CiAgICAvLyBzdGVwIG9mIHRoZSBnZW5lcmF0b3IuCiAgICBvdXRwdXRFbGVtZW50Lmxhc3RQcm9taXNlVmFsdWUgPSB2YWx1ZTsKICAgIHJldHVybiBuZXh0LnZhbHVlLnJlc3BvbnNlOwogIH0pOwp9CgovKioKICogR2VuZXJhdG9yIGZ1bmN0aW9uIHdoaWNoIGlzIGNhbGxlZCBiZXR3ZWVuIGVhY2ggYXN5bmMgc3RlcCBvZiB0aGUgdXBsb2FkCiAqIHByb2Nlc3MuCiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dElkIEVsZW1lbnQgSUQgb2YgdGhlIGlucHV0IGZpbGUgcGlja2VyIGVsZW1lbnQuCiAqIEBwYXJhbSB7c3RyaW5nfSBvdXRwdXRJZCBFbGVtZW50IElEIG9mIHRoZSBvdXRwdXQgZGlzcGxheS4KICogQHJldHVybiB7IUl0ZXJhYmxlPCFPYmplY3Q+fSBJdGVyYWJsZSBvZiBuZXh0IHN0ZXBzLgogKi8KZnVuY3Rpb24qIHVwbG9hZEZpbGVzU3RlcChpbnB1dElkLCBvdXRwdXRJZCkgewogIGNvbnN0IGlucHV0RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlucHV0SWQpOwogIGlucHV0RWxlbWVudC5kaXNhYmxlZCA9IGZhbHNlOwoKICBjb25zdCBvdXRwdXRFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQob3V0cHV0SWQpOwogIG91dHB1dEVsZW1lbnQuaW5uZXJIVE1MID0gJyc7CgogIGNvbnN0IHBpY2tlZFByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gewogICAgaW5wdXRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIChlKSA9PiB7CiAgICAgIHJlc29sdmUoZS50YXJnZXQuZmlsZXMpOwogICAgfSk7CiAgfSk7CgogIGNvbnN0IGNhbmNlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpOwogIGlucHV0RWxlbWVudC5wYXJlbnRFbGVtZW50LmFwcGVuZENoaWxkKGNhbmNlbCk7CiAgY2FuY2VsLnRleHRDb250ZW50ID0gJ0NhbmNlbCB1cGxvYWQnOwogIGNvbnN0IGNhbmNlbFByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gewogICAgY2FuY2VsLm9uY2xpY2sgPSAoKSA9PiB7CiAgICAgIHJlc29sdmUobnVsbCk7CiAgICB9OwogIH0pOwoKICAvLyBXYWl0IGZvciB0aGUgdXNlciB0byBwaWNrIHRoZSBmaWxlcy4KICBjb25zdCBmaWxlcyA9IHlpZWxkIHsKICAgIHByb21pc2U6IFByb21pc2UucmFjZShbcGlja2VkUHJvbWlzZSwgY2FuY2VsUHJvbWlzZV0pLAogICAgcmVzcG9uc2U6IHsKICAgICAgYWN0aW9uOiAnc3RhcnRpbmcnLAogICAgfQogIH07CgogIGNhbmNlbC5yZW1vdmUoKTsKCiAgLy8gRGlzYWJsZSB0aGUgaW5wdXQgZWxlbWVudCBzaW5jZSBmdXJ0aGVyIHBpY2tzIGFyZSBub3QgYWxsb3dlZC4KICBpbnB1dEVsZW1lbnQuZGlzYWJsZWQgPSB0cnVlOwoKICBpZiAoIWZpbGVzKSB7CiAgICByZXR1cm4gewogICAgICByZXNwb25zZTogewogICAgICAgIGFjdGlvbjogJ2NvbXBsZXRlJywKICAgICAgfQogICAgfTsKICB9CgogIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykgewogICAgY29uc3QgbGkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaScpOwogICAgbGkuYXBwZW5kKHNwYW4oZmlsZS5uYW1lLCB7Zm9udFdlaWdodDogJ2JvbGQnfSkpOwogICAgbGkuYXBwZW5kKHNwYW4oCiAgICAgICAgYCgke2ZpbGUudHlwZSB8fCAnbi9hJ30pIC0gJHtmaWxlLnNpemV9IGJ5dGVzLCBgICsKICAgICAgICBgbGFzdCBtb2RpZmllZDogJHsKICAgICAgICAgICAgZmlsZS5sYXN0TW9kaWZpZWREYXRlID8gZmlsZS5sYXN0TW9kaWZpZWREYXRlLnRvTG9jYWxlRGF0ZVN0cmluZygpIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ24vYSd9IC0gYCkpOwogICAgY29uc3QgcGVyY2VudCA9IHNwYW4oJzAlIGRvbmUnKTsKICAgIGxpLmFwcGVuZENoaWxkKHBlcmNlbnQpOwoKICAgIG91dHB1dEVsZW1lbnQuYXBwZW5kQ2hpbGQobGkpOwoKICAgIGNvbnN0IGZpbGVEYXRhUHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7CiAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7CiAgICAgIHJlYWRlci5vbmxvYWQgPSAoZSkgPT4gewogICAgICAgIHJlc29sdmUoZS50YXJnZXQucmVzdWx0KTsKICAgICAgfTsKICAgICAgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKGZpbGUpOwogICAgfSk7CiAgICAvLyBXYWl0IGZvciB0aGUgZGF0YSB0byBiZSByZWFkeS4KICAgIGxldCBmaWxlRGF0YSA9IHlpZWxkIHsKICAgICAgcHJvbWlzZTogZmlsZURhdGFQcm9taXNlLAogICAgICByZXNwb25zZTogewogICAgICAgIGFjdGlvbjogJ2NvbnRpbnVlJywKICAgICAgfQogICAgfTsKCiAgICAvLyBVc2UgYSBjaHVua2VkIHNlbmRpbmcgdG8gYXZvaWQgbWVzc2FnZSBzaXplIGxpbWl0cy4gU2VlIGIvNjIxMTU2NjAuCiAgICBsZXQgcG9zaXRpb24gPSAwOwogICAgd2hpbGUgKHBvc2l0aW9uIDwgZmlsZURhdGEuYnl0ZUxlbmd0aCkgewogICAgICBjb25zdCBsZW5ndGggPSBNYXRoLm1pbihmaWxlRGF0YS5ieXRlTGVuZ3RoIC0gcG9zaXRpb24sIE1BWF9QQVlMT0FEX1NJWkUpOwogICAgICBjb25zdCBjaHVuayA9IG5ldyBVaW50OEFycmF5KGZpbGVEYXRhLCBwb3NpdGlvbiwgbGVuZ3RoKTsKICAgICAgcG9zaXRpb24gKz0gbGVuZ3RoOwoKICAgICAgY29uc3QgYmFzZTY0ID0gYnRvYShTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIGNodW5rKSk7CiAgICAgIHlpZWxkIHsKICAgICAgICByZXNwb25zZTogewogICAgICAgICAgYWN0aW9uOiAnYXBwZW5kJywKICAgICAgICAgIGZpbGU6IGZpbGUubmFtZSwKICAgICAgICAgIGRhdGE6IGJhc2U2NCwKICAgICAgICB9LAogICAgICB9OwogICAgICBwZXJjZW50LnRleHRDb250ZW50ID0KICAgICAgICAgIGAke01hdGgucm91bmQoKHBvc2l0aW9uIC8gZmlsZURhdGEuYnl0ZUxlbmd0aCkgKiAxMDApfSUgZG9uZWA7CiAgICB9CiAgfQoKICAvLyBBbGwgZG9uZS4KICB5aWVsZCB7CiAgICByZXNwb25zZTogewogICAgICBhY3Rpb246ICdjb21wbGV0ZScsCiAgICB9CiAgfTsKfQoKc2NvcGUuZ29vZ2xlID0gc2NvcGUuZ29vZ2xlIHx8IHt9OwpzY29wZS5nb29nbGUuY29sYWIgPSBzY29wZS5nb29nbGUuY29sYWIgfHwge307CnNjb3BlLmdvb2dsZS5jb2xhYi5fZmlsZXMgPSB7CiAgX3VwbG9hZEZpbGVzLAogIF91cGxvYWRGaWxlc0NvbnRpbnVlLAp9Owp9KShzZWxmKTsK",
"ok": true,
"headers": [
[
"content-type",
"application/javascript"
]
],
"status": 200,
"status_text": ""
}
},
"base_uri": "https://localhost:8080/",
"height": 72
},
"id": "-S_Ep94zKctw",
"outputId": "34f55c98-b864-46fe-8f86-5ef260f7f702"
},
"source": [
"from google.colab import files\n",
"uploaded = files.upload()"
],
"execution_count": null,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/html": [
"\n",
" \n",
" \n",
" Upload widget is only available when the cell has been executed in the\n",
" current browser session. Please rerun this cell to enable.\n",
" \n",
" "
],
"text/plain": [
""
]
},
"metadata": {
"tags": []
}
},
{
"output_type": "stream",
"text": [
"Saving Week6_data3.csv to Week6_data3 (2).csv\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "ntodDQ8iKaBC"
},
"source": [
"df3 = pd.read_csv('Week6_data3.csv')"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "AWwsYlZRItiQ",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 282
},
"outputId": "e14b23d7-b6b2-4b07-e2cd-b92221d2a1f8"
},
"source": [
"data = np.genfromtxt('Week6_data3.csv', delimiter=',')\n",
"x = data[0, :]\n",
"y = data[1, :]\n",
"n = x.size\n",
"plt.plot(x, y, 'ko')"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"[]"
]
},
"metadata": {
"tags": []
},
"execution_count": 99
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "5uWkPV1UItiR"
},
"source": [
"At first glance, this data might appear roughly linear. It seems to be centered around the line $y = 0$ with quite a bit of noise. If you squint at the data, though, you might see some more systematic patterns to it. For one thing, the points appear to be getting more spread out as $x$ increases. For another, it looks like there might be a regular oscillation instead of just noise. That is, the points appear to rise and fall at regular intervals. You should be wary of this sort of visual analysis, though. You can always find more patterns if you squint at your data hard enough, but that doesn't mean there is a real underlying pattern. \n",
"\n",
"With all that said, it never hurts to start by finding a linear fit to our data set. We get the following line and RMS error: "
]
},
{
"cell_type": "code",
"metadata": {
"id": "QNeXCsz0ItiR",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 299
},
"outputId": "4881f246-29db-4358-cc35-b20801b6d72a"
},
"source": [
"coeffs = np.polyfit(x, y, 1)\n",
"xplot = np.linspace(0, 10, 1000)\n",
"yplot = np.polyval(coeffs, xplot)\n",
"plt.plot(xplot, yplot, 'b', x, y, 'ko')"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"[,\n",
" ]"
]
},
"metadata": {
"tags": []
},
"execution_count": 100
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "PPco7kB3ItiS",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "3b5266e5-df65-4f6b-eb30-fbd21a743fe1"
},
"source": [
"E = np.sqrt((1 / n) * np.sum((np.polyval(coeffs, x) - y) ** 2))\n",
"print(E)"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"1.319402103674205\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "m2Voe5CgItiS"
},
"source": [
"This line doesn't look like a particularly good fit, but it is possible that these data really are just random numbers, in which case there is nothing more we can do. The error value doesn't tell us very much because we don't have any other drrors to compare to. \n",
"\n",
"We could do the same thing as before and try higher order polynomial fits to see if they do any better. There is a plausible (but entirely wrong) argument for why this might be a good idea: If our data was generated by the formula $y = f(x) + \\epsilon$ for some reasonably nice function $f$, then the function $f(x)$ should have a Taylor expansion. Maybe if we found high order polynomial fits to our data, they would give us a good approximation to the Taylor expansion of $f(x)$, and therefore a good approximation to $f(x)$ itself. We know that it is a bad idea to use *too high* an order for our fit, but maybe we could safely use a medium order polynomial. It turns out that this is just not how data fitting really works. There are two different issues: First, Taylor approximations rely on a lot of detailed information (higher order derivatives) about $f(x)$ very close to one point, while we have lots of data about $f$ at widely spread out points. Second, small errors in our data (and, in practice, all data has small errors) lead to huge changes in these higher order polynomial fits, even if the data is still generated from the same function $f(x)$. As an illustrative example, though, let's try this out: "
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "0z7C-SgyJH7E"
},
"source": [
"##Rahman notes: \n",
"The notes that were passed down show some pitfalls that we should be aware of, and some naive fixes, but I think it might be interesting to be a bit clever about this. So this might be a bit complex, but I think it will pay dividends if anyone goes into any sort of data-related field.\n",
"We see that the data seems to look like a sinusoidal with an exponential profile. Let's first tackle the sinusoidal. How do we figure out the period? One way is to look at the troughs. The distance between troughs will give us the period. We did something similar last week."
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 299
},
"id": "Lg8dQ1XZVTm0",
"outputId": "7068a794-c511-4f4b-97bc-18474016ea78"
},
"source": [
"count = 0\n",
"j = 0\n",
"for i in range(len(x)-1):\n",
" if (np.sign(y[i]) != np.sign(y[i+1])) and (np.abs(x[j]-x[i]) > 0.5):\n",
" count = count + 1\n",
" j = i\n",
"\n",
"x_sin = np.arange(x[0], x[-1]+0.0001, 0.001)\n",
"y_sin = np.sin(x_sin*np.pi*count/(x[j]-x[0]))\n",
"plt.plot(x, y, 'ko', x_sin, y_sin, linewidth = 4, markersize = 10)"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"[,\n",
" ]"
]
},
"metadata": {
"tags": []
},
"execution_count": 101
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 282
},
"id": "gaXIebynQALC",
"outputId": "caf130b6-4bd7-407a-d741-5f0982466d61"
},
"source": [
"x_peaks = np.zeros(int(count/2 + 1))\n",
"y_peaks = x_peaks.copy()\n",
"count = 0\n",
"for i in range(len(x)-2):\n",
" if y[i] < y[i+1] and y[i+2] < y[i+1] and np.abs(x[j]-x[i]) > 0.5 and y[i+1] > 0:\n",
" count = count + 1\n",
" y_peaks[count-1] = y[i+1]\n",
" x_peaks[count-1] = x[i+1]\n",
" j=i\n",
"\n",
"plt.plot(x_peaks, y_peaks, 'o', linewidth = 4)"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"[]"
]
},
"metadata": {
"tags": []
},
"execution_count": 102
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "TdvZnMSsT6Yb",
"outputId": "19f6b2cf-92b2-41b7-d613-e264e6a6e09e"
},
"source": [
"coeffs = np.polyfit(x_peaks, np.log(y_peaks), 1)\n",
"print(coeffs)"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"[ 0.13832909 -0.2616678 ]\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 316
},
"id": "HRU-ez2vUHYI",
"outputId": "9d6dd66c-7e0b-4618-8eb8-e66dc4b5a9a5"
},
"source": [
"x_envelope = np.arange(x[0], x[-1]+0.00001, 0.001)\n",
"y_envelope = np.exp(coeffs[0]*x_envelope + coeffs[1])\n",
"plt.plot(x, y, 'ko', x_envelope, y_envelope, x_envelope, -y_envelope, linewidth = 4, markersize = 10)"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"[,\n",
" ,\n",
" ]"
]
},
"metadata": {
"tags": []
},
"execution_count": 116
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 299
},
"id": "0cpJPjtcUgwa",
"outputId": "31bf42c1-8831-4984-ae94-85d7bb866547"
},
"source": [
"plt.plot(x, y, 'ko', x_envelope, y_envelope*y_sin, linewidth = 4, markersize = 10)"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"[,\n",
" ]"
]
},
"metadata": {
"tags": []
},
"execution_count": 117
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "onpQp-ecJKOT"
},
"source": [
"##Older notes:"
]
},
{
"cell_type": "code",
"metadata": {
"id": "Nkl1jQEQItiV",
"outputId": "693c9a49-b7c8-4cdc-84b5-fc46caad3963"
},
"source": [
"coeffs2 = np.polyfit(x, y, 2)\n",
"coeffs3 = np.polyfit(x, y, 3)\n",
"coeffs4 = np.polyfit(x, y, 4)\n",
"yplot2 = np.polyval(coeffs2, xplot)\n",
"yplot3 = np.polyval(coeffs3, xplot)\n",
"yplot4 = np.polyval(coeffs4, xplot)\n",
"\n",
"plt.plot(xplot, yplot2, 'r', xplot, yplot3, 'b', xplot, yplot4, 'g', x, y, 'ko')"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"[,\n",
" ,\n",
" ,\n",
" ]"
]
},
"metadata": {
"tags": []
},
"execution_count": 61
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "n_wFaQXFItiW"
},
"source": [
"As you can see, these do not appear to match the data very well. Maybe we didn't go high enough? "
]
},
{
"cell_type": "code",
"metadata": {
"id": "ya3IzXwrItiW",
"outputId": "8f43163a-a037-4da4-94c0-9af6540f1dba"
},
"source": [
"coeffs90 = np.polyfit(x, y, 90)\n",
"yplot90 = np.polyval(coeffs50, xplot)\n",
"plt.plot(xplot, yplot90, 'r', x, y, 'ko')"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"/home/lowell/anaconda3/lib/python3.8/site-packages/IPython/core/interactiveshell.py:3418: RankWarning: Polyfit may be poorly conditioned\n",
" exec(code_obj, self.user_global_ns, self.user_ns)\n"
],
"name": "stderr"
},
{
"output_type": "execute_result",
"data": {
"text/plain": [
"[,\n",
" ]"
]
},
"metadata": {
"tags": []
},
"execution_count": 62
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "2Fig_XjYItiX"
},
"source": [
"This is a good illustration of the problems with high order polynomial fits. You may be able to find a medium order polynomial that appears to be a good fit to the data (in this case, a 20th order polynomial does not look bad at all) but it is entirely by coincidence. The data did not come from a polynomial formula, and we are not really approximating the real formula well with our polynomial fits. In general, this idea of trying higher and higher order polynomials simply doesn't work. \n",
"\n",
"If polynomial fits won't work, then what are we supposed to do? It turns out that there is a way to proceed, but we need more information. In particular, we need to know more about the formula we got our data from. In this case, I made the data myself, so I know that it came from the formula $y = e^{ax}\\sin(bx) + \\epsilon$, where $\\epsilon$ was a small random number. This is not a polynomial, but it is a formula with relatively few parameters. That means that we can try to find a best fit curve of the appropriate form. Unfortunately, python does not have a builtin function \"exponential_sine_fit\", so we will need to do a little more work than in the case of polynomials. \n",
"\n",
"To start, let's just try a couple examples for $a$ and $b$. "
]
},
{
"cell_type": "code",
"metadata": {
"id": "_9kN0_8jItiX",
"outputId": "839db861-804c-4840-d2f6-328040a16d35"
},
"source": [
"a = 1\n",
"b = 1\n",
"yplot = np.exp(a * xplot) * np.sin(b * xplot)\n",
"plt.plot(xplot, yplot, 'b', x, y, 'ko')"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"[,\n",
" ]"
]
},
"metadata": {
"tags": []
},
"execution_count": 63
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "DHucrMObItiY"
},
"source": [
"This is obviously not a very good fit. We can quantify just how bad it is with the RMS error: "
]
},
{
"cell_type": "code",
"metadata": {
"id": "jeEkOOrUItiY",
"outputId": "34ea9eef-0be8-4bd8-f850-3ab159c7f751"
},
"source": [
"E = np.sqrt((1 / n) * np.sum((np.exp(a * x) * np.sin(b * x) - y) ** 2))\n",
"print(E)"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"2202.171475558139\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "-deL363CItiY"
},
"source": [
"The problem is that $a = 1$ and $b = 1$ was not a very good guess. Let's try again. "
]
},
{
"cell_type": "code",
"metadata": {
"id": "dB2x6FLbItiY",
"outputId": "4a66b474-3324-489c-ad21-029597f7cc81"
},
"source": [
"a = 0.1\n",
"b = 5\n",
"yplot = np.exp(a * xplot) * np.sin(b * xplot)\n",
"plt.plot(xplot, yplot, 'b', x, y, 'ko')"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"[,\n",
" ]"
]
},
"metadata": {
"tags": []
},
"execution_count": 65
},
{
"output_type": "display_data",
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAXIAAAD4CAYAAADxeG0DAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAABGrUlEQVR4nO2deXwc1ZXvf1eSN3m35A1L1oL3BWxswNh5GAJhSyYGkklCBGEyCQ4JE0h4eQk8J5mXN+N5YUjeDJ9kyMST5L0k6oHwWBxCQiBhDAxgMDIG4wWvSLItL5K8Y1vC1nl/HF+61arqvlV1b3W3dL6fjz6lrq6uvt1d9atT555FEREEQRCEwqUo1wMQBEEQoiFCLgiCUOCIkAuCIBQ4IuSCIAgFjgi5IAhCgVOSizctLy+n6urqXLy1IAhCwbJ27do2Ihqdvj4nQl5dXY2GhoZcvLUgCELBopRq8lovrhVBEIQCR4RcEAShwBEhFwRBKHBEyAVBEAocEXJBEIQCR4RcEATBEolEAtXV1SgqKkJ1dTUSiUQs75uT8ENBEITeRiKRwNKlS3HixAkAQFNTE5YuXQoAqKurc/reYpELgiBYYNmyZR+IuObEiRNYtmyZ8/cWIRcEQbBAc3NzoPU2ESEXBEGwwMSJEwOtt4kIuSAIggWWL1+O0tLSbutKS0uxfPly5+8tQi4IgmCBuro6rFixAlVVVVBKoaqqCitWrHA+0QmIkAuCkEfkKnzPFnV1dWhsbERXVxcaGxtjEXFAwg8FQcgTchm+V+iIRS4IQl6Qi/C9zk7gmWeAI0ecvUUsiJALgpAX5CJ879ZbgWuuAS6/HDh92tnbOEeEXBCEvCDu8L0dO4CHHwamTQPWrWPLvFARIRcEIS+IO3yvvh5QCvjDH4DRo4Ff/9rJ28SCCLkgCHlB3OF7zz0HzJ8P1NSwe2XVKoDIyVs5R4RcEIS8ITV8b/ny5Vi2bJmTUMSTJ4HXXgMWL+bHixcDBw4A77xj7S1iRYRcEIS8Q4ciNjU1gYg+CEW0JeZvvcURKwsX8uNFi3i5Zo2V3ceOCLkgCDnFKwnIdSjixo28PO88Xk6eDAwaBKxfb2X3AOJNbpKEIEEQcoZfElC6iGtshSJu2MDCXVPDj4uLgVmz2FK3QdzJTWKRC4KQM/ws7+LiYs/tbYUibtgAzJgBFKUo4OzZwNtvW9l97MlNIuSCIOQMPwv7zJkzTkMRN25kCzyVKVN4wvPYsej7jzu5SYRcEHoh+VZ86o03gPvuAw4e7L7ez8LWoYcuQhEPHQL27gVmzuy+/txzebljR+S38P1cRUVFbn4TIor9b968eSQIghvq6+uptLSUAHzwV1paSvX19TkZz65dRCNHEgFEV1+d+7E2NPBYHn+8+/o33uD1jz4a/T28Plf6X5jPCaCBPDRVhFwQehlVVVWewlFVVZWT8dxzD1FxMdFtt7HivPZa9+fr6+upqqqKlFJUVVXl/ILz//4fj2Pduu7rjxzh9d//vp33Sf1cxcXFVn4TPyFXlINUpvnz51NDQ0Ps7ysIfYGioiJ4nddKKXR1dcU6FiKgshKYMwdIJDgV/mtfA/7xH2MdRjfuvx/45jeBw4eB4cO7PzdmDHD99cCKFXbf09ZvopRaS0Tze+w/2vAEQcg3ctk7Mp3Nm4E9e4AbbmDRvOwy4He/i30Y3WhsBEaO7CniAPvJbfjI03H9m0QWcqVUpVJqlVJqs1Jqo1LqLhsDEwQhHLnsHZnOqlW8vPxyXl5xBafBt7XFPpQPePddoLra+7maGn7eNq5/ExsW+WkA/5WIpgNYAOAOpdQMC/sVBCEEuewdmc6rrwLnnJNMvFmwgJevvRb7UD7g3XeT40mnooLvIGx7nF3/JpEzO4loL4C9Z/8/ppTaDGACgE1R9y0IQjjq6uryoj3aW2+xf1wpfjx/PifhrFkDfPSj8Y+HiF0rfu9dUcE1WNra2J9vE5e/iVUfuVKqGsBcAD2ut0qppUqpBqVUQ2trq823FQQhD+noYB/5+ecn1w0ezH5oXeskbg4dAk6d4glYLyoqeLl7d3xjsoE1IVdKDQHwGICvEdHR9OeJaAURzSei+aNtX+oEQcg7Nm/m9mmpQg5wavymHN2vt7Tw8pxzvJ/XQr5nTzzjsYUVIVdK9QOLeIKIHrexT0EQgvHggwn0718NpYpwzjm5z+bUBai8hHzbNnZhxE02IZ8wgZd9ziJXSikAPwewmYj+d/QhCYIQlEQigTvvXIr3328CQNi7N1m/O1fp+ps3A/36AZMmdV8/YwZb6tu3xzKMbmQT8nHjuBJioQm5jTK2iwDcAuBtpdSbZ9f9dyL6g4V9C4JgwD33LMOZMz2r7d111104efJkbOVUU9m+HaitBUrSVGbG2Zi2zZuT/8eFdpmMH+/9fHExP1doQh7ZIieil4hIEdF5RDTn7J+IuFCw5FvBKRN27/auqtfe3h5rOdVUtm/vaY0DwNSpvNyyxfkQetDSAowaBQwc6L/NhAl9UMgFoTfhusWYK0pLg2UIuiqnqiHiDEkvIR88mFPhGxudDsGTlhZ/a1wzbhywf38847GFCLkgpBB3QwBb9O+/HMXFpWlrSzFqVJnn9q7T9Q8cAI4fT5aGTae62k0GZTZaWvz945qxY0XIBaGgibshgA127QIOH67DZz+bzBwcO7YKwAr81V89kJN0fT2R6WWRA+5S4bNhKuRtbTwhWyiIkAtCCvlUcMqU1at5eeeddWhsbERXVxfefbcRRUV1GDIkN+n6uvBUJou8uRk4c8ZsfzbmLbq6uKGEiZAT5bYeTFBEyPOMQpxo602YFDc6cQL4n/8T+OUv7dfkCMOaNcCAAcmO8AA3Fp48mXtQ1tUlBb6xsTGW1H19A+N3/aupAd5/PxkOmAlb8xatrXzhMBFywNy9khfnrFeRctd/0ljCm3zr7NJXydbo4PrruQEBQPTrX+dokClccw3R3Lk913/yk0STJsU/HiKipUuJRo/2f/6Pf+Tv78UXs+/LVqMM0w5AL7zA2z37bPZ9xn3OQjoE5T/51tlF6Mnq1XzW/N3fEV10EVFFBdHp07kdU2UlUV1dz/Xf+x6RUkTHj8c/pmuvJbrgAv/n33mHv8df/Sr7vpRSnueFUirQmPTF46WXMm+nx2ZykY77nPUTcnGt5BF+E2pNTU3iZnGM6e3xL34BDBkCfP3rwH/7bxxv/Kc/xTzYFI4e5clOr8Sa2bP5viG1rklcboBdu5J1S7zQqfAmrhVb8xYHDvAyW6mnIK6VfJkcFyHPIzIdmIUSz1yImPpgz5wBnngC+Iu/4Fjoj38cGDoUWLkyN+MGuEkD0LMjPADMmsVLXWkwzhj53bv9KwwCfDEcNsysOJWtpgy66Go2IR8+HOjf30zI82Zy3MtMd/0nrhVvTDpvF7KbJe4mu6aY3h5rH2vqsJcsIaquJurqinXIH/CLX/CYtm7t+VxnJzc9/va3+XFcboBjx8ioifG0aUSf+ITZPm0cO/fcQ1RSYvZbVVYSfe5zZuMSH7nQA33A+gl5UL9gvpDPE7mmPtgHHuAzprk5ue5HP+J1jY0xD/os997L4vT++97P19YSfeYz/L8tX3M2Nm3i7ySRyLzdFVcQLVhg9a0z8oUvEI0fb7bt/PlEV19ttm2cBoqfkItrJc/QoWJVVVWez+dzPHMmwmRM0tluLq4TM0xvj//zP4Gqqu4ug4sv5uXrr7saXWZ27uQxpRem0qQ2E47LDbBrFy8zuVYADgM08ZHb4sAB864/Y8cmferZyEV4Zzoi5HlKPjXQtUHQSaGuLuBzn+N444ULOd3bFZm+69TJwccfr0ZFRXd/8nnnsT81l0JeW+v//KRJySzLuI4pXXAq02QnwBOeLS38W8dBayvXeDGh0NL0RcjzlHxqoGuDoNbgI48A9fXAJz4BNDQAf//37sbm910D6DY52NXVhDVruk8ODhjAjRNyJeSZGgkDLOSHDgEHD8Z3TO3axT06dWSKH+ecw3dbcWVQtraaW+RjxrBFTnmQ8GWEl7/F9Z/4yPseQX3kc+cSzZxJdOYM0ac/TTR0KE+ixYnp5OBXvsLji3vC8+jR7JOKK1fyNq+9Ft+4vvhForFjs2/32GM8tjfecD8mIv6N7rzTbNv77+exHTnidkxBgfjIhVwSxBrctg1Ytw744he54/pXvgIcOwb8/vfxjtnUHTR7No8v7hrWuuhUJotcP9fU5H48mn37speKBYLFkkelo4N/I1PXStnZopHt7e7GZBMRciE2TCeFHnuMlzfeyMsPfYiF4fGYu8GauoN0Mk7cDYV37uRlJh+5nnDUE5BxsG8f1/TORCKRwCc+UQ2gCJ/7nPtkN9MYco0W8kIpnCVCLuQdTz0FzJ+fLLhUVARceSXw/PPx+ixNJwenT+fl5s1xjYwxschHjODkpTgTDbMJuU5M2rOH+4sePOg+2c00q1NTXs5LsciFgmHlSuDOO5NZgrnk1CmeOLz88u7rFy/mkzHOMWp30MSJVQAUhg71dgeNHs0nfi4s8mHDuHWZH0rxBTEui5yIoz10mrsXuWjeoS1yca0IvZLf/Aa44QbgRz/iMD/b/sqgtT0aGoDOTmDRou7rFy/m5fPP2x1fNurq6vDSS40AuvCP/9jdHZT62Y4dq8bzz8dbPqGxket6K5V5u8rK+IT80CEuT5vJIs9FfZKwrhURciHvOXUKuPtu4KKLgPXruc72d74Tbl9egh2mtsfLL/Ny4cLu6889l8XhlVfCjS8K27bxcvLk5Lr0z9bR0YRt2+KthZOtnommsjI+18q+fbzMJOS5qE8S1LUyciRfIAvFRy7hh32Yhx7iEKtnnuHHt99ONHAgUXt7sP34hRaWlZUFru1xww1Ekyd7P3fddUSzZgUbmw3+9V/5e2pqSq7zC02srKyKbVyjR3Pd72x873s8/lOn3I/puef4vVat8t8mF+UagtRZ0YwaxaGl+QQk/FBI56GHOCnjiiv48W23sZX+xBPB9uPn82z3uS/NdAu9fj0wZ473c3Pn8oTiyZPBxheVbduAgQO7Zyr6fYbdu+MxfTs62F2QLXsSSFrtJpUGo6It8kw+8tRQVEBBKffJbjoZKJsbKpWyMnGtCHnOkSPA008Dn/40UFzM6+bOZWEIGq8d1Lfpdwt9/DjXBUltWZbK3LlcSnbDhmDji8q2bezaeeihpPuoqMj71Ckvj6cWjp7LyJY9CSSFPA73ik5rzxZ+qENRly/vAlEjPvEJtxnLQeqsaETIc0Sqn7a8vBzl5eV50/ty926eVLz8cp7QyzUvvsiTUh//eHKdUsDHPgY8+yxbfKb4CXNZWVmg2h5aoDMJOcDJQjYwnYhli7y7T/yMZ9fgUnzkI/HUwjGtZwIkwzjjmPDct49rz4wYYba9jiLRk5GuaG9PhhSaUl5eOD7yXiPk6ZNP7e3taG9vN55kc8n77ycFcsMG4Kqrcl+Q5z/+g+uELFjQff211wLvvQe8+qr5vvzirR944IFAtT3Wr+eln5DX1HBDAt0oIQpBmkns2AFs29bTfQQAxcXFH3y2QYNWYOTIeGrhaDfJunXZL0ZxJgXpGHJTF4YWctfnw8GDyUgUUwrJIu81k52ZanjDYJLNJStW8ATQY48Rbd5M1K8f0Ze/nJOhfMD55xN9+MM917e28lj/1/8Ktj8bNZnvuCN7zZJ588zrRGfCtI5KUxN/H0D2Wt4XXMC9KuOAa4HU06BBZpOGw4cT/c3fuB/XVVcRXXih+favvsrf7+9/725MRERjxhB96UvBXnP33USlpW7GExb09slOEz9t3H30NP/yL+wWuOEGYNo04JZbgF/+Ejh8OCfDwZEjbP3q2OxUysuBKVOA1auD7dNGTea33+a6JZmsualT7SQFmcYy64djxmQPmautTabNu2bPHkCpZTh50iyxZvx4YO9e9+Pavz+7fzwVbZGb1v4GgucmELFFnilxyovycg7J9Zpcj6v3qSlWhFwp9Qul1AGlVMzTUElMYlBz0ZThrbf476//OilQS5fyAfLkk7EPBwD7mIk4ftyLSy7heO040+EBzoz06j2ZytSpLK5RI1dMY5l1salvfCN7un5tLafNu66vnUgksGJFNYi8K2F5XaTGj09GlLjEpM5KKkGFPExuwvHjXC43qJD7JQXF2fvUFFsW+f8FcI2lfYXCy0+bSq6aMjz8MHdvuemm5LoLL+RogyBNe21aAGvX8vKCC7yfX7CAJ3kaG0O/RWAOH+b3TE268WLaNL7A6CSdsJjWUdFC/pWvZK/eWFPDWakuLV8tIidO+Jcz9LpIxWGRnznDk5ZBhHzwYKC01FzIw6T3ayG2JeS5KDGQFS9/S5g/ANUANphs6yoh6P7760mpqrP+zDIqKSnLeaPfOXOIFi/uuf6OO4gGDSJ6773s+7CdQPHZzxJVVPg/v3o1+y1Xrgy1+1C8/jq/5xNPZN7uzTd5u9/8Jvp7mvj1v/QlovJys/099RSPbfXq6GPzI9tckN9xcffdfLy5rJm+dy9//h//ONjrqquJbrnFbNswfUfXrjU7ttJZtYpf99xz/Dgf+uki1z5ypdRSpVSDUqqh1VGs0XPP1WH48Ebs2tWFhx5qw+nTbXjwwdz10du/H3jzTeDqq3s+d9117B4wiQ6xbQGsXetvjQPArFm8fPvtULsPhbawJ03KvJ222Ldsif6eJn79pqZk+F42dHSIy7rkmeZ5MkUFjR/Px9vRo+7GFrQwlUZ34zEhTHr/wYO8DBq1kloBMdWdEnRscRCbkBPRCiKaT0TzRweNzDdgwwbgj38E7rmHY2s//Wn29d53X3w9AdP58595edVVPZ/70Ie4POsLL2Tfj80iQ8eOAVu3AvPm+W8zZAgnwOhwwDjQQn7uuZm3Ky3lZsNxVUFsbub3M0HHdLsM8/MTi6qqqowGi2704NJPHrQwlSZIf8wwfUe1kId1rbS1eRtTQcbgml4TtbJiBScifOEL/Fgp4I472M/74ou5GdPLLwNDh3qnnA8bxpEsJmOzWWRo/Xr2MWeyyAGOHolbyCsrgUGDsm87aVKyM7xLiNgiNxXykSN5/C4t8uXLl2PgwOANlLXf2qWfXCfPBE28CWKRh+k7GlXI29vD3wnFRa8Q8tOngUSCO8qkHkQ33MBC+qtf5WZcr77KkSE6BT6dSy/lML/Ozsz7sdn9XCfTaPeJH+edx+IaV12T7duzT3RqamqSTRVccvAgJ0eZCrlSfDFyKeR1dXW4444VAII1UNYWeaqQ2w6hC2uRB210HDTUVQv5yJHBxtW/P98BHjoU/k4oLmyFHz4EYDWAqUqp3UqpL9jYrymvvMI/1ic/2X19aSmnoP/ud/G7V06cYIs2PXMylYsv5lT4bJmKNrufb9rE30s2Y/688/g7i6tZwrZt2f3jmpoaPvEz3OlaQRthQW58KircZ1DOmFEHoBE7d5rP/6S7VlyE0GmLPKjlO2YMG2OHDoV+64wcPMjH/MCBwV87ciSPy6Yx5QIrQk5ENxHReCLqR0QVRPRzG/s15ckn+erp5Yu+7jo+wOKub7J2LYdjZRJy7d54443s+7ORcANw9cDp09k/nwltscdRoOrQIb59NbXIq6t56To8Us9rmVrkAAu56ybMJhUG0xkxgksyaIvcRQhdaysLX79+wV7nuq1amGQgjRZym8aUCwretZJIJPDAA9Xo7CzC7Nk9bw+vuopveZ9+Ot5x6WiUiy/23+bcc9lXruO642DTpmSz4EzU1rJLKGq8tglejRsyoXtUunavhBHyykquTOhZU8sS+/fzcWMyn6BRiv3kWshddOlpawvuHweSr3FVoKq9PbqQA/aMKRcUtJAnEgncdttSnD7NTVy9bg/Ly9nyjbtF2Ouvs+Bk8hcWFfGEp4lFboOjR9la1M2CM9GvH4t5pjA/Wz7W7dt5GcS1ArgX8uZmFssgYWsVFSziLqNDsvXE9CM1KchFl57W1nBCHqWtmskxaMMiz3cKWsiXLTOrNbFoEfDaa1yFMC4yNUhI5YILOIX/9GnnQ/ogZM/EIge45srWrd7P2fSxastXu0yyMXYs+ztdu1Z0K7UgzQjiiCUPmgavGTcueYFx4fNtaws+0QmEt8hNj8EwlQ81IuQxYHp72NWVwMmT1RgwIJ465SdPsrtg9uzs286bx115Nm+2Powe6IlLUyGfOpU/h9dEsU0fa3Mzn2iDB5ttrxSLvmuLvKWFOygFIY5YchsWuQufb9wWuekxGMUiHzVKhNw5JreHiUQCP//5UgDx1SnftInFz6+udip6Gxs1trOxdSvXfdGuiWxMmcIXJS/r0qaPtbk5WGQIEE8I4p49Zh14UtFC7tIiDyvk48axqOlwV5s+X6LwFvnQoezKC2qRmxyDYSsfakaO5KJbcd7Nh6Gghfy7310OIPPtoZf7JRUXxW6yNUhIZcoUAEjg9tvdl8TcuZMn7kpKzLbnsXm7V2z6WMMIuWuLnCicRT5qFPvVXVnkHR1sIYZxrWjxd1Eh49gxFrswFrlS4Zo4mByDJ07whSuKkAO5KzltSkEL+ZQpdQBWYPRo/9vDXNQpX7+eT+ba2u7rvSZmHn00AaWW4sgR9yUxd+7sOaZMZBJymz7WsBb54cPuTrBDh1g0gwq5UmzFu2p0rDMgw1jkYWp/mxI2GUgTpq2ayTEYNqtTo4U8390rBS3kHLZXhzff9L89zEWd8vXrOQ47NaPTb2LmrrvuAlE8JTF37sxeyySVc87hRAovIbflYz1yhKNpwgg54G7CUwtxUNcK4LZkrK5Jkm9CbpKenynCJIxFbnIM2hJyvZ98peCFfNy4zFZT3HXKiVjI090qfhMz7T5Hr+27hCNH+EQJYpErlWyW4IUNH6v+mEFitYGk8Ltq+qS71Ae1yAG3Qq6jTsK4VrS17MK1ks0izxZhErbRcbZjMGwtco1Y5DGwdm3mKn5A8qpdUVEFQGHQoDKUlZU5y87av58PyPSIlaDCbPsuQbcgCyLkAFu+LtuXhUmDB9w3FM5XIS9UizxbhImrRsdhS9hqRMgdkkgkMHFiNTZtKsJLL2WfHKyrq8OuXY2YOLEL11/fhra2NmfZWX6x2kGE2UUNh7BCri3yIG3fgiQKhRXysWN50tZVdEhUIT9+nP9sE0XIhw/n6JBc+MizRZhoIbfdXlB85HmKvkXbtYuzOY8cMZ8cjCOLUmdCTp3afX02F4/GVQ2HKBb5e++Z3/YGTRRqbmZxCSpMRUXsv3Zlke/Zw+IyYEDw13pVGrTFvn0syGEKQCkVrGRsENrauN7RkCHez2eLMCkv56Q4240vRMjzlCiJKHPn8sTde++5Gh0L+aBByXhiTerEjD/KWQ2HnTtZmIYPD/Y6Palo6l4J+vs0NQEjRiRQWxs8/LKy0q1rJYw1DrgV8rAx5BpXQt7ayta4XxZstgiT1CYONjl4kC96QerSpJJayjafKTghj5KIMns237q5zKLcupWLP3lVF9QTM35i3q+fu1ZRO3YEt8aB5GtMY7aD/j4NDQm0t4dL9RchD45LizxTxEq2CBNXFRCjJANpCiFNv+CEPEoiysyZvHSZRbllS0+3Sjpe1klJSSmUWm7dR6gJGkOu0fVPTC1y099H+9G3bbsZXV3h7rAqK9kF4qLWfJisTo1r10qYiBWNa4s8E5kiTFxa5CLkeUiURJRzz+VbJVdC3tnJlms2IfeyTurqVqCzs85J1bzTp9mFEUbIhwzhk9/UIjf5fUwa2ZrcYVVU8HduO5xOVy8Ma5GPGsXHWT5b5LYNhrAlbDVikUej4IS8rq4Oy5dzqysgWAhhSQkwbVpSyG23utq5k0VAZ0Rm+xyp1slNN/H4XdT/3r2bxTxIMlAqQeqamCRpZGtkC5jdYYUJQTT5zQ8cYCs/rJCn1/62RUcHZ7JGFfKTJ+3PE5lY5JlwZZFHqUWuKQQhN6y6kXsSiQSWLVuG5uZmlJdPBLAcL71Uh0WLgu1nxgzuk6mtQi0o2jcLIPRko1/Eigm6qcK2bdzL0yZhI1Y0tbXJRhkm1NXVZfwOs1nbpndYqSVj58/PPi7T3zxKVqfGRSy5Dj2M6loB+GLlF2ESlPff54SzKBb58OGcCe3CIg8bQ64ZORJYt87OeFxREBZ5ekhba2sTgKXYtCm4BT1zJrsZ7r3XfqsrncpuYpGnM3Ei3zHoJguZCHonoTvOhxXymhoOE7RVMz2TtR3kDitoyVjTiJooMeQal0Ie1SIH7PrJtfhGEfKiIrac89FHXgilbAtCyL1vxU9g+fLgoqsnPHfvtt/qassWPlFGjAj+2pISFtpsrpUwDR127uRY7fSQSFNqa9llZCtCxM+PXl9fHyj8cvRo9kWbjss0okaEPBhRC2ZpysvtWuQnT3KtfxuulXwvZVsQQm6z9rUW8lGj7Le62ro1nFtFM3lydos8TBz9zp0cfZJaxCsItluraT/6kCHB5zlSKSoK1uzYNKJmzx7edxTBHD+ercGOjvD7SCdKnRWNFnKbE8QmBbNMKCuza5FHTQbSFEIp24IQcpu1r889l7P1Lr7YfqurLVvCuVU0kyaxkGeKKAhzUQsbeqhx0SOzrq4Oixc3Yu7caKUSgsSSm0Y8tbSwWIa98AHJEESbUUjaItdiHAZtNfcFi9y2kOeze6UghNzrBOzfP5zoFhdz5AqR3VZXhw/zyRHVIn/vvcy35GEualGFvLKSv7fGRruRPmHqkKdTUWEu5Kald6MkA2lcxJLv3x8+PV8zaBBPctoU8r5ikYuQRyT9BASq8O1vhxfdmTM5BNFmqys90RlVyIHM7hWvi5pSCk1NTZ7CevgwH9BRhLykhAVz1Sp7DZcBO0IeNCnI5DePkgykcSHkUZOBNLaTgrRFHjU6RFvktmLcRcjzEH0C/o//0QWgEXffHV50p09nEbFZnU6HHkZ1rQCZJzzTa7YopUBnj3wvYY0aeqiprgYaGuxF+hw5wn82hPz06aTbwQb5bJFH8dtrbAt5WxtP8PfrF20/ZWWc4GXrvIxai1xTCM0lCkbINRs2sCiZdlz3QpeY1SVnbbB1K7sfogjmxIl8MmSLXEmt2UJp5ku6sGohD5sMpKmuBjo67E06a3eIDdcKYK+cbUcHC0BUIR8zhidM+4KQR00G0miL3pafPGotco1Y5A7YuJHbqEVh+nRe2iyetWULi3j//uH3oUMQTWLJAbOJTy3kesIyLFxzxW7DZX5t6CEBsC/kNkIPAb6ojxnTN1wrUdPzNXoftvzkBw8mqxdGQYTcMh0dbPlGFfJJk1g0Mwl50Em9qBErqWMzTdM3mfjcsYNPkGHDoo2LLwTLMXCgnUgfXWYlX4U8qo8csBtLfuoUu6JsWeStrfaKjeWzRT5qlH9pXVMKoZStFSFXSl2jlNqilNqulLrHxj692LqV/aE6Fjws/frxxOKmTd7PB0266epi8Y0y0anRseQmEz4m4XRRI1Y0bJHX4WtfsxPpoxtKRLUwy8v5RMs3ixxgIbcVfqgtaFtCfuaMPWGyZZG7EnIb5Hu9lchCrpQqBvAvAK4FMAPATUqpGZlfFQ5d7CqqRQ6wn9zPIg+adLN7N2eR2RDySZOAEyfMBMAknG7nzuj+cSBZzra21k6kT3MzW9NedduDEDQpKBu6zkoUIdd3c3/4QxHefDN6MTbATjKQRseh25ggJrJnkbtwrYiQm3MRgO1EtJOIOgE8DGCJhf32YMMG9j3aEMzp09ny9cq8C5p0YyNiRZNaPMuETOF0UcrXpjNhQjKW3AY2Qg812YQ8iJuspYUTxsIKQPcSvYSurmghmhob6fkam9mdx45x6roNi3zkSHaDiEUeHBtCPgFAakrG7rPruqGUWqqUalBKNbSGPILGjgVuvDFcH8V0ZsxIukTSCZp0YyOGXKNDEE0nPDOxaxffQtsQ8pISDvUrNCEP6ibToYdh/apRWhFmwqaQa+vZhpBr69mGRV5czGGMIuTBsSHkXod8Dw8vEa0govlENH90yF/9q18FHnkk1Et7oCNXvPzkQZtXbNnC2XI2bnuDVEHMRtSqh+nU1NgR8tOn2YVhW8i95hWCCuuePdHcKjbrAqWiXSs2LXIbkSv6YmDDIgfYT25LyNvbo4ceavqCkO8GUJnyuAJAi4X9OmXqVLa6vPzkpqncGl0sK+rsOMAiXlNjR8htxZBrqqvtCPnevXynYFPI/ToFBRXWlpZoESs26wKlsn8/W6s27ka16NoQcpsWOcBjs+EjP3WK55rEIjfndQCTlVI1Sqn+AD4D4EkL+3XKoEEsmH6RK0HS9036dAZh8mQ7nYJ27uSIDhsRGAALeUsLnyRRsBVDrskUghhEWInYItdZmWGwWRcoFVvJQAAbC2Vlvdsi16KrY8CjMmpUfpeyjSzkRHQawN8AeAbAZgCPEJHD9sb2mD49elLQyZM8oWhjolNjUgXRhKjla9PRkSsRvQQfvP5slYHIZBLyIG6yY8e4aFkUi9yrLtDHPx6+LpDGVjKQZvRouxa5n5AHzcewJeS2sjo1+V7K1kocORH9gYimENG5RBTN9IiRGTOSselAuMp+O3aw4Nq0yCdN4qt/1BPNVgy5Rgt5VPeKFvLKyszbmZJJyIO4yWy0eNPvqe/mRoxoxNix0UQcsGuRA8mkoKi0tvJd39ChPZ8L0wTFtpDbdK0A+eteKajMTttMn87hh+++G+6gA6L16fTDpHiWCTt22BVyneZvQ8hHjbLXM3LMGHYX+EWumLrJbAl5KraSgvbvt2uR20rT1zHkXvNDYSJ4ysv5riiq+85WwSyNCHkeo4tnbd4cPmxMC7mO/7aBSTlbL1LvKCorq3H4cMLaRCfAvvaSEjtCbss/DrDraMKE6ElBNtPzNTbS9G2m52tsC7kXYSJ4bGV3unKtiJDnIdOm8XLTpvBhY1u38olvy7oE2HdcXBxMyNPvKHbv5gbVu3ZFzyrUFBezAEftFGRbyAE72Z02sjrTsSHkNmPINWPGsNhFnbxrbfX3j4eJ4LEt5LYt8nwtZdunhXz4cBbhzZvDh43ZKpaVSr9+7I8OIuR+Dap/85toiSjp2AhBbGry94+H7UBkS8hHjIheLS+VceNYyKNMXNtMz9doKzpqqF9bm79FHjQfA0heFGwIeUmJPQNLLPI8Z/p0tsjDHHRA9IbLfgSpggj43zns2xcxxCSNqEKuG0roidNUws5TAJmTgkyx0RkonfHjk66RsLiyyIHoE56ZXCtB8zEAuxa5jcqHGhHyPEeHIH72s8EPurY2PmBcCHmQKoiAu0SUdGpq2EI8eTLc63X5Wq/Qwyjp7RUVPKYoJ1rUZCAvbDRh5tcmcP31dnqlAnayOzs6gKNHMycDBW2nqIU86p1Ce7s9twqQ/6Vs+7yQz5jBs+S7dgU/6EyKZYV1FUyaxCeJ6QHtdUdRVBQ9ESWdqLHk2pr3EvIo6e06BNG0EbMXUdPzvbDR8u3ZZxMAlmLPHju9UgE7Qm6r6XIqNi1yWxOdmnzO7uzzQh6lW1C2YllRXAVBi2el38YWF1dh0aLoiShA94vRN75RDSAResIzk0Ue5a4iaoOJM2fY8rVtkWu/dhQhf+aZZQDsFuKyIeTaLWMrPR/gEgRDhthzrdhEhDyPSQ1BDMqWLTwx6ZehGMVVECaWXN9RHD/ehTNnGnHVVXZEPPVitH8/R8M88kg4a7CpCRg4MCkkqYSdpwCiC/mBAyzmrlwrUYT8+HH7hbhGjOAoJC3kYe4cbddZ0dhIChIh72OMHs0Hjl/NlUy88w77sktKvJ+P4iqoqeGmCWGKZ+liWfpiEAW/aJjHHgtnDTY18YXPaxIqzOSYZvx4FqawQu4iGQjgyKiBA8MJuRZXj2KiAKLNfxQV8bHf2hr+ztGFRQ7w+ZhvPnJAhDzvydQtKBMbNmRuOxfFVdC/PwteGCHXr7Eh5H4XnaNHw1mDjY2Za6wEnafQFBezmEcVcts+cqXCZXd2b1DRk7C9UlPRSUFh7xxdCnkUi7yjg+e9xEfex9AhiEFC106cYMs3U9u5KK4CIFk8Kyj6NTayOv0uOv37h7MGtUXugiix5K4sciBcUpD3nRATpVdqKlrIw945trbyhcpWhUFNeXk0IddiKxZ5H2P6dPapBYmp3byZhT+TkEdxFQDJWPKgsdE7dvBBbOME87oYFReXYsCA4NbgiRP8HeejkLe0sFXv5buPik4KCoKfiCqlIvVKTUULedg7x9ZWtnptVdfURLXIbWd1avK5lK0IOZITnkH85Bs28DKTawUI7yoA2P9++HDwtODt2+24VQDvi9ENN6zAsWN18DEYfdHa5JUMZIOKCg4/DJMUpOuQ2xYlIJxFHkdegC5lG/bOMVNWZxTKytjy1VVJg2K7YJYmn0vZipAjXAjixo0cKmWzKFU6Yft3bt8OFBeHi1/3Iv1idP31fDHycd/6kimG3AYVFewbPXo0+GtdxJBrxo/nkz9IRb+objkTxoxhC/PGG8PdOWbK6oyC9m2HdWO4ssjzObtThBwsAEOGBLfIp0/3j1ixQZgQxM5OoLExgYaGcPHrJoStS54phtwGqUlBQcPpXGR1asJkd+o7odGjqwAojBtnxy+eSmqafpg7R1dCHrXeiu3KhxoR8jxHqeSEpynZIlZsUFPDYwsi5Jyoswzvv2+/k3vquIBwQl5S4s7y1UL+q18FD6eLWmcl04UjbFJQXV0d/u7vGgF0oaHBjl88lahJQZkqH0YhananWOR9mPPPB9atM/OvHj3KVl+miU4bDBzIovnOO+avYfeQm07umnHjODwyaHanrnrowg8NAGvXJgBU4/77bw4UTnfiBLs+wgp5tjjsKElBumCWi0nYKEJ+5gwLrUvXSthY8oMH+Rjz6loUhXwuZStCfpZ58/hKa2JlvvUWL2fPdjokAGz164lVE1jI3U6UFRWxeySoRZ4thjwKiUQC9967FIC/497vQqbrs2iLPijZ4rCjCPm+fSxs/fqFG1smtAiHEfJDh9jocSnkYS1ynQxkq/KhRizyAmDePF6uXZt9W72Nfo1LZs7kmi6dnWbbb94MjBjhfqIsTDnbHTvcTQ5nirvW+F3IojaDzhaHPXo0X/zCVEC03aszlSilbF0lAwF2fOS2/eNAdCHfvRu4555ksT2biJCfZfZs9t++8Ub2bRsa+Dbcr9B/2IqHXsyaxWFYpn7yzZuB+fOjxa+bEFTIjx1jUbIVFplONrdRpguZnoQNe8OSLVSwuJjFOIxF3tLibk5hyBB234WxyLWQu/CRDx7MrrsoQm7bPw5EL2X77rvAffdFq9Dphwj5WQYOZNE0scgbGoD5872fi1Lx0As9oWriXiFiIZ8xI1r8ugk1NXwyv/ee2fY7dvDSlUWeyW2U7ULW3MwWc1gfuUmoYJikIMBtWKRS4Xt3urTIlYpWb8WVkAPRsjv162xnwgIi5N2YN4+FPNOE59GjfGvkJ+RRKh56MW0ai8zGjdm33bWLhVXHxbskaAiiFnJXFrmfmNbX12e9kDU1sYiHDSU1yeANkxTU1cWvcRUWCeSnkAPRsjtdFMzSRBFynUg0YoSt0SQRIU9hwQI+CDL5sNat46WffzxKxUMvBg5kK9ZEyHVCUxxCXlvLS9NkJZv1X7zQYjpiBMddV1aau5Ns1H/JdgcURshbW9mt5soiB5LZnUFx0VQilSj1VsQi7+MsXszLF1/03+aVV3jpZ5G7SK2eNctMyE3LBthAN9MwnbjZvp2tv2HD3I2prq4OP/tZI4AuPPmkuTupuTm8f9yU8eOTNc9NaWnhpWuLPOxk57BhnN3sgrAWeWcnZ6u6mOwE7Fjkw4dbG84HiJCnMGkS+zIzCfmLL7IP2mbn8GzMnMmTndlSvN94g0PoXFlJqYwYwRN4QYTcZTkDjU5W0jXZs3HmDLuk4hDyrq5g1q+r0rqpaNdK0Po0Bw64c6sA4YXcVeVDTVSLfNgwN3kUIuQpKAVceinwwgveB/bp08BLLyUtdy+iVjz0Ys4cFoH16zNvt24dMHdu6LcJzNSp5slKO3a484+nol0+pslK+/bx7+oqvl0TpoORy9K6mjFjuH73sWPJdSZRV/v2JePjXaCFPOgFxlVWpyaqRe7CPw6IkPdg8WI+2bwsujfe4Nu2TEIO2I8YufBCXr7+uv82773H1nGcQj5tmpmQnzjB32lQIQ8TxjliBP+ZWuRRQw9NqazkZZDQs5YWNi5cxZEDyVhynUFqGnW1b59/+K0Nysv5Ahu0AJqryoeakSPDl7I9dMiNfxyIKORKqb9USm1USnUppXy8xoXFRz7Cy6ee6vnc73/PESQf/nC8Y6qs5BNuzRr/bdavZ6v9gguiv5+pgE6bxhZQtjAxXbs9iO8+Shhnba25RR41GciUMEK+Zw+LuIusTk26kJtGXe3b5/YCEza703Y0Tfq5sGMHH39hStnms0W+AcCNADJ4lQuLyZNZcFau7PncypXAhz7k1jfohVJslWeyyHU0TVSLPIiA6gnPbFa5Lkam676bECWMs7Y2/yzysjKOQApqkbv0jwPJ/euIGpOoq44OFiWXFnk+CLnXufDww0sBJEK5Vw4dylMhJ6LNROQg4TS33HADT2qmplRv385W7/XX52ZMF13Egpnqy0yloYEPfm35hSWIgE6bxstsQr5xI1uVQVwrURtXv/su36Fko6mJTy7bBZbSUYp/m6AWuUv/ONCzDoxJ1JW23l27VoBgSUGJRALf+lY1gCIsXBgtoxrwPhc6O08AWBZayF25fGLzkSulliqlGpRSDa1h4p1i5OabWQR++lN+nEgkMG9eNYAi/PCH0Q+QMFx4Ibsn/Kzy//xPYNGi6IWCgghoVRWnLGfLOt20CZgyJZiLIEoYZ20th6GZxG27rP+STlAhj8MiLyvjRCj9XZlEXWkDJ58scm09Hz7cBICwa1f0Gvz+RkNzKCF3Gd+eVciVUn9WSm3w+FsS5I2IaAURzSei+aPj9k0EZOpU4LrrgAcfBH72swRuu20pjh7lA2TPHrtNGkxZuJD9888/3/O5lha+Y8g2CWtCEAEtLgbOOw94883M+9y0KZhbBYgWxhkkBHHbNnanxUFlZdInn42ODrZGXVvkRUXdyweYRF3lo5DbzqgGMhkNEwOXsj11iif9cybkRHQlEc3y+PutmyHlB9/9Lp9IX/3qMpw86a5JgynDh7N75c9/7vmcjnu/9FLv16ZO2JSXl6O8vNx3IjOogM6Zw0LuFyZ24gQLatAkpShhnKYhiJ2d7FqJU8j37jXrRamF1bVFDvTMOs0WdaWF3OVk54gRfJExFXLbGdWA97kwaFApgOWBLXLX8e0SfujDxRcDDzwAnDrltklDEK68kiNXjhzpvv7ZZ1no58zp+Zr0CZv29na0t7d/MHlzyy23QCn1gagHFdA5c3g8fv07dcRKUIscCB/GWVXFLiZd38UP7Ud3Gd+eehF98MFqdHUlPsjYzISON3dtkQN8sQhSPsBlswtNURGLnqkX1kVGtde58JOfrABQF1jIXce3g4hC/wG4AcBuAB0A9gN4xuR18+bNo0KhoqKKAHj+VVVVUX19fWxjeeklIoAokUiu6+wkGjWK6OabvV9TVeU//vS/0tLSwJ/ntdd4TE884f38T3/Kz2/fHmi3kampIfrMZzJv89RTPLZXXnEzhvr6eiotLU37nkvpu9/N/h3X1/PYNm1yM7ZUbr+dqLzcfPuvfIWPOdfMmEF0441m23p912GOZxNKS4nuvjvYa158kX/PP/0p2nsDaCAPTY0atfIEEVUQ0QAiGktEV0fZXz7y/e/3vL3S2G5qnI1LLmFr89e/Tq574QW+2t94o/drgtw5hHEZzZrF1pMOf0zn9dfZCtHujrgw6cGqa7y7ssi9m12cwIMPZv+OdVVJ1/HtALtW2trMm5e4TgbSjB1rXtJAW89KcdG0KBnV2fIowmR3urbIxbWShdTbKy/i9JcXFQF1dexK0a6Mn/6U/YlX+1xCg95aBnUZlZZyGGJDg/fzr7/OBcZst93KxvTpnOmaqUjV9u3sknJVm8bvu2xry/4dNzWx68LHhrCKDkE07WAUl5CPGZN045hw/fV1IGrE978fPqPaJI9ChLxA0b5a5aNGcfrLb7+dw/i+8Q2e5HzsMeDLX/Y/4b0mbDIRxqe4aBHw8ss9RfPkSQ5N1CUG4mT6dI78yFQvXUesuLrI+H2XQ4dm/45d9jdNJ2hP0f37Mwu5rQ5ZQSxyIBlzHiUoziT6RYS8wHExoRKUykrgb/8WePRRDjesrgbuvdd/+/QJm7KyMpSdje1KvzCFrdK4eDFPeL79dvf1r7zC4r5gQeBd9iCoOOjJVV2j3Yt33nEbseJ1EVWqFJMm+X/H+nP+6U9F2LgxnpyF9OzObGRKz7fZIWvMGD6uslX91NhoP2cS/RJWyIuLHSaeeTnOXf8V0mRnKl4TKkqp2Cc+u7qIfv1ronvuIdq7N/x+6uvrqaqqipRSkcbf3MwTOf/8z93Xf+tbRCUlREePhh+jHmfQiaxDh3hM993n/fzhw/z8P/xDtLFlI/07njevnqZP9982rgm7VFpa+Lt48MHs2x47lvl79Ztcr6qqCjyuf/s3fq/mZrPtn346+uS1yfhvvZWosjLYfm+/nWj06PDj0sBnslOEPCD6xEwV8VyKer4waRLRVVd1X3fBBUT/5b9E33dYcRg3juiv/sr7OR0B9LvfRR+fKfX19TR0aBUBiiZO7HmM2BTBIJw+TVRURPSd72TfdutW/t5++Uvv59PPidRzIyi//S2/1+uvm23/q1/x9tu2BX6rDzC5mH7960SDBwfb76c+RTR1avhxafyEXFwrAdH+8qqqKh2C+QH6cdzRLPnAJz8JPPdc0k+5ezdHslx1VfR9h032mDHDv3yAdgPNnh1lZOZol8OxY5wh3Nzc8xhxkdRiQnExuzFMXCs6vl3XV0/HpvtRu29MJzxtuFZM8ijKyrhsdEeH+X5dpucD4iMPTbaTKxfZn7nkU59if/ijj/Lj+npOBLrppuj7DisO8+ZxoTOvsLq33+ZuLXFNb5hMouVyDuacc2CUqKRrxfgVZ7PZIUsLuemEZ1sb142J2kotWyJamIJeIuR5isnJlYvsz1wxZw7XQr//frag/umfuG67jYJUYcXhwgtZxNMnYQG+W5g9O76wSBNr20WbQFNMC3plyzi12SErvVZ6NlpbWWSVshc540U+Crn4yEPinbUXr2/TJjYmPp99lkgpogEDiIqLOeszl+PbuZN9pj/5Sff1p04R9e9P9I1v2BtfNkz93/X19TR4MPvR45xr+epXiYYNy77d7bcTlZW5H49myBD2SZuwZAnR7NnuJ41feIGPqz//2fw1w4YR3XVX9PeGTHbaJ9PEZxzRBraweeD/+78TfexjRE8+6WCgHmQS+K4uFp3Pf777a155hY/8xx+PZ4x6nKbf8SWXEF12WXxjIyK6/37+Tg4fzrzdxz5GdP75sQyJiIhqa4k++1mzbS+5hOjDH3Y/abxxI39XDz9stn1nJ2//ve9Ff28RcsfYCuXLBbmKloiKiTguWUJUVcWirvnBD/jI37cv/vHyd62oXz//Y6SsjOhLX4p3bI88wt/J+vWZtzv/fBbzuLjkEqIrrzTbtqaGqK7ObuSMF/v383f14x+bbX/gAG//ox9Ff28/IRcfuSVsN1yOk1xFS0TFZALx6qs53X3r1uQ2zz/PvnuXZVi90MfIXXd1oV+/Rtx0U89jpL2d/6ZMiXdseson20++e7d/xIoLTNP0iTjqZvx495PG2tdtWpnReeVDyGSngPzIWA2DyQVI16B55hlenjjBNd0/+lHXo/Nn1iweh1f5AH3B0f1Q40L/1H7liAEec3t79HaCQTBN0z96lDNAx41zP2lcUsLZnaaTnSLkQizkMloiCiYXoNpajid/6CF+/Nvf8gm/ZEkcI/Rm1ixeesW464qNcQv52LFcwyeTRb5nDy/jtshbWzMXPwOSMfDjx9uNnPGjvFyEXMgz4jjwXWB6AbrtNuDVV4FVq4Af/pDL1l52WYwDTUN3S/ILixw6NP6yv0VF2VvRZYshd8HYsdz8I1unoFQhB9y7OkePNhdyPXaXQl7ibtdCIVFXV5f3wp2OHu+yZcvQ3NyMiRMnYvny5T0+xxe/yN2erriCfan//u8sXLli6FAuduZlka9bB5x/fm7GV1WV2bWiRT5OIdcFvVpaMnckiqOPaCrl5Zm/q1S0L91lq2KxyIWCxsTyGjIEeOopzjL90Y/sZJtGZc6cnjXcz5wB3noLmDs3J0PCxImZxWnHDk7nj6u8LpBMPNKJSH6kW+SuKS83n+xsbWW31bBh7sYjFrnQJ5g5E8in0jcLFwIrV/JEnrY0t2/nGh65EvLaWrZ8T54EBg3q+fyOHSz2/frFNyYt5No/78fevcCAAdHT803RPnKi7NnBBw6wNe4yi1gsckHIAYsW8fKVV5LrVq/m5fz58Y8H4NrsRP5Nq3fssFNyIQjjxrGbKZuQ79vH1nhcJRfKy7n8w/Hj2bdtbXXbqBoQIReEnDBvHluQL7+cXLdqFQuEngyNGx27rnuZprN9u7v+pn6UlLCYm7hW4nKrAEl/t8mEZ2urW/84IEIuCDlhwABupv300/y4q4vj2y+7LHcTsbpbUmrylObwYQ6ji9siB9i9YuJaiWuiEwhWOEuEXBB6MTfeCGzcCNx/fwLnnFONlpYiPP98PO3dvBg2jMP9vCxy7W7RQp5aXbC8vBzl5eVOKg0CZkIeV0NojRZykwnP1HkQV4iQC0KO+Mu/BIqLE7j33qXYv58bTrS15bYpyeTJ3hZ5aqJSel/O9vZ2tLe3gyhaj04/Kioyu1ZOnOC7hTgTlUwt8lOn2I8uFrkg9FLGjQMGD16GM2cy14uJk+nT+S6Buje/wttvsztoyhTvGjep2B7/hAnchNlvYlEnKsUZFmlqkccRQw6IkAtCTjl2LL8Kls2Zw9ZtepOJ9eu51EFJidnYbI4/Wwiifqs4SwMNHw7075+9DowIuSD0AfKtYJmOYV+3jpfaF/7MM0XYupX93yZjszn+bEKuk5ji/MqU4jsqnVHqhxZ68ZELQi8m3wqWnXcei9S6dd194QDhvffY/33dddf1GHMqtsefrTJjczNH+uh0/jCEaQ03blz2htVxWeSRGkQAuB/AOwDWA3gCwAiT1/XGxhKCEJZ8a0oybRrRX/xF5oYjqWMuKyujsrIyZ+Pv6CAqKiL69re9n7/1VqKKivD7D9sha8kSolmzMu/7hz/kphKHDoUfXypw0SEIwFUASs7+fx+A+0xeJ0IuRCHfhK+38fnPE40c6b7TThCqq/1bvl1+OdHCheH3HbZD1u23E5WXZ973PfcQ9evXvUNVFPyEPJJrhYieJaLTZx++CiDGACChL5Ie+uYi3K2vc+WVwKFDwNix+eO/r60Fdu70fq6pKZp/PGyHrHHjOPyws9N/m3372D/uunSATR/5XwN42uL+BKEHJu3dhGhceSX7nC+6aDkGDcoP/72fkHd2spDrrNQwhJ1w1iUBMrWi27s3mu/elKxCrpT6s1Jqg8ffkpRtlgE4DcDXLFJKLVVKNSilGlpN6z8KQhqF2l+0kBgzBrj2WmDNmjosXLgCQO4bjtTWcgTIsWPd1+/cyeV/o/Q4DTvhrIU8U+RKS0s8Qh7JR84uG9wKYDWAUtPXiI9cCEtYf6YQjNWriYqLeRbt1ltzPRqi3/yGx/Lmm93Xr1zJ69esibb/MPMua9bwe//2t/7blJURffnL0caWClz4yJVS1wD4FoCPE5F/qpcgWCLfwvV6KwsWAL/7HfAP/wD8+Me5Hk2yh+nmzd3X63ICpq4Vvxoxy5Ytw/LlywO1htMWuV8IYkcHt3nLC9dKFn4MYCiAPyml3lRK/auFMQmCL4XaX7QQufZa4N57ucNSrpk2jbsTpfc53bKFXUEjRmTfh+0aMWPH8tLPtRJn16JIHYKIKObqxIJQmP1FhWgMGMBivn599/Vbtpj7x01rxJgeW/36cc0VP4tcry8Ei1wQBCEWZs/ubpF3dXGP0/PPN3u9ixox48fzhKYXer0IuSAIwlnOO49DDY8c4cfbtnEUywUXmL3eRY2YiROTRbvS0UIeh2tFhFwQhIJAC/aaNbxsaODlvHlmr/eaKE8lzKR5VZV/DZhdu7hCoi556xIRckHIAWGKNPV1Fi3iCc/nn+fHq1bxJKdpj9P0ifKysjKUlZVFmjSvruY2ePouIZXGRhb6OFr3RZrsFAQhODp6Qk+86YgJADKJm4EhQ4CLLuI+p3//98AzzwBXXME10k2xPVGum1k0NbHrJ5XGRqCmxtpbZUQsckGIGSkzEJ5Pf5pL7P7gB9z+bcmS7K9xSaqQp/Puu2yxx4EIuSDEjJQZCM/NNwNDhwLf/CZPIn7qU7kdjxbqdCE/fpwLaolFLgi9lHzrCmRKPvj1y8qAJ54APvMZYOVKji/PJWPGAAMHshslFf1YLHJB6KUUYpmBfCoffMUVwEMPsb881yjFBb22beu+Xgu5WOSC0EspxDID4tf3Z8aMnjVgduzgZVxCLlErgpADCq3MgPj1/ZkxA3j8ceDUKXazAMCmTewGct6r8yxikQuCkJVC9evHwcyZXC5gy5bkuk2bWOBddwbSiJALgpCVQvTrx8WMGbzcuJGXREkhjwsRckEQslKIfv24mDyZk5J0Qa+mJuDgwZ4JQi4RH7kgCEYUml8/LgYMAObMAV55hR+vXs3LSy6JbwxikQuCIETk0kuB117jrkAvvwyUlnLZ3bgQIRcEQYjIFVewiP/xj5yodOWVwWrAREWEXBCEXk0cGakf+QhneX7uc8CePVwTJk5EyAVB6LXElZHarx/wne8AR49yx6JPftLq7rOiiCjedwQwf/58atBV4QVBEBxRXV2NJo/ShFVVVWhML5Bige3bgQkTgEGDrO8aAKCUWktE89PXS9SKIAi9lrgzUiflqB29uFYEQei19JWMVBFyQRB6LX0lI1WEXBCEXktfyUiVyU5BEIQCwW+yUyxyQRCEAkeEXBAEocARIRcEQShwRMgFQRAKHBFyQRCEAicnUStKqVYAPfNmzSgH0GZxOIWAfOa+gXzmvkGUz1xFRD06geZEyKOglGrwCr/pzchn7hvIZ+4buPjM4loRBEEocETIBUEQCpxCFPIVuR5ADpDP3DeQz9w3sP6ZC85HLgiCIHSnEC1yQRAEIQURckEQhAKnoIRcKXWNUmqLUmq7UuqeXI/HNUqpSqXUKqXUZqXURqXUXbkeUxwopYqVUuuUUk/leixxoJQaoZR6VCn1ztnf+pJcj8k1Sqmvnz2mNyilHlJKDcz1mGyjlPqFUuqAUmpDyrpRSqk/KaW2nV2OtPFeBSPkSqliAP8C4FoAMwDcpJSakdtROec0gP9KRNMBLABwRx/4zABwF4DNuR5EjDwA4I9ENA3A+ejln10pNQHAnQDmE9EsAMUAPpPbUTnh/wK4Jm3dPQCeI6LJAJ47+zgyBSPkAC4CsJ2IdhJRJ4CHASzJ8ZicQkR7ieiNs/8fA5/gE3I7KrcopSoAfBTAz3I9ljhQSg0DcCmAnwMAEXUS0eGcDioeSgAMUkqVACgF0JLj8ViHiF4EcDBt9RIAvzz7/y8BXG/jvQpJyCcA2JXyeDd6uailopSqBjAXwGs5Hopr/hnANwF05XgccVELoBXA/znrTvqZUmpwrgflEiLaA+AHAJoB7AVwhIieze2oYmMsEe0F2FADMMbGTgtJyJXHuj4RO6mUGgLgMQBfI6KjuR6PK5RSHwNwgIjW5nosMVIC4AIAPyGiuQDeg6Xb7XzlrF94CYAaAOcAGKyUujm3oypsCknIdwOoTHlcgV54O5aOUqofWMQTRPR4rsfjmEUAPq6UagS7zj6slKrP7ZCcsxvAbiLSd1qPgoW9N3MlgHeJqJWI3gfwOICFOR5TXOxXSo0HgLPLAzZ2WkhC/jqAyUqpGqVUf/DkyJM5HpNTlFIK7DvdTET/O9fjcQ0R3UtEFURUDf59/4OIerWlRkT7AOxSSk09u+oKAJtyOKQ4aAawQClVevYYvwK9fII3hScB3Hr2/1sB/NbGTkts7CQOiOi0UupvADwDnuX+BRFtzPGwXLMIwC0A3lZKvXl23X8noj/kbkiCA74KIHHWQNkJ4PM5Ho9TiOg1pdSjAN4AR2atQy9M1VdKPQTgMgDlSqndAP4WwPcBPKKU+gL4gvaXVt5LUvQFQRAKm0JyrQiCIAgeiJALgiAUOCLkgiAIBY4IuSAIQoEjQi4IglDgiJALgiAUOCLkgiAIBc7/B9JeTbAzRnieAAAAAElFTkSuQmCC\n",
"text/plain": [
""
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "jUnhgaxOItiZ"
},
"source": [
"This certainly looks better, and we can quantify just how much better with the RMS error. "
]
},
{
"cell_type": "code",
"metadata": {
"id": "8N98h7pRItiZ",
"outputId": "5acc7885-0b16-4d16-dcd1-a60234a936c1"
},
"source": [
"E = np.sqrt((1 / n) * np.sum((np.exp(a * x) * np.sin(b * x) - y) ** 2))\n",
"print(E)"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"1.9406183256452776\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "PKnO-JVcItiZ"
},
"source": [
"It looks like this approach could work quite well, but we don't just want to keep guessing and checking. Instead, we want a systematic way to find the *best* fit. At least in principle, we already know how to do this. Remember that the only things we are actually allowed to change in this problem are $a$ and $b$, so our formula for the RMS error is really a function of $a$ and $b$: \n",
"\n",
"$E(a, b) = \\sqrt{\\frac{1}{n}\\displaystyle\\sum_{k=1}^{n}\\left(e^{ax_k}\\sin(bx_k) - y_k\\right)^2}$. \n",
"\n",
"In python, this is "
]
},
{
"cell_type": "code",
"metadata": {
"id": "oxBzJsU5ItiZ"
},
"source": [
"RMS_Error = lambda a, b: np.sqrt((1 / n) * np.sum((np.exp(a * x) * np.sin(b * x) - y) ** 2))"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "iz6k-PoOItiZ"
},
"source": [
"(Note that we did not define n, x or y inside this function, so python will check for global variables with those names whenever RMS_Error is called. This is ok for these notes, but can easily cause problems. For instance, if you make a new variable named x, then RMS_Error will use that new variable instead of the old data. We could fix this by passing in x, y and n as arguments or by recreating them inside the function.)\n",
"\n",
"To find the vest fit, we need to minimize this function. Unfortunately, if we try to do so by hand we will quickly run into a system of equations that is impossible to solve. Luckly for us, we already know a way to minimize functions of multiple variables in python: We can just use `scipy.optimize.minimize`. \n",
"\n",
"Remember that `minimize` requires us to write our function in a special form. In particular, we have to write `RMS_Error` so that it only takes one argument, but that argument is allowed to be an array. We will therefore pretend that `coeffs` is the array $[a, b]$ (but we willnot define it in python, because we don't want to choose specific values for $a$ and $b$). "
]
},
{
"cell_type": "code",
"metadata": {
"id": "aOkGIvV8Itia"
},
"source": [
"RMS_Error = lambda coeffs: np.sqrt((1 / n) * np.sum((np.exp(coeffs[0] * x) * np.sin(coeffs[1] * x) - y) ** 2))"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "bp9RxJ-AItia"
},
"source": [
"This is exactly the same formula as before, except we replaced `a` with `coeffs[0]` and we replaced `b` with `coeffs[1]`. We can now use `minimize` to minimize this error function. Let's use a guess of $a = 0.1$ and $b = 5$, since they gave a reasonable graph before. "
]
},
{
"cell_type": "code",
"metadata": {
"id": "t8mwO4jFItia",
"outputId": "2288999a-2f07-42fa-a0ba-4718a0a48b3c"
},
"source": [
"coeff_min = scipy.optimize.minimize(RMS_Error, np.array([0.1, 5]), method='Nelder-Mead')\n",
"print(coeff_min.x)"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"[0.09917122 3.99676341]\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "CO9sTpvJItia"
},
"source": [
"Notice that the resulting array is in the same order as we chose before. That is, $a$ is the first entry of `coeff_min.x` and $b$ is the second entry of `coeff_min.x`. "
]
},
{
"cell_type": "code",
"metadata": {
"id": "3fnJPj_7Itia"
},
"source": [
"a = coeff_min.x[0]\n",
"b = coeff_min.x[1]"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "qosckzYkItia"
},
"source": [
"We can see how well we did by calculating the RMS error of our fit"
]
},
{
"cell_type": "code",
"metadata": {
"id": "FdLYZEuzItib",
"outputId": "f17390e1-c2c8-4492-c432-7064f59ec2fc"
},
"source": [
"print(RMS_Error(coeff_min.x))"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"0.30227472171150016\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "ckqnZg9gItib"
},
"source": [
"and by plotting our new formula."
]
},
{
"cell_type": "code",
"metadata": {
"id": "4f_Uz0hHItib",
"outputId": "4ccbd7b3-79d1-4d1e-e3de-08672d1c3397"
},
"source": [
"yplot = np.exp(a * xplot) * np.sin(b * xplot)\n",
"plt.plot(xplot, yplot, 'r', x, y, 'ko')"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"[,\n",
" ]"
]
},
"metadata": {
"tags": []
},
"execution_count": 72
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "oD7cG3TBItib"
},
"source": [
"As you can see, this is a substantially better match than any of our polynomials. There is one important word of warning worth including here: The function $E(a, b)$ is highly nonlinear, and so it is entirely possible that it has more than one minimum. `minimize` has no guarantee of finding the best fit; it will just find a local minimum close to your initial guess. This means that if you make a bad initial guess for the coefficients, then you can find a very bad fit for your data. For example, "
]
},
{
"cell_type": "code",
"metadata": {
"id": "gjlbQlFmItic",
"outputId": "7835cbc4-097a-4313-a9aa-bd320ee4abbe"
},
"source": [
"coeff_min = scipy.optimize.minimize(RMS_Error, np.array([0.1, 10]), method='Nelder-Mead')\n",
"a = coeff_min.x[0]\n",
"b = coeff_min.x[1]\n",
"yplot = np.exp(a * xplot) * np.sin(b * xplot)\n",
"plt.plot(xplot, yplot, 'r', x, y, 'ko')"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"[,\n",
" ]"
]
},
"metadata": {
"tags": []
},
"execution_count": 73
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "iRJW7SvNItic"
},
"source": [
"There is no systematic way around this issue; you just have to know enough about where your data came from to make a reasonable guess. "
]
}
]
}