364 lines
88 KiB
Plaintext
364 lines
88 KiB
Plaintext
{
|
||
"cells": [
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "232d1306",
|
||
"metadata": {},
|
||
"source": [
|
||
"# Exercises week 34\n",
|
||
"\n",
|
||
"## Coding Setup and Linear Regression"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "9b66a351",
|
||
"metadata": {},
|
||
"source": [
|
||
"Welcome to FYS-STK3155/4155!\n",
|
||
"\n",
|
||
"In this first week will focus on getting you set up with the programs you are going to be using throughout this course. We expect that many of you will encounter some trouble with setting these programs up, as they can be extremely finnicky and prone to not working the same on all machines, so we strongly encourage you to not get discouraged, and to show up to the group-sessions where we can help you along. The group sessions are also the best place to find group partners for the projects and to be challenged on your understanding of the material, which are both essential to doing well in this course. We strongly encourage you to form groups of 2-3 participants. \n",
|
||
"\n",
|
||
"If you are unable to complete this week's exercises, don't worry, this will likely be the most frustrating week for many of you. You have time to get back on track next week, especially if you come to the group-sessions! Note also that this week's set of exercises does not count for the additional score. The deadline for the weekly exercises is set to Fridays, at midnight."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "36d8750b",
|
||
"metadata": {},
|
||
"source": [
|
||
"### Learning goals\n",
|
||
"\n",
|
||
"After completing these exercises, you will know how to\n",
|
||
"\n",
|
||
"- Create and use a Github repository\n",
|
||
"- Set up and use a virtual environment in Python\n",
|
||
"- Fit an OLS model to data using scikit-learn\n",
|
||
"- Fit a model on training data and evaluate it on test data\n",
|
||
"\n",
|
||
"### Deliverables\n",
|
||
"\n",
|
||
"Complete the following exercises while working in a jupyter notebook. Exercises 1,2 and 3 require no writing in the notebook. Then, in canvas, include\n",
|
||
"- The jupyter notebook with the exercises completed\n",
|
||
"- An exported PDF of the notebook (https://code.visualstudio.com/docs/datascience/jupyter-notebooks#_export-your-jupyter-notebook)\n",
|
||
"- Optional: A link to your github repository, which must be set to public, include the notebook file, a README file, requirements file and gitignore file.\n",
|
||
"\n",
|
||
"We require you to deliver a jupyter notebook so that we can evaluate the results of your code without needing to download and run the code of every student, as well as to teach you to use this useful tool."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "2a9c7ef8",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Exercise 1 - Github Setup\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "1498aed1",
|
||
"metadata": {},
|
||
"source": [
|
||
"In this course, we require you to pay extra mind to the reproducibility of your results and the shareability of your code. The first step toward these goals is using a version control system like git and online repository like Github.\n",
|
||
"\n",
|
||
"**a)** Download git if you don't already have it on your machine, check with the terminal command ´git --version´ (https://git-scm.com/downloads).\n",
|
||
"\n",
|
||
"**b)** Create a Github account(https://github.com/), or log in to github with your UiO account (https://github.uio.no/login).\n",
|
||
"\n",
|
||
"**c)** Learn the basics of opening the terminal and navigating folders on your operating system. Things to learn: Opening a terminal, opening a terminal in a specific folder, listing the contents of the current folder, navigating into a folder, navigating out of a folder.\n",
|
||
"\n",
|
||
"**d)** Download the Github CLI tool and run ´gh auth login´ in your terminal to authenticate your local machine for some of the later steps. (https://github.com/cli/cli#installation). You might need to change file permissions to make it work, ask us or ChatGPT for help with these issues.\n",
|
||
"\n",
|
||
"**e)** As an alternative to the above terminal based instructions, you could install GitHub Desktop (see https://desktop.github.com/download/) or if you prefer GitLab, GitLab desktop (see https://about.gitlab.com/install/). This sets up all communications between your PC/Laptop and the repository. This allows you to combine exercises 1 and 2 in an easy way if you don't want to use terminarl. Keep in mind that these GUIs (graphical user interfaces) are not text editors."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "c56fbefa",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Exercise 2 - Setting up a Github repository\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "fb9b8acd",
|
||
"metadata": {
|
||
"vscode": {
|
||
"languageId": "plaintext"
|
||
}
|
||
},
|
||
"source": [
|
||
"**a)** Create an empty repository for your coursework in this course in your browser at github.com (or uio github).\n",
|
||
"\n",
|
||
"**b)** Open a terminal in the location you want to create your local folder for this repository, like your desktop.\n",
|
||
"\n",
|
||
"**c)** Clone the repository to your laptop using the terminal command ´gh repo clone username/repository-name´. This creates a folder with the same name as the repository. Moving it or renaming it might require some extra steps.\n",
|
||
"\n",
|
||
"**d)** Download this jupyter notebook. Add the notebook to the local folder.\n",
|
||
"\n",
|
||
"**e)** Run the ´git add .´ command command in a terminal opened in the local folder to stage the current changes in the folder to be commited to the version control history. Run ´git status´ to see the staged files.\n",
|
||
"\n",
|
||
"**f)** Run the ´git commit -m \"Adding first weekly assignment file\"´ command to commit the staged changes to the version control history. Run ´git status´ to see that no files are staged.\n",
|
||
"\n",
|
||
"**g)** Run the ´git push\" command to upload the commited changes to the remote repository on Github.\n",
|
||
"\n",
|
||
"**h)** Add a file called README.txt to the repository at Github.com. Don't do this in your local folder. Add a suitable title for your repository and some inforomation to the file.\n",
|
||
"\n",
|
||
"**i)** Run the ´git fetch origin´ command to fetch the latest remote changes to your repository.\n",
|
||
"\n",
|
||
"**j)** Run the ´git pull´ command to download and update files to match the remote changes.\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "f84d0db6",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Exercise 3 - Setting up a Python virtual environment\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "b5a4818a",
|
||
"metadata": {},
|
||
"source": [
|
||
"Following the themes from the previous exercises, another way of improving the reproducibility of your results and shareability of your code is having a good handle on which python packages you are using.\n",
|
||
"\n",
|
||
"There are many ways to manage your packages in Python, and you are free to use any approach you want, but in this course we encourage you to use something called a virtual environment. A virtual environemnt is a folder in your project which contains a Python runtime executable as well as all the packages you are using in the current project. In this way, each of your projects has its required set of packages installed in the same folder, so that if anything goes wrong while managing your packages it only affects the one project, and if multiple projects require different versions of the same package, you don't need to worry about messing up old projects. Also, it's easy to just delete the folder and start over if anything goes wrong.\n",
|
||
"\n",
|
||
"Virtual environments are typically created, activated, managed and updated using terminal commands, but for now we recommend that you let for example VS Code (a popular cross-paltform package) handle it for you to make the coding experience much easier. If you are familiar with another approach for virtual environments that works for you, feel free to keep doing it that way.\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "0f6de364",
|
||
"metadata": {},
|
||
"source": [
|
||
"**a)** Open this notebook in VS Code (https://code.visualstudio.com/Download). Download the Python and Jupyter extensions.\n",
|
||
"\n",
|
||
"**b)** Press ´Cmd + Shift + P´, then search and run ´Python: Create Environment...´\n",
|
||
"\n",
|
||
"**c)** Select ´Venv´\n",
|
||
"\n",
|
||
"**d)** Choose the most up-to-date version of Python your have installed.\n",
|
||
"\n",
|
||
"**e)** Press ´Cmd + Shift + P´, then search and run ´Python: Select Interpreter´\n",
|
||
"\n",
|
||
"**f)** Selevet the (.venv) option you just created.\n",
|
||
"\n",
|
||
"**g)** Open a terminal in VS Code, the venv name should be visible at the beginning of the line. Run `pip list` to see that there are no packages install in the environment.\n",
|
||
"\n",
|
||
"**h)** In this terminal, run `pip install matplotlib numpy scikit-learn`. This will install the listed packages.\n",
|
||
"\n",
|
||
"**i)** To make these installations reproducible, which is important for reproducing results and sharing your code, run ´pip freeze > requirements.txt´ to create the file requirements.txt with all your dependencies.\n",
|
||
"\n",
|
||
"Now, anyone who wants to recreate your package setup can download your requirements.txt file and run ´pip install -r requirements.txt´ to install the correct packages and versions. To keep the requirements.txt file up to date with your environment, you will need to re-run the freeze command whenever you install a new package.\n",
|
||
"\n",
|
||
"**j)** Create a .gitignore file at the root of your project folder, and add the line ´.venv´ to it. This way, you won't try to upload a copy of all your python packages when you regularly push your changes to Github. Ignored files should not show up when you run ´git status´, and are not staged when running ´git add .´, try it!"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "5d184ab1",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Exercise 3 - Fitting an OLS model to data\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "d19ebd67",
|
||
"metadata": {},
|
||
"source": [
|
||
"Great job on getting through all of that! Now it is time to do some actual machine learning!\n",
|
||
"\n",
|
||
"**a)** Complete the code below so that you fit a second order polynomial to the data. You will need to look up some scikit-learn documentation online (look at the imported functions for hints).\n",
|
||
"\n",
|
||
"**b)** Compute the mean square error for the line model and for the second degree polynomial model."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 1,
|
||
"id": "b58fb9bf",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"import numpy as np\n",
|
||
"import matplotlib.pyplot as plt\n",
|
||
"from sklearn.preprocessing import PolynomialFeatures # use the fit_transform method of the created object!\n",
|
||
"from sklearn.linear_model import LinearRegression\n",
|
||
"from sklearn.metrics import mean_squared_error"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 4,
|
||
"id": "0208e9ca",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"image/png": "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ICsrCwBw5swZTJ06FR07doRcLseYMWPwxx9/2LzPsWPHIJFIsHfvXqvjL7/8MmJjY+3+dNq9e3c888wzmDp1KsLCwhAbG4usrCyUlZVh/PjxCAsLw4ABAxrd99NPP8Ull1yCoKAgdO/eHS+++KLV86WlpUhLS0NISAji4uKwbt26Rq999uxZzJo1CxEREVAoFLjmmmvw66+/uvT+rV+/HmlpaY2OJyYmIiYmBhs3brQc27hxI7p162bV9O3s2bPYuXMnli5dipEjRyI2NhZJSUmYP38+brjBuvlceHg41Gq11VdoaKhL4zV75ZVXkJqaikcffRT9+vXD4sWLkZiY6LAL7RtvvIG4uDi8+OKL6NevH+677z7ccssteOmllyznjBkzBs888wxuuukmu/eRSqUYO3Ys1q9f79bYich3cgvKUaSpgr4iAef+zICucDbOn7wdusLZOPdnBvQVCSjSVCG3oLylh9psbSqwMBcfabilx9wlztvBRX0hISGoqakB6qb09+7di6ysLOzevRuiKGLs2LFW3S7NunfvjpSUFKxevdrq+OrVqzF9+nRIJPb/k7300ksYOnQofvnlF4wbNw5TpkzB1KlTMXnyZOTl5aFnz56YOnUqzH3n9u3bh4kTJ+L222/HgQMHsHDhQjz55JNW0/LTp0/HiRMn8O233+KTTz7B66+/jtLSUqvXvfXWW1FaWoqtW7di3759SExMxLXXXovycuf+gpSXlyM/P9/Sqr2hGTNmWL0fq1atwl133WV1TlhYGMLCwrBp0yZUV1c79br2mO9l76v+0szu3bsbldYePXo0du/ebff+7lxjT1JSEnbu3OnydUTkW6UV9bsnS2DQ9YReexkMup5WH8XW57nAaACO7gC+eQbY/gzw13emYy2gzewKcVR8RIQIAQKW5i7FyJiRXu0SJ4oitm/fjm3btuH+++/HH3/8gaysLPz4448YMmQIAGDdunWIiYnBpk2bcOuttza6x6xZs3DPPfdg+fLlCAoKQl5eHg4cOIDPP//c4WuPHTsW//rXv4C6ttwrVqzAoEGDLK+RkZGB5ORklJSUQK1WY/ny5bj22mvx5JNPAgB69+6N/Px8PP/885g+fTp+//13bN26Fbm5uRg0yNQA55133kG/fv0sr/nDDz8gNzcXpaWlCAoKAgC88MIL2LRpEz755BOnkjGPHz8O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Jnd7EBERNVPrDSya3OkB004PcwEsc10KRZT1qYpo+1tNiYiIyCWtdynElZ0e5u2i8TeYtpSyLgUREZFXuDxj8f333yMtLQ3R0dEQBAGbNm3yzsia4u5OD3Ndiv63mH5lUEFEROQxLgcW586dw6WXXorXXnvNOyNyFnd6EBER+R2Xl0LGjBmDMWPGeGc0ruBODyIiIr/TepM3udODiIjI73g9sKiuroZWq7X68hju9CAiIvIrXt8VsmTJEixatMh7L8CdHkRERH7D6zMW8+fPh0ajsXydOHHC8y/CnR5ERER+weszFkFBQQgKCvL2yxAREZEfcDmwqKysxJ9//ml5XFBQgP3796NTp07o1q2bp8dHRERErYjLgcXevXsxcuRIy+P09HQAwLRp07BmzRrPjo6IiIhaFZcDixEjRkAUbdWNICIiovau9daxICIiIr/DwIKIiIg8hoEFEREReQwDCyIiIvIYBhZERETkMV4vkNWQeUeJR3uGEBERkVeZP7eb2hnq88CioqICABATE+PrlyYiIqJmqqiogFKptPu8IPq4KIXRaMQ///yD8PBwCELDdufO0Wq1iImJwYkTJ6BQKDw+RrLG99u3+H77Dt9r3+L77TveeK9FUURFRQWio6MhkdjPpPD5jIVEIsFFF13kkXspFAr+4fQhvt++xffbd/he+xbfb9/x9HvtaKbCjMmbRERE5DEMLIiIiMhjWmVgERQUhAULFrAdu4/w/fYtvt++w/fat/h++05Lvtc+T94kIiKitqtVzlgQERGRf2JgQURERB7DwIKIiIg8hoEFEREReYzfBhavvfYaunfvjuDgYAwePBi5ubkOz//444/Rt29fBAcHo3///tiyZYvPxtoWuPJ+r1y5EsOGDUPHjh3RsWNHpKSkNPnfhy5w9c+22fr16yEIAm688Uavj7EtcfX9Pnv2LObOnYuoqCgEBQWhd+/e/PfEBa6+3y+//DL69OmDkJAQxMTE4OGHH0ZVVZXPxttaff/990hLS0N0dDQEQcCmTZuavGbHjh1ITExEUFAQevXqhTVr1nhncKIfWr9+vRgYGCiuWrVKPHTokDh79myxQ4cOYklJic3zf/zxR1EqlYrLli0T8/PzxSeeeEIMCAgQDxw44POxt0auvt933HGH+Nprr4m//PKLePjwYXH69OmiUqkU//77b5+PvbVx9b02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",
|
||
"text/plain": [
|
||
"<Figure size 640x480 with 1 Axes>"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"n = 100\n",
|
||
"x = np.random.rand(n, 1)\n",
|
||
"y = 2.0 + 5 * x**2 + 0.1 * np.random.randn(n, 1)\n",
|
||
"\n",
|
||
"line_model = LinearRegression().fit(x, y)\n",
|
||
"line_predict = line_model.predict(x)\n",
|
||
"line_mse = mean_squared_error(y, line_predict)\n",
|
||
"\n",
|
||
"poly = PolynomialFeatures(degree=2)\n",
|
||
"x_poly = poly.fit_transform(x)\n",
|
||
"poly_model = LinearRegression().fit(x_poly, y)\n",
|
||
"poly_predict = poly_model.predict(x_poly)\n",
|
||
"poly_mse = mean_squared_error(y, poly_predict)\n",
|
||
"\n",
|
||
"plt.scatter(x, y, label = \"Data\")\n",
|
||
"plt.scatter(x, line_predict, label = f\"Line model (MSE={line_mse:.2f})\")\n",
|
||
"plt.scatter(x, poly_predict, label = f\"Poly model (MSE={poly_mse:.2f})\")\n",
|
||
"plt.legend()\n",
|
||
"plt.show()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "248d8931",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Exercise 4 - The train-test split\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "1efd3376",
|
||
"metadata": {},
|
||
"source": [
|
||
"Hopefully your model fit the data quite well, but to know how well the model actually generalizes to unseen data, which is most often what we care about, we need to split our data into training and testing data. "
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 3,
|
||
"id": "0f8d75fb",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"from sklearn.model_selection import train_test_split"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "edb213fc",
|
||
"metadata": {},
|
||
"source": [
|
||
"**a)** Complete the code below so that the polynomial features and the targets y get split into training and test data.\n",
|
||
"\n",
|
||
"**b)** What is the shape of X_test?\n",
|
||
"\n",
|
||
"**c)** Fit your model to X_train\n",
|
||
"\n",
|
||
"**d)** Compute the MSE when your model predicts on the training data and on the testing data, using y_train and y_test as targets for the two cases.\n",
|
||
"\n",
|
||
"**e)** Why do we not fit the model to X_test?"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 6,
|
||
"id": "a03e0388",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Shape of X_test: (20, 3)\n",
|
||
"Train MSE: 0.0098\n",
|
||
"Test MSE: 0.0097\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"image/png": "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SURELZKrz+9617Foauk5xVX2/Kg57GDdECs9x75ktst1H2ImmpMHVbUkQNXRaVIB1nkgIqI2rsUOhbi60VWDNsSKmQj0uR3IPQCUFgDBGvMwSR21JVjngYiI2qoWm1i4utFVgzfEsmzA5S7WeSAioraoxQ6FWCdKOusDECxbonOiJBERkfe02MTCuiEWHFSZ4IZYRERETaPFJhbgREkiIqJmp8XOsbDiREkiIqLmo8UnFuBESSIiomajRQ+FEBERUfPCxIKIiIg8hokFEREReQwTCyIiIvIYJhZERETkMUwsiIiIyGOYWBAREZHHMLEgIiIij2FiQURERB7j9cqbkiQBAPR6vbc/moiIiOrJ+ty2Psed8XpiUVJSAgCIjIz09kcTERFRA5WUlECtVjt9X5DqSj08TBRFXLhwAUqlEoJQv43C9Ho9IiMjce7cOahUKo/HSPZ4v72L99t7eK+9i/fbexrjXkuShJKSEnTs2BEymfOZFF7vsZDJZOjcubNHrqVSqfiP04t4v72L99t7eK+9i/fbezx9r2vrqbDi5E0iIiLyGCYWRERE5DEtMrHw9/dHcnIy/P39mzqUNoH327t4v72H99q7eL+9pynvtdcnbxIREVHr1SJ7LIiIiKh5YmJBREREHsPEgoiIiDyGiQURERF5TLNNLN566y107doVAQEBGDp0KNLT02tt/9FHH6FPnz4ICAhAv379sGPHDq/F2hq4c7/Xrl2LkSNHIiQkBCEhIUhISKjz74euc/ffttWmTZsgCAL++Mc/NnqMrYm79/vKlSuYO3cuIiIi4O/vj169evG/J25w936vXr0avXv3RmBgICIjI/Hkk0+irKzMa/G2VN988w2SkpLQsWNHCIKATz/9tM5z9u7di7i4OPj7+6NHjx5Yv3594wQnNUObNm2S/Pz8pH//+9/STz/9JM2ePVtq166dVFBQ4LD9/v37JblcLr388stSdna29Nxzz0m+vr7S8ePHvR57S+Tu/b7nnnukt956Szp69Kh04sQJadasWZJarZZ+//13r8fe0rh7r61ycnKkTp06SSNHjpQmTZrktXhbOnfvd3l5uTR48GBpwoQJ0nfffSfl5ORIe/fulY4dO+b12Fsid+/3Bx98IPn7+0sffPCBlJOTI3311VdSRESE9OSTT3o99pZmx44d0rPPPitt2bJFAiBt3bq11vanT5+WFAqFtGDBAik7O1v6+9//Lsnlcmnnzp0ej61ZJhbx8fHS3Llzba9NJpPUsWNHafny5Q7bT5kyRbr99tvtjg0dOlR65JFHGj3W1sDd+12d0WiUlEql9N577zVilK1Dfe610WiUhg8fLr377rvSzJkzmVi4wd37vWbNGqlbt25SRUWFF6NsPdy933PnzpVuvfVWu2MLFiyQRowY0eixtiauJBZPP/20dMMNN9gdmzp1qjR+/HiPx9PshkIqKipw5MgRJCQk2I7JZDIkJCTg4MGDDs85ePCgXXsAGD9+vNP2dF197nd1BoMBlZWVCA0NbcRIW7763usXXngB4eHhePDBB70UaetQn/u9bds2DBs2DHPnzoVGo0FsbCyWLVsGk8nkxchbpvrc7+HDh+PIkSO24ZLTp09jx44dmDBhgtfibiu8+Zz0+iZkdbl48SJMJhM0Go3dcY1Gg59//tnhOfn5+Q7b5+fnN2qsrUF97nd1ixYtQseOHWv8oyV79bnX3333Hf71r3/h2LFjXoqy9ajP/T59+jS+/vprTJ8+HTt27MBvv/2Gxx57DJWVlUhOTvZS5C1Tfe73Pffcg4sXL+Lmm2+GJEkwGo149NFH8cwzz3gp6rbD2XNSr9fj2rVrCAwM9NhnNbseC2pZUlNTsWnTJmzduhUBAQFNHU6rUlJSgnvvvRdr165Fhw4dmjqcNkEURYSHh+Of//wnBg0ahKlTp+LZZ5/FP/7xj6YOrVXau3cvli1bhrfffhuZmZnYsmULvvjiC7z44otNHRo1QLPrsejQoQPkcjkKCgrsjhcUFECr1To8R6vVutWerqvP/bZ69dVXkZqairS0NPTv37+RI2353L3Xp06dwpkzZ5CUlGQ7JooiAMDHxwcnT55E9+7dvRB5y1Sff9sRERHw9fWFXC63Hevbty/y8/NRUVEBPz+/Ro+7parP/f7rX/+Ke++9Fw899BAAoF+/frh69SoefvhhPPvss5DJ+Luvpzh7TqpUKo/2VqA59lj4+flh0KBB2LNnj+2YKIrYs2cPhg0b5vCcYcOG2bUHgN27dzttT9fV534DwMsvv4wXX3wRO3fuxODBg70Ubcvm7r3u06cPjh8/jmPHjtl+Jk6ciDFjxuDYsWOIjIz08jdoWerzb3vEiBH47bffbAkcAPzyyy+IiIhgUlGH+txvg8FQI3mwJnXcxsqzvPqc9Ph0UA/YtGmT5O/vL61fv17Kzs6WHn74Yaldu3ZSfn6+JEmSdO+990qLFy+2td+/f7/k4+Mjvfrqq9KJEyek5ORkLjd1g7v3OzU1VfLz85M+/vhjKS8vz/ZTUlLShN+iZXD3XlfHVSHucfd+nz17VlIqldK8efOkkydPSp9//rkUHh4uvfTSS034LVoOd+93cnKypFQqpf/+97/S6dOnpV27dkndu3eXpkyZ0oTfomUoKSmRjh49Kh09elQCIK1atUo6evSolJubK0mSJC1evFi69957be2ty03/8pe/SCdOnJDeeuuttrXcVJIk6e9//7vUpUsXyc/PT4qPj5e+//5723ujRo2SZs6cadd+8+bNUq9evSQ/Pz/phhtukL744osmiLrlcud+R0VFSQBq/CQnJzdR9C2Lu/+2q2Ji4T537/eBAwekoUOHSv7+/lK3bt2kv/3tb5LRaGyCyFsmd+53ZWWltHTpUql79+5SQECAFBkZKT322GPS5cuXmyj6luN///ufw/8OW+/vzJkzpVGjRtU4Z8CAAZKfn5/UrVs3ad26dY0SG7dNJyIiIo9pdnMsiIiIqOViYkFEREQew8SCiIiIPIaJBREREXkMEwsiIiLyGCYWRERE5DFMLIiIiMhjmFgQERGRxzCxICIiIo9hYkFEREQew8SCiIiIPIaJBREREXnM/wO6o1CHp7efRQAAAABJRU5ErkJggg==",
|
||
"text/plain": [
|
||
"<Figure size 640x480 with 1 Axes>"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"polynomial_features = poly.fit_transform(x)\n",
|
||
"\n",
|
||
"X_train, X_test, y_train, y_test = train_test_split(polynomial_features, y, test_size=0.2)\n",
|
||
"print(f\"Shape of X_test: {X_test.shape}\")\n",
|
||
"\n",
|
||
"poly_model = LinearRegression().fit(X_train, y_train)\n",
|
||
"pred_train = poly_model.predict(X_train)\n",
|
||
"pred_test = poly_model.predict(X_test)\n",
|
||
"\n",
|
||
"train_mse = mean_squared_error(y_train, pred_train)\n",
|
||
"test_mse = mean_squared_error(y_test, pred_test)\n",
|
||
"\n",
|
||
"print(f\"Train MSE: {train_mse:.4f}\")\n",
|
||
"print(f\"Test MSE: {test_mse:.4f}\")\n",
|
||
"\n",
|
||
"plt.scatter(X_train[:, 1], y_train, label=\"Train Data\")\n",
|
||
"plt.scatter(X_test[:, 1], y_test, label=\"Test Data\")\n",
|
||
"plt.scatter(X_train[:, 1], pred_train, label=\"Train Predictions\")\n",
|
||
"plt.scatter(X_test[:, 1], pred_test, label=\"Test Predictions\")\n",
|
||
"plt.legend()\n",
|
||
"plt.show()\n",
|
||
"\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "22e7536e",
|
||
"metadata": {},
|
||
"source": [
|
||
"Training on X-test wouldn't let us evaluate the quality of the model as the evaluation metric would be the same metric we tried to minimize. But assuming X_train and X_test selections are independent we can evaluate the quality if we separate training and testing data."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "4b7bac7e",
|
||
"metadata": {},
|
||
"source": []
|
||
}
|
||
],
|
||
"metadata": {
|
||
"kernelspec": {
|
||
"display_name": "Lecture_Materials",
|
||
"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.13.7"
|
||
}
|
||
},
|
||
"nbformat": 4,
|
||
"nbformat_minor": 5
|
||
}
|