5405 lines
392 KiB
Plaintext
5405 lines
392 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"editable": true,
|
|
"slideshow": {
|
|
"slide_type": ""
|
|
},
|
|
"tags": []
|
|
},
|
|
"source": [
|
|
"# Coursework\n",
|
|
"# SPCE0038: Machine Learning with Big-Data"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"---"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Overview\n",
|
|
"\n",
|
|
"This coursework is provided as a Jupyter notebook, which you will need to complete. \n",
|
|
"\n",
|
|
"Throughout the notebook you will need to complete code, analytic exercises (if equations are required please typeset your solutions using latex in the markdown cell provided) and descriptive answers. Much of the grading of the coursework will be performed automatically, so it is critical you name your variables as requested."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Before you turn this coursework in, make sure everything runs as expected. First, **restart the kernel** (in the menubar, select Kernel$\\rightarrow$Restart) and then **run all cells** (in the menubar, select Cell$\\rightarrow$Run All).\n",
|
|
"\n",
|
|
"Make sure you fill in any place that says \"YOUR ANSWER HERE\" or `YOUR CODE HERE` and remove remove the `raise NotImplementedError()` exceptions that are thrown before you have added your answers."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Please also:\n",
|
|
"- Make sure you use a python environment using the `requirements.txt` files provided by the course.\n",
|
|
"- Make sure your notebook executes without errors.\n",
|
|
"- Do not add and remove cells but only provide your answers in the spaces given.\n",
|
|
"- Do not add or change code in the cells other than the ones marked with `# YOUR CODE HERE`.\n",
|
|
"- Do not overwrite or rename any existing variables.\n",
|
|
"- Do not install code or packages in the notebooks.\n",
|
|
"- Do not import any libraries other than modules from `sklearn`.\n",
|
|
"- Always label your plots.\n",
|
|
"- Answer the questions concisely and show your work/derivations/reasoning."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"**Please rename the notebook filename to include your candidate number in the filename. And please also add your candidate number below:**"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 1,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"CANDIDATE_NUMBER = \"MCMQ7\""
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"You will be able to run some basic tests in the notebook to check the basic operation of your code is as expected. Although do not assume your responses are complete or fully correct just because the basic tests pass."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Once you have renamed the notebook file and completed the exercises, please upload the notebook to Moodle.\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"---"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## AstroML\n",
|
|
"\n",
|
|
"The data used is this coursework is obtained using [AstroML](http://www.astroml.org), a python package for machine learning for astronomy. Although we take data from AstroML, this coursework is not based on standard AstroML examples. So you will *not* find the solutions in AstroML examples!"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## SDSS\n",
|
|
"\n",
|
|
"The data obtained through AstroML was observed by the [Sloan Digital Sky Survey](https://www.sdss.org/) (SDSS), which began observations in 2000. SDSS data have lead to many scientific advances and the experiment is widely seen as one of the most successful surveys in the history of astronomy."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"---"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Dependencies\n",
|
|
"\n",
|
|
"- Standard course dependencies (e.g. numpy, scikit-learn, etc.)\n",
|
|
"- [AstoML](http://www.astroml.org)\n",
|
|
"- [AstroPy](http://www.astropy.org/)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"---"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 2,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "ebf563e5f38beef45736bc1921c6c8ca",
|
|
"grade": false,
|
|
"grade_id": "cell-60b5947d6f57e1e5",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"import numpy as np\n",
|
|
"from matplotlib import pyplot as plt"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 3,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "62f0bf3c5af939aa8d31f358766e54f1",
|
|
"grade": false,
|
|
"grade_id": "cell-ea880cd0d16868fc",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"def check_var_defined(var):\n",
|
|
" try:\n",
|
|
" exec(var)\n",
|
|
" except NameError:\n",
|
|
" raise NameError(var + \" not defined.\")\n",
|
|
" else:\n",
|
|
" print(var + \" defined.\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "15eddda2a8295d028fd507afa72dce3b",
|
|
"grade": false,
|
|
"grade_id": "cell-b2775724006d2978",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"## Part 1: Regression"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "a9cff16a3014318dbe8e070dc4dac087",
|
|
"grade": false,
|
|
"grade_id": "cell-b3bc03ae580e8edb",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"In these exercises we will consider the regression problem of the astonomical distance modulus vs redshift relationship.\n",
|
|
"\n",
|
|
"In astronomy, the [distance modulus](https://en.wikipedia.org/wiki/Distance_modulus) specifies the difference between the apparent and absolute magnitudes of an astronomnical object. It provides a way of expressing astrophysical distances. \n",
|
|
"\n",
|
|
"Astronomical [redshift](https://en.wikipedia.org/wiki/Redshift) specifies the shift in wavelength that astronomical objects undergo due to the expansion of the Universe. Due to Hubble's Law, more distance objects experience a greater redshift.\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 4,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "a6a25d04743d3fe93a33d1b4411a8516",
|
|
"grade": false,
|
|
"grade_id": "cell-72d05aca43e8358d",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"from astroML.datasets import generate_mu_z"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 5,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "169eb83a4ad31a60a51d6de794445254",
|
|
"grade": false,
|
|
"grade_id": "cell-b5b33781a14baffd",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"# Load data\n",
|
|
"m = 150\n",
|
|
"z_sample, mu_sample, dmu = generate_mu_z(m, random_state=3)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "208758e42789bf2d1470c30a5fb356e0",
|
|
"grade": false,
|
|
"grade_id": "cell-acd86dc17cc2dd53",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"*Plot the distance modulus ($\\mu$) vs redhift ($z$), including error bars.*"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 6,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "a6759ec46b4d7447c6b0873e63a52ec2",
|
|
"grade": true,
|
|
"grade_id": "cell-ae7f16835ab51af3",
|
|
"locked": false,
|
|
"points": 1,
|
|
"schema_version": 3,
|
|
"solution": true
|
|
}
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "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",
|
|
"text/plain": [
|
|
"<Figure size 640x480 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"# Plot data\n",
|
|
"def plot_dist_mod():\n",
|
|
" # YOUR CODE HERE\n",
|
|
" plt.scatter(z_sample, mu_sample)\n",
|
|
" plt.errorbar(z_sample, mu_sample, yerr=dmu, fmt=\"o\")\n",
|
|
" #raise NotImplementedError()\n",
|
|
" plt.xlabel('$z$')\n",
|
|
" plt.ylabel('$\\mu$')\n",
|
|
" plt.title('Distance modulus vs redshift')\n",
|
|
" plt.ylim(36, 50)\n",
|
|
" plt.xlim(0, 1.5)\n",
|
|
"plot_dist_mod()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "596c8005f2265096bb8d4dcfb6756856",
|
|
"grade": false,
|
|
"grade_id": "cell-cdbb1766c5be9049",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"Recall the normal equations for linear regression follow by analytically minimising the cost function: \n",
|
|
"\n",
|
|
"$$\\min_\\theta\\ C(\\theta) = \\min_\\theta \\ (X \\theta - y)^{\\rm T}(X \\theta - y).$$\n",
|
|
"\n",
|
|
"Show analytically that the solution is given by \n",
|
|
"\n",
|
|
"$$ \\hat{\\theta} = \\left( X^{\\rm T} X \\right)^{-1} X^{\\rm T} y. $$"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "c509e0ca35e2e737d727917ad9699ad8",
|
|
"grade": false,
|
|
"grade_id": "cell-3b18a50412c27c56",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"[Matrix calculus identities](https://en.wikipedia.org/wiki/Matrix_calculus) may be useful (note that we use the denominator layout convention)."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "3a99014a4147c496f8f9de0535f06e6a",
|
|
"grade": false,
|
|
"grade_id": "cell-4701b02e60d7683c",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"*Expand the cost function and drop terms that do not depend on $\\theta$ (use latex mathematics expressions):*"
|
|
]
|
|
},
|
|
{
|
|
"attachments": {},
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "b97fe78f2b4bc7502cb9ebdfe1d17874",
|
|
"grade": true,
|
|
"grade_id": "cell-a114fd93ba74dac5",
|
|
"locked": false,
|
|
"points": 3,
|
|
"schema_version": 3,
|
|
"solution": true
|
|
}
|
|
},
|
|
"source": [
|
|
"Initial cost function:\n",
|
|
"\n",
|
|
"$$C(\\theta)=(X\\theta-y)^T(X\\theta-y)$$\n",
|
|
"\n",
|
|
"Using the identity\n",
|
|
"\n",
|
|
"$$(A+B)^T = A^T+B^T,$$\n",
|
|
"\n",
|
|
"We perform a quadratic expansion:\n",
|
|
"\n",
|
|
"$$C(\\theta)=(X\\theta)^T(X\\theta)-(X\\theta)^Ty-y^T(X\\theta)+y^Ty.$$\n",
|
|
"\n",
|
|
"We use the identity\n",
|
|
"\n",
|
|
"$$a^Tb=b^Ta$$\n",
|
|
"\n",
|
|
"to combine the intermediate terms:\n",
|
|
"\n",
|
|
"$$C(\\theta)=(X\\theta)^T(X\\theta)-2(X\\theta)^Ty + y^Ty.$$"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "2e5cd989e6893a3cefd6a3020e615c8d",
|
|
"grade": false,
|
|
"grade_id": "cell-9a33de31635ab257",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"*Calculate the derivative, set it to zero, and solve for $\\theta$ (use latex mathematics expressions):*"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "72da939ee35de54049492e263cc444f8",
|
|
"grade": true,
|
|
"grade_id": "cell-0f0b521f765f4826",
|
|
"locked": false,
|
|
"points": 3,
|
|
"schema_version": 3,
|
|
"solution": true
|
|
}
|
|
},
|
|
"source": [
|
|
"The first term of $C(\\theta)$ can be rewritten as\n",
|
|
"$$(X\\theta)^T(X\\theta)=X^T\\theta^TX\\theta.$$\n",
|
|
"Since $X^TX$ is symmetric we can apply the formula\n",
|
|
"$$\\frac{\\partial}{\\partial\\theta}(\\theta^TA\\theta)=2A\\theta$$\n",
|
|
"where $A=X^TX$ to find the derivative of the first term:\n",
|
|
"$$\\frac{\\partial}{\\partial\\theta}(X^T\\theta^TX\\theta)=2X^TX\\theta$$\n",
|
|
"The second term is linear in $\\theta$ so can be differentiated normally.\n",
|
|
"$$\\frac{\\partial}{\\partial\\theta}(-2(X\\theta)^Ty) = -2X^Ty$$\n",
|
|
"Combining the individual terms for a complete derivative of $C(\\theta)$:\n",
|
|
"$$\\nabla_{\\theta}C(\\theta)=2X^TX\\theta-2X^Ty+0$$\n",
|
|
"Set the derivative to zero\n",
|
|
"$$0=2X^TX\\theta-2X^Ty$$\n",
|
|
"$$X^Ty=X^TX\\theta$$\n",
|
|
"$$\\theta=(X^TX)^{-1}X^Ty$$\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "37c7febbf20f95d2bd6ef750ed2d11f3",
|
|
"grade": false,
|
|
"grade_id": "cell-dd5113a0fc89a960",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"*Solve for $\\theta$ by numerically implementing the analytic solution given above.*"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 39,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "0993e1f7ab7124438012231f05c51e9a",
|
|
"grade": false,
|
|
"grade_id": "cell-d71c2644693323b2",
|
|
"locked": false,
|
|
"schema_version": 3,
|
|
"solution": true
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"def compute_theta_lin_reg(X, y):\n",
|
|
" # YOUR CODE HERE\n",
|
|
" # X needs to be a 2D array where each row is a sample\n",
|
|
" X = X.reshape((-1, 1))\n",
|
|
" # Add a column of ones for the bias term\n",
|
|
" X = np.c_[np.ones((X.shape[0], 1)), X]\n",
|
|
" theta = np.linalg.inv(X.T @ X) @ X.T @ y\n",
|
|
" #raise NotImplementedError()\n",
|
|
" return theta"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 40,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "ce1006c8dcbd4682472e45a7a6e54960",
|
|
"grade": true,
|
|
"grade_id": "cell-f024710582a10726",
|
|
"locked": true,
|
|
"points": 1,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Linear regression parameters recovered analytically: intercept=39.5505, slope=4.9538\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"assert compute_theta_lin_reg(z_sample, mu_sample).shape == (2,)\n",
|
|
"theta = compute_theta_lin_reg(z_sample, mu_sample)\n",
|
|
"(theta_c, theta_m) = theta\n",
|
|
"print(\"Linear regression parameters recovered analytically: intercept={0:.4f}, slope={1:.4f}\".format(theta_c, theta_m))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 41,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "0276019b59b620bff4ba748f13afb83e",
|
|
"grade": true,
|
|
"grade_id": "cell-52c5a2bcccb2010d",
|
|
"locked": true,
|
|
"points": 1,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"theta_c defined.\n",
|
|
"theta_m defined.\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"check_var_defined('theta_c')\n",
|
|
"check_var_defined('theta_m')"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "96ed9fc16f94ad4965a2b03c463b7cd7",
|
|
"grade": false,
|
|
"grade_id": "cell-883f0e6586934a9f",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"*Write a method to make a prediction for a given redshift.*"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 47,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "475f9a392bb5bb1dee3671f1e4e4c5cf",
|
|
"grade": false,
|
|
"grade_id": "cell-f5341cc7da485877",
|
|
"locked": false,
|
|
"schema_version": 3,
|
|
"solution": true
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"def predict_lin_reg(theta, x):\n",
|
|
" # YOUR CODE HERE\n",
|
|
" (c, m) = theta\n",
|
|
" y = m*x + c\n",
|
|
" #raise NotImplementedError()\n",
|
|
" return y"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "3cfc6f1f228d2759b5869de17f4c5754",
|
|
"grade": false,
|
|
"grade_id": "cell-c71c338c46a8bb93",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"*Predict the distance modulus for a range of redshift values between 0.01 and 1.5 and plot the predicted curve overlayed on data (make a new plot; do not revise the plot above). Call the variable used to store the predictions for your polynomial model `mu_pred_lin`.*"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 112,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "cd987dfd33566ad55e8f9bfe8f8997aa",
|
|
"grade": false,
|
|
"grade_id": "cell-fc6aa680d6528ab1",
|
|
"locked": false,
|
|
"schema_version": 3,
|
|
"solution": true
|
|
}
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"<matplotlib.legend.Legend at 0x7bee6cbea610>"
|
|
]
|
|
},
|
|
"execution_count": 112,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
},
|
|
{
|
|
"data": {
|
|
"image/png": "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ixfRs2dPqNVqHDhwAJ07d8Zbb72F2rVrY+7cuYiNjcW1a9fQr18/+Pr64urVq9i6dStee+01TJ482eo2mPPaa69h+fLlGDZsGJKSkhASEoLNmzfj4MGDWLx4sW6MUp8+fdC2bVtMnToV165dQ3h4OL7//vsiY4kAYMSIEfj4448RGRmJkSNHIi0tDV988QUaNGiAzMxMk+155ZVXMGXKFLz44osYN24csrKy8Pnnn6NevXo4efKkbj8x77UpAwcOxOTJkzF58mSUK1euSLZk1KhRePDgAbp06YLq1avj+vXrWLp0KZo2bWr1NORly5ahXbt2aNSoEUaPHo1atWrh3r17OHz4MG7duoXTp08DAN59912sXr0aPXv2xPjx43VTs7VZNK34+Hh89tlnePHFF1G7dm08evQIK1asgJ+fH6KioqxqoxhNmzaFm5sbFixYgIyMDHh4eKBLly6oWLGi3Z6TSgAnzKAicjjt1Gztj1KpFCpXrix0795d+OSTT3RThAsqPJV09+7dQt++fYWqVasKSqVSqFq1qjB48GDhwoULeo/78ccfhfDwcEGhUOhNK05JSRG6desm+Pj4COXLlxdGjx4tnD59usjU45iYGMHb29tsewRBM335ww8/FMLCwgSlUilUqFBB6NWrl5CUlKS335YtW4R27doJ3t7egre3txAWFiaMHTtWSE1NNXnetM9ZeIqysTYammp77949Yfjw4UL58uUFpVIpNGrUyODU9b///luIjo4W/Pz8BH9/fyE6Olo4deqUwanua9asEWrVqiUolUqhadOmQmJioqip2YIgCDt37hQaNmwoKJVKITQ0VFizZo3V77Upbdu2FQAIo0aNKnLf5s2bhR49eggVK1YUlEqlEBQUJIwZM0a4c+eOyWNqp0J/+OGHBu+/fPmyMHToUKFy5cqCu7u7UK1aNeGFF14QNm/erLff77//LnTs2FHw9PQUqlWrJsyZM0f4+uuv9aZmnzx5Uhg8eLAQFBQkeHh4CBUrVhReeOEF4cSJE6LaU/jci52aLQiCsGLFCqFWrVqCm5sbp2mTKDJB4AgtIiIiki6OmSEiIiJJYzBDREREksZghoiIiCTN6cGMdiXVgj9hYWG6+7OzszF27FgEBgbCx8cHAwYMwL1795zYYiIiInIlTg9mAKBBgwa4c+eO7ue3337T3Tdx4kT89NNP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",
|
|
"text/plain": [
|
|
"<Figure size 640x480 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"z = np.linspace(0.01, 1.5, 1000)\n",
|
|
"plot_dist_mod()\n",
|
|
"# YOUR CODE HERE\n",
|
|
"mu_pred_lin = np.array([predict_lin_reg(theta, x) for x in z])\n",
|
|
"plt.plot(z, mu_pred_lin, label=\"mu_pred_lin\")\n",
|
|
"plt.legend()\n",
|
|
"#raise NotImplementedError()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 51,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "08cf8664e67c3940e4b3acc27b0d325e",
|
|
"grade": true,
|
|
"grade_id": "cell-f8e904006f960080",
|
|
"locked": true,
|
|
"points": 2,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"mu_pred_lin defined.\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"check_var_defined('mu_pred_lin')\n",
|
|
"assert mu_pred_lin.shape == (len(z),), \"Make sure the shape of your predictions is correct\""
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "78269320b540a1d943b94e85f8887bdf",
|
|
"grade": false,
|
|
"grade_id": "cell-c55d51874c74517a",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"*Solve for the parameters $\\theta$ using Scikit-Learn.*"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 56,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "dcb822e86c7cfb2cc413af696ebf6b12",
|
|
"grade": false,
|
|
"grade_id": "cell-21b18d58a127b96c",
|
|
"locked": false,
|
|
"schema_version": 3,
|
|
"solution": true
|
|
}
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
"<style>#sk-container-id-2 {\n",
|
|
" /* Definition of color scheme common for light and dark mode */\n",
|
|
" --sklearn-color-text: #000;\n",
|
|
" --sklearn-color-text-muted: #666;\n",
|
|
" --sklearn-color-line: gray;\n",
|
|
" /* Definition of color scheme for unfitted estimators */\n",
|
|
" --sklearn-color-unfitted-level-0: #fff5e6;\n",
|
|
" --sklearn-color-unfitted-level-1: #f6e4d2;\n",
|
|
" --sklearn-color-unfitted-level-2: #ffe0b3;\n",
|
|
" --sklearn-color-unfitted-level-3: chocolate;\n",
|
|
" /* Definition of color scheme for fitted estimators */\n",
|
|
" --sklearn-color-fitted-level-0: #f0f8ff;\n",
|
|
" --sklearn-color-fitted-level-1: #d4ebff;\n",
|
|
" --sklearn-color-fitted-level-2: #b3dbfd;\n",
|
|
" --sklearn-color-fitted-level-3: cornflowerblue;\n",
|
|
"\n",
|
|
" /* Specific color for light theme */\n",
|
|
" --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
|
|
" --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
|
|
" --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
|
|
" --sklearn-color-icon: #696969;\n",
|
|
"\n",
|
|
" @media (prefers-color-scheme: dark) {\n",
|
|
" /* Redefinition of color scheme for dark theme */\n",
|
|
" --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
|
|
" --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
|
|
" --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
|
|
" --sklearn-color-icon: #878787;\n",
|
|
" }\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 {\n",
|
|
" color: var(--sklearn-color-text);\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 pre {\n",
|
|
" padding: 0;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 input.sk-hidden--visually {\n",
|
|
" border: 0;\n",
|
|
" clip: rect(1px 1px 1px 1px);\n",
|
|
" clip: rect(1px, 1px, 1px, 1px);\n",
|
|
" height: 1px;\n",
|
|
" margin: -1px;\n",
|
|
" overflow: hidden;\n",
|
|
" padding: 0;\n",
|
|
" position: absolute;\n",
|
|
" width: 1px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 div.sk-dashed-wrapped {\n",
|
|
" border: 1px dashed var(--sklearn-color-line);\n",
|
|
" margin: 0 0.4em 0.5em 0.4em;\n",
|
|
" box-sizing: border-box;\n",
|
|
" padding-bottom: 0.4em;\n",
|
|
" background-color: var(--sklearn-color-background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 div.sk-container {\n",
|
|
" /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
|
|
" but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
|
|
" so we also need the `!important` here to be able to override the\n",
|
|
" default hidden behavior on the sphinx rendered scikit-learn.org.\n",
|
|
" See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
|
|
" display: inline-block !important;\n",
|
|
" position: relative;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 div.sk-text-repr-fallback {\n",
|
|
" display: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"div.sk-parallel-item,\n",
|
|
"div.sk-serial,\n",
|
|
"div.sk-item {\n",
|
|
" /* draw centered vertical line to link estimators */\n",
|
|
" background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
|
|
" background-size: 2px 100%;\n",
|
|
" background-repeat: no-repeat;\n",
|
|
" background-position: center center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* Parallel-specific style estimator block */\n",
|
|
"\n",
|
|
"#sk-container-id-2 div.sk-parallel-item::after {\n",
|
|
" content: \"\";\n",
|
|
" width: 100%;\n",
|
|
" border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
|
|
" flex-grow: 1;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 div.sk-parallel {\n",
|
|
" display: flex;\n",
|
|
" align-items: stretch;\n",
|
|
" justify-content: center;\n",
|
|
" background-color: var(--sklearn-color-background);\n",
|
|
" position: relative;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 div.sk-parallel-item {\n",
|
|
" display: flex;\n",
|
|
" flex-direction: column;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 div.sk-parallel-item:first-child::after {\n",
|
|
" align-self: flex-end;\n",
|
|
" width: 50%;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 div.sk-parallel-item:last-child::after {\n",
|
|
" align-self: flex-start;\n",
|
|
" width: 50%;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 div.sk-parallel-item:only-child::after {\n",
|
|
" width: 0;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* Serial-specific style estimator block */\n",
|
|
"\n",
|
|
"#sk-container-id-2 div.sk-serial {\n",
|
|
" display: flex;\n",
|
|
" flex-direction: column;\n",
|
|
" align-items: center;\n",
|
|
" background-color: var(--sklearn-color-background);\n",
|
|
" padding-right: 1em;\n",
|
|
" padding-left: 1em;\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
"/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
|
|
"clickable and can be expanded/collapsed.\n",
|
|
"- Pipeline and ColumnTransformer use this feature and define the default style\n",
|
|
"- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
|
|
"*/\n",
|
|
"\n",
|
|
"/* Pipeline and ColumnTransformer style (default) */\n",
|
|
"\n",
|
|
"#sk-container-id-2 div.sk-toggleable {\n",
|
|
" /* Default theme specific background. It is overwritten whether we have a\n",
|
|
" specific estimator or a Pipeline/ColumnTransformer */\n",
|
|
" background-color: var(--sklearn-color-background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* Toggleable label */\n",
|
|
"#sk-container-id-2 label.sk-toggleable__label {\n",
|
|
" cursor: pointer;\n",
|
|
" display: flex;\n",
|
|
" width: 100%;\n",
|
|
" margin-bottom: 0;\n",
|
|
" padding: 0.5em;\n",
|
|
" box-sizing: border-box;\n",
|
|
" text-align: center;\n",
|
|
" align-items: start;\n",
|
|
" justify-content: space-between;\n",
|
|
" gap: 0.5em;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 label.sk-toggleable__label .caption {\n",
|
|
" font-size: 0.6rem;\n",
|
|
" font-weight: lighter;\n",
|
|
" color: var(--sklearn-color-text-muted);\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 label.sk-toggleable__label-arrow:before {\n",
|
|
" /* Arrow on the left of the label */\n",
|
|
" content: \"▸\";\n",
|
|
" float: left;\n",
|
|
" margin-right: 0.25em;\n",
|
|
" color: var(--sklearn-color-icon);\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 label.sk-toggleable__label-arrow:hover:before {\n",
|
|
" color: var(--sklearn-color-text);\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* Toggleable content - dropdown */\n",
|
|
"\n",
|
|
"#sk-container-id-2 div.sk-toggleable__content {\n",
|
|
" max-height: 0;\n",
|
|
" max-width: 0;\n",
|
|
" overflow: hidden;\n",
|
|
" text-align: left;\n",
|
|
" /* unfitted */\n",
|
|
" background-color: var(--sklearn-color-unfitted-level-0);\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 div.sk-toggleable__content.fitted {\n",
|
|
" /* fitted */\n",
|
|
" background-color: var(--sklearn-color-fitted-level-0);\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 div.sk-toggleable__content pre {\n",
|
|
" margin: 0.2em;\n",
|
|
" border-radius: 0.25em;\n",
|
|
" color: var(--sklearn-color-text);\n",
|
|
" /* unfitted */\n",
|
|
" background-color: var(--sklearn-color-unfitted-level-0);\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 div.sk-toggleable__content.fitted pre {\n",
|
|
" /* unfitted */\n",
|
|
" background-color: var(--sklearn-color-fitted-level-0);\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
|
|
" /* Expand drop-down */\n",
|
|
" max-height: 200px;\n",
|
|
" max-width: 100%;\n",
|
|
" overflow: auto;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
|
|
" content: \"▾\";\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* Pipeline/ColumnTransformer-specific style */\n",
|
|
"\n",
|
|
"#sk-container-id-2 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
|
|
" color: var(--sklearn-color-text);\n",
|
|
" background-color: var(--sklearn-color-unfitted-level-2);\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
|
|
" background-color: var(--sklearn-color-fitted-level-2);\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* Estimator-specific style */\n",
|
|
"\n",
|
|
"/* Colorize estimator box */\n",
|
|
"#sk-container-id-2 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
|
|
" /* unfitted */\n",
|
|
" background-color: var(--sklearn-color-unfitted-level-2);\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
|
|
" /* fitted */\n",
|
|
" background-color: var(--sklearn-color-fitted-level-2);\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 div.sk-label label.sk-toggleable__label,\n",
|
|
"#sk-container-id-2 div.sk-label label {\n",
|
|
" /* The background is the default theme color */\n",
|
|
" color: var(--sklearn-color-text-on-default-background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* On hover, darken the color of the background */\n",
|
|
"#sk-container-id-2 div.sk-label:hover label.sk-toggleable__label {\n",
|
|
" color: var(--sklearn-color-text);\n",
|
|
" background-color: var(--sklearn-color-unfitted-level-2);\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* Label box, darken color on hover, fitted */\n",
|
|
"#sk-container-id-2 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
|
|
" color: var(--sklearn-color-text);\n",
|
|
" background-color: var(--sklearn-color-fitted-level-2);\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* Estimator label */\n",
|
|
"\n",
|
|
"#sk-container-id-2 div.sk-label label {\n",
|
|
" font-family: monospace;\n",
|
|
" font-weight: bold;\n",
|
|
" display: inline-block;\n",
|
|
" line-height: 1.2em;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 div.sk-label-container {\n",
|
|
" text-align: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* Estimator-specific */\n",
|
|
"#sk-container-id-2 div.sk-estimator {\n",
|
|
" font-family: monospace;\n",
|
|
" border: 1px dotted var(--sklearn-color-border-box);\n",
|
|
" border-radius: 0.25em;\n",
|
|
" box-sizing: border-box;\n",
|
|
" margin-bottom: 0.5em;\n",
|
|
" /* unfitted */\n",
|
|
" background-color: var(--sklearn-color-unfitted-level-0);\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 div.sk-estimator.fitted {\n",
|
|
" /* fitted */\n",
|
|
" background-color: var(--sklearn-color-fitted-level-0);\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* on hover */\n",
|
|
"#sk-container-id-2 div.sk-estimator:hover {\n",
|
|
" /* unfitted */\n",
|
|
" background-color: var(--sklearn-color-unfitted-level-2);\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 div.sk-estimator.fitted:hover {\n",
|
|
" /* fitted */\n",
|
|
" background-color: var(--sklearn-color-fitted-level-2);\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
|
|
"\n",
|
|
"/* Common style for \"i\" and \"?\" */\n",
|
|
"\n",
|
|
".sk-estimator-doc-link,\n",
|
|
"a:link.sk-estimator-doc-link,\n",
|
|
"a:visited.sk-estimator-doc-link {\n",
|
|
" float: right;\n",
|
|
" font-size: smaller;\n",
|
|
" line-height: 1em;\n",
|
|
" font-family: monospace;\n",
|
|
" background-color: var(--sklearn-color-background);\n",
|
|
" border-radius: 1em;\n",
|
|
" height: 1em;\n",
|
|
" width: 1em;\n",
|
|
" text-decoration: none !important;\n",
|
|
" margin-left: 0.5em;\n",
|
|
" text-align: center;\n",
|
|
" /* unfitted */\n",
|
|
" border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
|
|
" color: var(--sklearn-color-unfitted-level-1);\n",
|
|
"}\n",
|
|
"\n",
|
|
".sk-estimator-doc-link.fitted,\n",
|
|
"a:link.sk-estimator-doc-link.fitted,\n",
|
|
"a:visited.sk-estimator-doc-link.fitted {\n",
|
|
" /* fitted */\n",
|
|
" border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
|
|
" color: var(--sklearn-color-fitted-level-1);\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* On hover */\n",
|
|
"div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
|
|
".sk-estimator-doc-link:hover,\n",
|
|
"div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
|
|
".sk-estimator-doc-link:hover {\n",
|
|
" /* unfitted */\n",
|
|
" background-color: var(--sklearn-color-unfitted-level-3);\n",
|
|
" color: var(--sklearn-color-background);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
|
|
".sk-estimator-doc-link.fitted:hover,\n",
|
|
"div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
|
|
".sk-estimator-doc-link.fitted:hover {\n",
|
|
" /* fitted */\n",
|
|
" background-color: var(--sklearn-color-fitted-level-3);\n",
|
|
" color: var(--sklearn-color-background);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* Span, style for the box shown on hovering the info icon */\n",
|
|
".sk-estimator-doc-link span {\n",
|
|
" display: none;\n",
|
|
" z-index: 9999;\n",
|
|
" position: relative;\n",
|
|
" font-weight: normal;\n",
|
|
" right: .2ex;\n",
|
|
" padding: .5ex;\n",
|
|
" margin: .5ex;\n",
|
|
" width: min-content;\n",
|
|
" min-width: 20ex;\n",
|
|
" max-width: 50ex;\n",
|
|
" color: var(--sklearn-color-text);\n",
|
|
" box-shadow: 2pt 2pt 4pt #999;\n",
|
|
" /* unfitted */\n",
|
|
" background: var(--sklearn-color-unfitted-level-0);\n",
|
|
" border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
|
|
"}\n",
|
|
"\n",
|
|
".sk-estimator-doc-link.fitted span {\n",
|
|
" /* fitted */\n",
|
|
" background: var(--sklearn-color-fitted-level-0);\n",
|
|
" border: var(--sklearn-color-fitted-level-3);\n",
|
|
"}\n",
|
|
"\n",
|
|
".sk-estimator-doc-link:hover span {\n",
|
|
" display: block;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* \"?\"-specific style due to the `<a>` HTML tag */\n",
|
|
"\n",
|
|
"#sk-container-id-2 a.estimator_doc_link {\n",
|
|
" float: right;\n",
|
|
" font-size: 1rem;\n",
|
|
" line-height: 1em;\n",
|
|
" font-family: monospace;\n",
|
|
" background-color: var(--sklearn-color-background);\n",
|
|
" border-radius: 1rem;\n",
|
|
" height: 1rem;\n",
|
|
" width: 1rem;\n",
|
|
" text-decoration: none;\n",
|
|
" /* unfitted */\n",
|
|
" color: var(--sklearn-color-unfitted-level-1);\n",
|
|
" border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 a.estimator_doc_link.fitted {\n",
|
|
" /* fitted */\n",
|
|
" border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
|
|
" color: var(--sklearn-color-fitted-level-1);\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* On hover */\n",
|
|
"#sk-container-id-2 a.estimator_doc_link:hover {\n",
|
|
" /* unfitted */\n",
|
|
" background-color: var(--sklearn-color-unfitted-level-3);\n",
|
|
" color: var(--sklearn-color-background);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 a.estimator_doc_link.fitted:hover {\n",
|
|
" /* fitted */\n",
|
|
" background-color: var(--sklearn-color-fitted-level-3);\n",
|
|
"}\n",
|
|
"</style><div id=\"sk-container-id-2\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>LinearRegression()</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-2\" type=\"checkbox\" checked><label for=\"sk-estimator-id-2\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow\"><div><div>LinearRegression</div></div><div><a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.6/modules/generated/sklearn.linear_model.LinearRegression.html\">?<span>Documentation for LinearRegression</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></div></label><div class=\"sk-toggleable__content fitted\"><pre>LinearRegression()</pre></div> </div></div></div></div>"
|
|
],
|
|
"text/plain": [
|
|
"LinearRegression()"
|
|
]
|
|
},
|
|
"execution_count": 56,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"from sklearn.linear_model import LinearRegression\n",
|
|
"lin_reg = LinearRegression()\n",
|
|
"# YOUR CODE HERE\n",
|
|
"lin_reg.fit(z_sample.reshape(-1, 1), mu_sample)\n",
|
|
"#raise NotImplementedError()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 57,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "2dc255e53a5d0c973dfca577078d77c7",
|
|
"grade": true,
|
|
"grade_id": "cell-7ac2cec6a7505062",
|
|
"locked": true,
|
|
"points": 2,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Linear regression parameters recovered by scikit-learn: intercept=39.5505, slope=4.9538\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"assert lin_reg.coef_.shape == (1,), \"Make sure your features have the right shape, such that we have 1 fitted coefficient\"\n",
|
|
"print(\"Linear regression parameters recovered by scikit-learn: intercept={0:.4f}, slope={1:.4f}\"\n",
|
|
" .format(lin_reg.intercept_, lin_reg.coef_[0]))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "7e98e11722002c12cbf55f1e5039e6dd",
|
|
"grade": false,
|
|
"grade_id": "cell-59443e08cb021f49",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"*Extend your model to include polynomial features up to degree 15 (using Scikit-Learn). Use variable `lin_reg_poly` for your revised model.*"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 62,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "c48074367c1bb4a2704f931153372c1b",
|
|
"grade": false,
|
|
"grade_id": "cell-8ea9ea3be9d57ce5",
|
|
"locked": false,
|
|
"schema_version": 3,
|
|
"solution": true
|
|
}
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
"<style>#sk-container-id-3 {\n",
|
|
" /* Definition of color scheme common for light and dark mode */\n",
|
|
" --sklearn-color-text: #000;\n",
|
|
" --sklearn-color-text-muted: #666;\n",
|
|
" --sklearn-color-line: gray;\n",
|
|
" /* Definition of color scheme for unfitted estimators */\n",
|
|
" --sklearn-color-unfitted-level-0: #fff5e6;\n",
|
|
" --sklearn-color-unfitted-level-1: #f6e4d2;\n",
|
|
" --sklearn-color-unfitted-level-2: #ffe0b3;\n",
|
|
" --sklearn-color-unfitted-level-3: chocolate;\n",
|
|
" /* Definition of color scheme for fitted estimators */\n",
|
|
" --sklearn-color-fitted-level-0: #f0f8ff;\n",
|
|
" --sklearn-color-fitted-level-1: #d4ebff;\n",
|
|
" --sklearn-color-fitted-level-2: #b3dbfd;\n",
|
|
" --sklearn-color-fitted-level-3: cornflowerblue;\n",
|
|
"\n",
|
|
" /* Specific color for light theme */\n",
|
|
" --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
|
|
" --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
|
|
" --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
|
|
" --sklearn-color-icon: #696969;\n",
|
|
"\n",
|
|
" @media (prefers-color-scheme: dark) {\n",
|
|
" /* Redefinition of color scheme for dark theme */\n",
|
|
" --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
|
|
" --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
|
|
" --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
|
|
" --sklearn-color-icon: #878787;\n",
|
|
" }\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-3 {\n",
|
|
" color: var(--sklearn-color-text);\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-3 pre {\n",
|
|
" padding: 0;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-3 input.sk-hidden--visually {\n",
|
|
" border: 0;\n",
|
|
" clip: rect(1px 1px 1px 1px);\n",
|
|
" clip: rect(1px, 1px, 1px, 1px);\n",
|
|
" height: 1px;\n",
|
|
" margin: -1px;\n",
|
|
" overflow: hidden;\n",
|
|
" padding: 0;\n",
|
|
" position: absolute;\n",
|
|
" width: 1px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-3 div.sk-dashed-wrapped {\n",
|
|
" border: 1px dashed var(--sklearn-color-line);\n",
|
|
" margin: 0 0.4em 0.5em 0.4em;\n",
|
|
" box-sizing: border-box;\n",
|
|
" padding-bottom: 0.4em;\n",
|
|
" background-color: var(--sklearn-color-background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-3 div.sk-container {\n",
|
|
" /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
|
|
" but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
|
|
" so we also need the `!important` here to be able to override the\n",
|
|
" default hidden behavior on the sphinx rendered scikit-learn.org.\n",
|
|
" See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
|
|
" display: inline-block !important;\n",
|
|
" position: relative;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-3 div.sk-text-repr-fallback {\n",
|
|
" display: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"div.sk-parallel-item,\n",
|
|
"div.sk-serial,\n",
|
|
"div.sk-item {\n",
|
|
" /* draw centered vertical line to link estimators */\n",
|
|
" background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
|
|
" background-size: 2px 100%;\n",
|
|
" background-repeat: no-repeat;\n",
|
|
" background-position: center center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* Parallel-specific style estimator block */\n",
|
|
"\n",
|
|
"#sk-container-id-3 div.sk-parallel-item::after {\n",
|
|
" content: \"\";\n",
|
|
" width: 100%;\n",
|
|
" border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
|
|
" flex-grow: 1;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-3 div.sk-parallel {\n",
|
|
" display: flex;\n",
|
|
" align-items: stretch;\n",
|
|
" justify-content: center;\n",
|
|
" background-color: var(--sklearn-color-background);\n",
|
|
" position: relative;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-3 div.sk-parallel-item {\n",
|
|
" display: flex;\n",
|
|
" flex-direction: column;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-3 div.sk-parallel-item:first-child::after {\n",
|
|
" align-self: flex-end;\n",
|
|
" width: 50%;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-3 div.sk-parallel-item:last-child::after {\n",
|
|
" align-self: flex-start;\n",
|
|
" width: 50%;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-3 div.sk-parallel-item:only-child::after {\n",
|
|
" width: 0;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* Serial-specific style estimator block */\n",
|
|
"\n",
|
|
"#sk-container-id-3 div.sk-serial {\n",
|
|
" display: flex;\n",
|
|
" flex-direction: column;\n",
|
|
" align-items: center;\n",
|
|
" background-color: var(--sklearn-color-background);\n",
|
|
" padding-right: 1em;\n",
|
|
" padding-left: 1em;\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
"/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
|
|
"clickable and can be expanded/collapsed.\n",
|
|
"- Pipeline and ColumnTransformer use this feature and define the default style\n",
|
|
"- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
|
|
"*/\n",
|
|
"\n",
|
|
"/* Pipeline and ColumnTransformer style (default) */\n",
|
|
"\n",
|
|
"#sk-container-id-3 div.sk-toggleable {\n",
|
|
" /* Default theme specific background. It is overwritten whether we have a\n",
|
|
" specific estimator or a Pipeline/ColumnTransformer */\n",
|
|
" background-color: var(--sklearn-color-background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* Toggleable label */\n",
|
|
"#sk-container-id-3 label.sk-toggleable__label {\n",
|
|
" cursor: pointer;\n",
|
|
" display: flex;\n",
|
|
" width: 100%;\n",
|
|
" margin-bottom: 0;\n",
|
|
" padding: 0.5em;\n",
|
|
" box-sizing: border-box;\n",
|
|
" text-align: center;\n",
|
|
" align-items: start;\n",
|
|
" justify-content: space-between;\n",
|
|
" gap: 0.5em;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-3 label.sk-toggleable__label .caption {\n",
|
|
" font-size: 0.6rem;\n",
|
|
" font-weight: lighter;\n",
|
|
" color: var(--sklearn-color-text-muted);\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-3 label.sk-toggleable__label-arrow:before {\n",
|
|
" /* Arrow on the left of the label */\n",
|
|
" content: \"▸\";\n",
|
|
" float: left;\n",
|
|
" margin-right: 0.25em;\n",
|
|
" color: var(--sklearn-color-icon);\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-3 label.sk-toggleable__label-arrow:hover:before {\n",
|
|
" color: var(--sklearn-color-text);\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* Toggleable content - dropdown */\n",
|
|
"\n",
|
|
"#sk-container-id-3 div.sk-toggleable__content {\n",
|
|
" max-height: 0;\n",
|
|
" max-width: 0;\n",
|
|
" overflow: hidden;\n",
|
|
" text-align: left;\n",
|
|
" /* unfitted */\n",
|
|
" background-color: var(--sklearn-color-unfitted-level-0);\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-3 div.sk-toggleable__content.fitted {\n",
|
|
" /* fitted */\n",
|
|
" background-color: var(--sklearn-color-fitted-level-0);\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-3 div.sk-toggleable__content pre {\n",
|
|
" margin: 0.2em;\n",
|
|
" border-radius: 0.25em;\n",
|
|
" color: var(--sklearn-color-text);\n",
|
|
" /* unfitted */\n",
|
|
" background-color: var(--sklearn-color-unfitted-level-0);\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-3 div.sk-toggleable__content.fitted pre {\n",
|
|
" /* unfitted */\n",
|
|
" background-color: var(--sklearn-color-fitted-level-0);\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-3 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
|
|
" /* Expand drop-down */\n",
|
|
" max-height: 200px;\n",
|
|
" max-width: 100%;\n",
|
|
" overflow: auto;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-3 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
|
|
" content: \"▾\";\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* Pipeline/ColumnTransformer-specific style */\n",
|
|
"\n",
|
|
"#sk-container-id-3 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
|
|
" color: var(--sklearn-color-text);\n",
|
|
" background-color: var(--sklearn-color-unfitted-level-2);\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-3 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
|
|
" background-color: var(--sklearn-color-fitted-level-2);\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* Estimator-specific style */\n",
|
|
"\n",
|
|
"/* Colorize estimator box */\n",
|
|
"#sk-container-id-3 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
|
|
" /* unfitted */\n",
|
|
" background-color: var(--sklearn-color-unfitted-level-2);\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-3 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
|
|
" /* fitted */\n",
|
|
" background-color: var(--sklearn-color-fitted-level-2);\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-3 div.sk-label label.sk-toggleable__label,\n",
|
|
"#sk-container-id-3 div.sk-label label {\n",
|
|
" /* The background is the default theme color */\n",
|
|
" color: var(--sklearn-color-text-on-default-background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* On hover, darken the color of the background */\n",
|
|
"#sk-container-id-3 div.sk-label:hover label.sk-toggleable__label {\n",
|
|
" color: var(--sklearn-color-text);\n",
|
|
" background-color: var(--sklearn-color-unfitted-level-2);\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* Label box, darken color on hover, fitted */\n",
|
|
"#sk-container-id-3 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
|
|
" color: var(--sklearn-color-text);\n",
|
|
" background-color: var(--sklearn-color-fitted-level-2);\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* Estimator label */\n",
|
|
"\n",
|
|
"#sk-container-id-3 div.sk-label label {\n",
|
|
" font-family: monospace;\n",
|
|
" font-weight: bold;\n",
|
|
" display: inline-block;\n",
|
|
" line-height: 1.2em;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-3 div.sk-label-container {\n",
|
|
" text-align: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* Estimator-specific */\n",
|
|
"#sk-container-id-3 div.sk-estimator {\n",
|
|
" font-family: monospace;\n",
|
|
" border: 1px dotted var(--sklearn-color-border-box);\n",
|
|
" border-radius: 0.25em;\n",
|
|
" box-sizing: border-box;\n",
|
|
" margin-bottom: 0.5em;\n",
|
|
" /* unfitted */\n",
|
|
" background-color: var(--sklearn-color-unfitted-level-0);\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-3 div.sk-estimator.fitted {\n",
|
|
" /* fitted */\n",
|
|
" background-color: var(--sklearn-color-fitted-level-0);\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* on hover */\n",
|
|
"#sk-container-id-3 div.sk-estimator:hover {\n",
|
|
" /* unfitted */\n",
|
|
" background-color: var(--sklearn-color-unfitted-level-2);\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-3 div.sk-estimator.fitted:hover {\n",
|
|
" /* fitted */\n",
|
|
" background-color: var(--sklearn-color-fitted-level-2);\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
|
|
"\n",
|
|
"/* Common style for \"i\" and \"?\" */\n",
|
|
"\n",
|
|
".sk-estimator-doc-link,\n",
|
|
"a:link.sk-estimator-doc-link,\n",
|
|
"a:visited.sk-estimator-doc-link {\n",
|
|
" float: right;\n",
|
|
" font-size: smaller;\n",
|
|
" line-height: 1em;\n",
|
|
" font-family: monospace;\n",
|
|
" background-color: var(--sklearn-color-background);\n",
|
|
" border-radius: 1em;\n",
|
|
" height: 1em;\n",
|
|
" width: 1em;\n",
|
|
" text-decoration: none !important;\n",
|
|
" margin-left: 0.5em;\n",
|
|
" text-align: center;\n",
|
|
" /* unfitted */\n",
|
|
" border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
|
|
" color: var(--sklearn-color-unfitted-level-1);\n",
|
|
"}\n",
|
|
"\n",
|
|
".sk-estimator-doc-link.fitted,\n",
|
|
"a:link.sk-estimator-doc-link.fitted,\n",
|
|
"a:visited.sk-estimator-doc-link.fitted {\n",
|
|
" /* fitted */\n",
|
|
" border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
|
|
" color: var(--sklearn-color-fitted-level-1);\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* On hover */\n",
|
|
"div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
|
|
".sk-estimator-doc-link:hover,\n",
|
|
"div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
|
|
".sk-estimator-doc-link:hover {\n",
|
|
" /* unfitted */\n",
|
|
" background-color: var(--sklearn-color-unfitted-level-3);\n",
|
|
" color: var(--sklearn-color-background);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
|
|
".sk-estimator-doc-link.fitted:hover,\n",
|
|
"div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
|
|
".sk-estimator-doc-link.fitted:hover {\n",
|
|
" /* fitted */\n",
|
|
" background-color: var(--sklearn-color-fitted-level-3);\n",
|
|
" color: var(--sklearn-color-background);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* Span, style for the box shown on hovering the info icon */\n",
|
|
".sk-estimator-doc-link span {\n",
|
|
" display: none;\n",
|
|
" z-index: 9999;\n",
|
|
" position: relative;\n",
|
|
" font-weight: normal;\n",
|
|
" right: .2ex;\n",
|
|
" padding: .5ex;\n",
|
|
" margin: .5ex;\n",
|
|
" width: min-content;\n",
|
|
" min-width: 20ex;\n",
|
|
" max-width: 50ex;\n",
|
|
" color: var(--sklearn-color-text);\n",
|
|
" box-shadow: 2pt 2pt 4pt #999;\n",
|
|
" /* unfitted */\n",
|
|
" background: var(--sklearn-color-unfitted-level-0);\n",
|
|
" border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
|
|
"}\n",
|
|
"\n",
|
|
".sk-estimator-doc-link.fitted span {\n",
|
|
" /* fitted */\n",
|
|
" background: var(--sklearn-color-fitted-level-0);\n",
|
|
" border: var(--sklearn-color-fitted-level-3);\n",
|
|
"}\n",
|
|
"\n",
|
|
".sk-estimator-doc-link:hover span {\n",
|
|
" display: block;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* \"?\"-specific style due to the `<a>` HTML tag */\n",
|
|
"\n",
|
|
"#sk-container-id-3 a.estimator_doc_link {\n",
|
|
" float: right;\n",
|
|
" font-size: 1rem;\n",
|
|
" line-height: 1em;\n",
|
|
" font-family: monospace;\n",
|
|
" background-color: var(--sklearn-color-background);\n",
|
|
" border-radius: 1rem;\n",
|
|
" height: 1rem;\n",
|
|
" width: 1rem;\n",
|
|
" text-decoration: none;\n",
|
|
" /* unfitted */\n",
|
|
" color: var(--sklearn-color-unfitted-level-1);\n",
|
|
" border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-3 a.estimator_doc_link.fitted {\n",
|
|
" /* fitted */\n",
|
|
" border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
|
|
" color: var(--sklearn-color-fitted-level-1);\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* On hover */\n",
|
|
"#sk-container-id-3 a.estimator_doc_link:hover {\n",
|
|
" /* unfitted */\n",
|
|
" background-color: var(--sklearn-color-unfitted-level-3);\n",
|
|
" color: var(--sklearn-color-background);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-3 a.estimator_doc_link.fitted:hover {\n",
|
|
" /* fitted */\n",
|
|
" background-color: var(--sklearn-color-fitted-level-3);\n",
|
|
"}\n",
|
|
"</style><div id=\"sk-container-id-3\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>LinearRegression()</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-3\" type=\"checkbox\" checked><label for=\"sk-estimator-id-3\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow\"><div><div>LinearRegression</div></div><div><a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.6/modules/generated/sklearn.linear_model.LinearRegression.html\">?<span>Documentation for LinearRegression</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></div></label><div class=\"sk-toggleable__content fitted\"><pre>LinearRegression()</pre></div> </div></div></div></div>"
|
|
],
|
|
"text/plain": [
|
|
"LinearRegression()"
|
|
]
|
|
},
|
|
"execution_count": 62,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"degree = 15\n",
|
|
"bias = False\n",
|
|
"from sklearn.preprocessing import PolynomialFeatures\n",
|
|
"def compute_poly_features(degree, bias):\n",
|
|
" # Return polynomial features of samples and class\n",
|
|
" # YOUR CODE HERE\n",
|
|
" poly_features = PolynomialFeatures(degree=degree, include_bias=bias)\n",
|
|
" z_sample_poly = poly_features.fit_transform(z_sample.reshape(-1, 1))\n",
|
|
" \n",
|
|
" #raise NotImplementedError()\n",
|
|
" return z_sample_poly, poly_features\n",
|
|
"z_sample_poly, poly_features = compute_poly_features(degree, bias)\n",
|
|
"# Train model\n",
|
|
"# YOUR CODE HERE\n",
|
|
"lin_reg_poly = LinearRegression()\n",
|
|
"lin_reg_poly.fit(z_sample_poly, mu_sample)\n",
|
|
"#raise NotImplementedError()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "01cfbed87f8a26ed0ec8be34e437801a",
|
|
"grade": true,
|
|
"grade_id": "cell-d46184658a6b600b",
|
|
"locked": true,
|
|
"points": 2,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"check_var_defined('lin_reg_poly')"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "735fd8a02427e9a36d74685def71342c",
|
|
"grade": false,
|
|
"grade_id": "cell-5ccd955a752b81ea",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"*Plot the data and the predictions of your models considered so far (linear and polynomial regression). Call the variable used to store the predictions for your polynomial model `mu_pred_poly`.*"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 111,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "dd2a4e0385cd8ed4673e4aad5b632280",
|
|
"grade": false,
|
|
"grade_id": "cell-24f6bf2cfd9a7f71",
|
|
"locked": false,
|
|
"schema_version": 3,
|
|
"solution": true
|
|
}
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"<matplotlib.legend.Legend at 0x7bee6ca1f1d0>"
|
|
]
|
|
},
|
|
"execution_count": 111,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
},
|
|
{
|
|
"data": {
|
|
"image/png": "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f/Hbb7/x+++/8/XXX9O9e3f++OMPdDqdw8fm5OTQq1cvrl+/zssvv0zjxo0JDAzk/PnzjBo1Kt+HZEHXcobJZEKj0bBixQq718wbPDhi77GOxqgoinODdJJGo7H7HHmLox091p68jy3Oez106FDi4uL49ttveeGFF/jmm28IDQ2lT58+1nOqVKnCnj17WLlyJStWrGDFihXMmzePRx55xG5xdF5561ssPz8TJkwgNjbW7mMK+tm2R6PR8N1337FlyxZ++eUXVq5cyWOPPcY777zDli1bbH52PPWzIISFBDNCAAsXLgRw+EFgodVq6dGjBz169ODdd9/l3//+N//3f//HX3/9Rc+ePR1+WO7fv58jR46wYMECHnnkEevxok4zANSrV4+VK1dy/fp1h9mZevXqoSgKUVFRNGzYsMjPVVR16tRh3759mEwmm+zM4cOHrfdb/rt69WpSU1NtPiQTEhLyXbNChQp2py8sWZ6CVKhQwe4KKXuPLey9diQqKop27drx9ddf89xzz/HDDz8waNAgfH19bc4zGAwMGDCAAQMGYDKZeOaZZ5gzZw6TJ092OvCoW7cuYJ7CK2hsYH6tjx49mu+4vdcaoEOHDnTo0IE333yTr776iuHDh7N06VKbqUdXkq7boihkmkmUe2vWrOH1118nKioqX91AbtevX893rFWrVgDW1HtgYCBAvg9My1+uuf9SVRSl0KW4BXnggQdQFIWpU6fmu8/yPIMHD0an0zF16tR8fyUrisK1a9eK/Pxq9OvXj0uXLtnUkBiNRmbPnk1QUJB1mq1fv34YjUY++eQT63k5OTnMnj073zXr1avH4cOHuXLlivXY3r17C11pZHlsUlKSTYPEixcv8uOPP9qcp+a9LsjQoUPZsmULX3zxBVevXrWZYgLyve5arZYWLVqovn5eVapUoWvXrsyZM4eLFy/muz/3a9WvXz+2bNnCtm3bbO5fvHixzWNu3LiR72fGmdegqBz9GxKiIJKZEeXKihUrOHz4MEajkcuXL7NmzRpWrVpFnTp1+Pnnn/Hz83P42GnTprFu3Tr69+9PnTp1SExM5OOPP6ZWrVrcc889gPnDMiwsjE8//ZTg4GACAwNp3749jRs3pl69ekyYMIHz588TEhLC999/X6yagm7dujFixAg++OADjh49Sp8+fTCZTKxfv55u3brx3HPPUa9ePd544w3i4uI4deoUgwYNIjg4mJMnT/Ljjz/yxBNPMGHChCKPoTBPPPEEc+bMYdSoUezcuZPIyEi+++47Nm7cyHvvvWetURowYACdOnVi4sSJnDp1iujoaH744Yd8tUQAjz32GO+++y6xsbGMHj2axMREPv30U5o2bUpycnKB43nooYd4+eWXuf/++xk7dixpaWl88sknNGzYkF27dlnPU/NeF2TIkCFMmDCBCRMmULFixXzZkscff5zr16/TvXt3atWqxenTp5k9ezatWrUq8jLkjz76iHvuuYfmzZszZswY6taty+XLl9m8eTPnzp1j7969APzrX/9i4cKF9OnTh3HjxlmXZluyaBYLFizg448/5v7776devXqkpKQwd+5cQkJC6NevX5HGqEarVq3Q6XS89dZbJCUl4evrS/fu3alSpYrbnlOUAR5YQSVEibMszbZ8GQwGpVq1akqvXr2U999/37pEOLe8S0lXr16tDBw4UKlRo4ZiMBiUGjVqKMOGDVOOHDli87iffvpJiY6OVvR6vc2y4vj4eKVnz55KUFCQUqlSJWXMmDHK3r178y09HjlypBIYGFjoeBTFvHz57bffVho3bqwYDAalcuXKSt++fZWdO3fanPf9998r99xzjxIYGKgEBgYqjRs3Vp599lklISGhwNfN8px5lyg7GqO9pbaXL19WHn30UaVSpUqKwWBQmjdvbnfp+rVr15QRI0YoISEhSmhoqDJixAhl9+7ddpe6L1q0SKlbt65iMBiUVq1aKStXrlS1NFtRFOWPP/5QmjVrphgMBqVRo0bKokWLivxeF6RTp04KoDz++OP57vvuu++U3r17K1WqVFEMBoMSERGhPPnkk8rFixcLvKZlKfTbb79t9/7jx48rjzzyiFKtWjXFx8dHqVmzpnLfffcp3333nc15+/btU+69917Fz89PqVmzpvL6668rn3/+uc3S7F27dinDhg1TIiIiFF9fX6VKlSrKfffdp+zYsUPVePK+9mqXZiuKosydO1epW7euotPpZJm2UEWjKFKhJYQQQojSS2pmhBBCCFGqSTAjhBBCiFJNghkhhBBClGoeD2YsO6nm/mrcuLH1/oyMDJ599lnCw8MJCgrigQce4PLlyx4csRBCCCG8iceDGYCmTZty8eJF69eGDRus97344ov88ssvfPvtt/zvf//jwoULDB48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",
|
|
"text/plain": [
|
|
"<Figure size 640x480 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"# YOUR CODE HERE\n",
|
|
"plot_dist_mod()\n",
|
|
"plt.plot(z, mu_pred_lin, label=\"mu_pred_lin\")\n",
|
|
"\n",
|
|
"mu_pred_poly = lin_reg_poly.predict(poly_features.transform(z.reshape(-1,1)))\n",
|
|
"plt.plot(z, mu_pred_poly, label=\"mu_pred_poly\")\n",
|
|
"plt.legend()\n",
|
|
"#raise NotImplementedError()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 78,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "11efe12f85bf5edc3719a470150c480e",
|
|
"grade": true,
|
|
"grade_id": "cell-55abac99185aa2df",
|
|
"locked": true,
|
|
"points": 2,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"mu_pred_poly defined.\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"check_var_defined('mu_pred_poly')\n",
|
|
"assert mu_pred_poly.shape == (len(z),)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "0dfd352eae6049c8302271e9173b5b86",
|
|
"grade": false,
|
|
"grade_id": "cell-dc45782c437fb3b3",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"*Comment on the accuracy of your models.*"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "7a9b6ddcab190716cd17c327abb8da2a",
|
|
"grade": true,
|
|
"grade_id": "cell-c37fd48a9be1bd84",
|
|
"locked": false,
|
|
"points": 2,
|
|
"schema_version": 3,
|
|
"solution": true
|
|
}
|
|
},
|
|
"source": [
|
|
"The basic linear regression seems to fit the data better than the polynomial model, which looks overfitted. A small number of data points at the extreme end of the x-axis have a significant impact on the shape of the curve, far more than most of the points which are clustered towards 0 on the x-axis."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "7b3d585af5547dd71593690acb89f54a",
|
|
"grade": false,
|
|
"grade_id": "cell-642b8f293c37d087",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"*Think about methods that could be used to improve the performance of your models. Improve your polynomial model and use the improved model to make predictions. Call the variable used to store the polynomial model `ridge_reg_poly`. Call the variable used to store the predictions for your polynomial model `mu_pred_poly_improved`.*"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 94,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "809a92a774fec689d2048a896f1f4357",
|
|
"grade": true,
|
|
"grade_id": "cell-249f8b263075ba25",
|
|
"locked": false,
|
|
"points": 3,
|
|
"schema_version": 3,
|
|
"solution": true
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"# YOUR CODE HERE\n",
|
|
"from sklearn.pipeline import Pipeline\n",
|
|
"from sklearn.linear_model import Ridge\n",
|
|
"\n",
|
|
"ridge_reg_poly = Pipeline((\n",
|
|
" (\"poly_features\", poly_features),\n",
|
|
" (\"regul_reg\", Ridge(10)),\n",
|
|
"))\n",
|
|
"ridge_reg_poly.fit(z_sample.reshape(-1, 1), mu_sample)\n",
|
|
"mu_pred_poly_improved = ridge_reg_poly.predict(z.reshape(-1, 1))\n",
|
|
"\n",
|
|
"#raise NotImplementedError()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 95,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "23cbdcf0308d7d2f474ccecf681ddd73",
|
|
"grade": false,
|
|
"grade_id": "cell-5f2d7d6ea319189b",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"ridge_reg_poly defined.\n",
|
|
"mu_pred_poly_improved defined.\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"check_var_defined('ridge_reg_poly')\n",
|
|
"check_var_defined('mu_pred_poly_improved')\n",
|
|
"assert mu_pred_poly_improved.shape == (len(z),), \"Make sure the shape of your predictions is correct\""
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "8bb3a9403b75f4dc8b3a3e38664cd50a",
|
|
"grade": false,
|
|
"grade_id": "cell-d7ee6a9b415c62a9",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"*Plot the predictions made with new model and all previous models considered.*"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 109,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "c882d9ba097863626e9c85736d3dab30",
|
|
"grade": true,
|
|
"grade_id": "cell-14a8a955921c3d9c",
|
|
"locked": false,
|
|
"points": 1,
|
|
"schema_version": 3,
|
|
"solution": true
|
|
}
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"<matplotlib.legend.Legend at 0x7bee6a51d890>"
|
|
]
|
|
},
|
|
"execution_count": 109,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
},
|
|
{
|
|
"data": {
|
|
"image/png": "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zz//zLPPPsvkyZNL3IbiPPvssyxcuJCRI0dy8OBBQkND+eGHH9i1axfz58835Sj179+f9u3b89prr3HhwgUiIyP56aefCuQSATzzzDN89NFH9OrVi1GjRpGUlMRXX33FfffdR2pqapHtefzxx5kyZQoPP/ww48ePJzMzky+//JKGDRty6NAh03HWvNdFGTx4MJMnT2by5Mn4+PgU6C0ZPXo0t27domvXrtSuXZv4+HgWLFhA8+bNSzwN+fPPP+eBBx6gSZMmjBkzhrp163Lt2jV2797NpUuXOHr0KACvvvoq33//Pb1792bChAmmqdnGXjSjpUuX8sUXX/Dwww9Tr1490tLSWLRoER4eHvTt27dEbbRG8+bNUSqVvPfee6SkpODo6EjXrl0JCAgos3sK94AKmEElCOXOODXb+KVWq+UaNWrIPXr0kD/55BPTFOG88k8l3bp1qzxgwAA5KChIVqvVclBQkDx06FD59OnTZuf98ssvcmRkpKxSqcymFcfExMjdu3eX3dzcZD8/P3nMmDHy0aNHC0w9HjFihOzq6lpse2TZMH35gw8+kBs1aiSr1WrZ399f7tOnj3zw4EGz43788Uf5gQcekF1dXWVXV1e5UaNG8gsvvCDHxsYW+boZ75l/inJhbbQ01fbatWvy008/Lfv5+clqtVpu0qSJxanrN2/elIcPHy57eHjInp6e8vDhw+XDhw9bnOq+bNkyuW7durJarZabN28ub9682aqp2bIsy3/88YfcuHFjWa1Wy+Hh4fKyZctK/F4XpX379jIgjx49usC+H374Qe7Zs6ccEBAgq9VqOTg4WB47dqx85cqVIq9pnAr9wQcfWNx/7tw5+amnnpJr1KghOzg4yLVq1ZIffPBB+YcffjA77tixY3KnTp1kJycnuVatWvLMmTPl//u//zObmn3o0CF56NChcnBwsOzo6CgHBATIDz74oHzgwAGr2pP/tbd2arYsy/KiRYvkunXrykqlUkzTFqwiybLI0BIEQRAEoeoSOTOCIAiCIFRpIpgRBEEQBKFKE8GMIAiCIAhVWoUHM8aVVPN+NWrUyLQ/OzubF154AV9fX9zc3HjkkUe4du1aBbZYEARBEITKpMKDGYD77ruPK1eumL7++ecf076XX36ZDRs2sHbtWv7++28SExMZNGhQBbZWEARBEITKpFLUmVGpVNSoUaPA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cCulBDNC2D8O+/btE8OGDRN+fn4iMjJSvP3220Kv1zu5145nzzjU1taKN998U/Tq1Uv4+/uLsLAw8cILL4hff/3V+R13oN27d1v8/930vc+YMUOMHDmy0WsGDRoktFqtiIyMFKtXr3Z6vx3N3nEYOXJks+09VUt+H27lbsGMSggvypsSERGR4nh8zQwRERF5NwYzRERE5NEYzBAREZFHYzBDREREHo3BDBEREXk0BjNERETk0RjMEBERkUdjMENEREQejcEMEREReTQGM0REROTRGMwQkUd65513oFKpGj0++OADV3eNiJyMZzMRkUeqqKhAZWWl+evFixdjx44d2Lt3L7p37+7CnhGRs2lc3QEiopYIDg5GcHAwAGDRokXYsWMHsrOzGcgQeSFOMxGRR1u8eDHWrVuH7OxsREREuLo7ROQCDGaIyGOlpKTgs88+YyBD5OUYzBCRR0pJScHatWsZyBARa2aIyPMsW7YMK1euxNdffw1/f3+UlpYCANq1awc/Pz8X946InI2rmYjIowgh0LZtW5SXlzd67sCBA7jnnntc0CsiciUGM0REROTRWDNDREREHo3BDBEREXk0BjNERETk0RjMEBERkUdjMENEREQejcEMEREReTQGM0REROTRGMwQERGRR2MwQ0RERB6NwQwRERF5NAYzRERE5NEYzBAREZFH+18uwSvVeNWnBgAAAABJRU5ErkJggg==",
|
|
"text/plain": [
|
|
"<Figure size 640x480 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"# YOUR CODE HERE\n",
|
|
"plot_dist_mod()\n",
|
|
"plt.plot(z, mu_pred_lin, label=\"mu_pred_lin\")\n",
|
|
"plt.plot(z, mu_pred_poly, label=\"mu_pred_poly\")\n",
|
|
"plt.plot(z, mu_pred_poly_improved, label=\"mu_pred_poly_improved\")\n",
|
|
"plt.legend()\n",
|
|
"#raise NotImplementedError()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "180a54403a99d155688f8a290fc1015b",
|
|
"grade": false,
|
|
"grade_id": "cell-62604dceb287f6e4",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"*Compute the RMS error between your predictions and the data samples.*"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 97,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "6e268ea0e1117f31d0a367335c3ab18a",
|
|
"grade": false,
|
|
"grade_id": "cell-2ee5e0675e003f12",
|
|
"locked": false,
|
|
"schema_version": 3,
|
|
"solution": true
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"# Define a general function to compute the RMS error\n",
|
|
"def compute_rms(mu_1, mu_2):\n",
|
|
" # YOUR CODE HERE\n",
|
|
" return np.sqrt(sum([(x[0]-x[1])**2 for x in zip(mu_1, mu_2)]))\n",
|
|
" #raise NotImplementedError()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 98,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "6f8072de8469e1f06df363cc72011cc8",
|
|
"grade": true,
|
|
"grade_id": "cell-946369d338039825",
|
|
"locked": true,
|
|
"points": 1,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"assert np.isclose(compute_rms(mu_pred_lin, mu_pred_lin), 0.0)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 99,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "7621e2e41683215f9f485a1161168a5c",
|
|
"grade": false,
|
|
"grade_id": "cell-9c52009b6ad3fd17",
|
|
"locked": false,
|
|
"schema_version": 3,
|
|
"solution": true
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"# Compute the RMS error between the data and the predictions for each model.\n",
|
|
"# Use variables rms_sample_lin, rms_sample_poly and rms_sample_poly_improved.\n",
|
|
"# YOUR CODE HERE\n",
|
|
"rms_sample_lin = compute_rms(mu_sample, mu_pred_lin)\n",
|
|
"rms_sample_poly = compute_rms(mu_sample, mu_pred_poly)\n",
|
|
"rms_sample_poly_improved = compute_rms(mu_sample, mu_pred_poly_improved)\n",
|
|
"#raise NotImplementedError()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 100,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "f309e5fc58b77e4cda8bc8f3ee78ce1d",
|
|
"grade": false,
|
|
"grade_id": "cell-579ae5f1089bfb46",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"rms_sample_lin = 34.8048\n",
|
|
"rms_sample_poly = 624.2899\n",
|
|
"rms_sample_poly_improved = 27.2992\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"# Print RMS values computed.\n",
|
|
"print(\"rms_sample_lin = {0:.4f}\".format(rms_sample_lin))\n",
|
|
"print(\"rms_sample_poly = {0:.4f}\".format(rms_sample_poly))\n",
|
|
"print(\"rms_sample_poly_improved = {0:.4f}\".format(rms_sample_poly_improved))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "7d71e55b0de3ea49b8e285df5a75e860",
|
|
"grade": true,
|
|
"grade_id": "cell-09beb7cceccb40be",
|
|
"locked": true,
|
|
"points": 1,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"check_var_defined('rms_sample_lin')"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "3c12f33d96207e0b339d5a7d7e28146a",
|
|
"grade": true,
|
|
"grade_id": "cell-6000d96ec4b0de43",
|
|
"locked": true,
|
|
"points": 1,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"check_var_defined('rms_sample_poly')"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "c61d68d34d7d1760459d619d00f2a03c",
|
|
"grade": true,
|
|
"grade_id": "cell-06d3a7838b6ad7e7",
|
|
"locked": true,
|
|
"points": 1,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"check_var_defined('rms_sample_poly_improved')"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "d2cfab16a3b881eb9666957d282df2eb",
|
|
"grade": false,
|
|
"grade_id": "cell-a4632d53a04563a6",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"*Comment on what models you believe are best.*"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "65df151fe8f001ee61ec5607e15a0b3d",
|
|
"grade": true,
|
|
"grade_id": "cell-d34e017b234e387c",
|
|
"locked": false,
|
|
"points": 2,
|
|
"schema_version": 3,
|
|
"solution": true
|
|
}
|
|
},
|
|
"source": [
|
|
"I believe the linear and Ridge regression models are best, with the Ridge model performing better in terms of RMSE. I think the Ridge model could probably be tuned to be even better by varying the regularization parameter."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "92e241c8e04b9942db80a362a82b6429",
|
|
"grade": false,
|
|
"grade_id": "cell-d9ef9bfe07f359d0",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"Using our cosmological concordance model we can predict the theoretical distance modulus vs redshift relationship using our understanding of the physics."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 101,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "9df4b3203c1281eb061f9a3d159457f7",
|
|
"grade": false,
|
|
"grade_id": "cell-19fd3ac1f2d371eb",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"WARNING: AstroMLDeprecationWarning: The Cosmology class is deprecated and may be removed in a future version.\n",
|
|
" Use astropy.cosmology instead. [warnings]\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"from astroML.cosmology import Cosmology\n",
|
|
"cosmo = Cosmology()\n",
|
|
"mu_cosmo = np.array(list(map(cosmo.mu, z)))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "463b8b27c0408d32b519fd702dff0a63",
|
|
"grade": false,
|
|
"grade_id": "cell-22c310e26cfe2d41",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"*Plot the data, predictions made with all regression models, and the values predicted by the cosmological model.*"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 108,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "27b490f88536997467462e8d6ce09aa7",
|
|
"grade": true,
|
|
"grade_id": "cell-62cecf73f9f9a228",
|
|
"locked": false,
|
|
"points": 1,
|
|
"schema_version": 3,
|
|
"solution": true
|
|
}
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"<matplotlib.legend.Legend at 0x7bee6a4e5890>"
|
|
]
|
|
},
|
|
"execution_count": 108,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
},
|
|
{
|
|
"data": {
|
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAjMAAAHHCAYAAABKudlQAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAxgJJREFUeJzs3Xd4k9XbwPHvk9U23bu00MEqZS/ZyJSlCKKCiAiIqKgMcSAKCoqC/hwoLsRXQJniQFAQEEQQ2VsKZZW2UKDQvZvxvH+EhKZt2nS3cD7X1QvyzJOkbe7e55z7SLIsywiCIAiCINRSiupugCAIgiAIQnmIYEYQBEEQhFpNBDOCIAiCINRqIpgRBEEQBKFWE8GMIAiCIAi1mghmBEEQBEGo1UQwIwiCIAhCrSaCGUEQBEEQajURzAiCIAiCUKuJYEYQbJg9ezaSJFV3M+5oFy9eRJIkli5dWqbzJUli9uzZFdqm29XSpUuRJImLFy/afY75/fnggw9KPLaonye9Xs8rr7xCvXr1UCgUDB06tJStFgQTEcwIdwTzL2rzl6OjI4GBgfTv359PP/2U9PT0CrlPfHw8s2fP5ujRoxVyPUG4nX377bf873//46GHHmLZsmW88MILREZGMnv27FIFVYIgghnhjvLWW2/x/fff8+WXXzJp0iQApk6dSosWLTh+/LjVsTNnziQ7O7tU14+Pj2fOnDkimBGEAor6edq+fTtBQUF8/PHHjB49mh49ehAZGcmcOXNEMCOUiqq6GyAIVWngwIG0b9/e8njGjBls376d++67j/vvv59Tp07h5OQEgEqlQqUSPyJCzabX6zEajWg0mupuSrGK+nlKSEjAw8Ojehok3FZEZka44/Xu3ZtZs2YRExPD8uXLLduL6uPfunUr3bp1w8PDAxcXF8LDw3nttdcA2LFjB3fddRcA48aNs3Rpmcd77Nq1i4cffpjg4GAcHByoV68eL7zwQqG/VseOHYuLiwuXL19m6NChuLi44Ovry0svvYTBYLA61mg08sknn9CiRQscHR3x9fVlwIABHDx40Oq45cuX065dO5ycnPDy8uKRRx4hLi6uxNfG/BqcOXOGxx57DHd3d3x9fZk1axayLBMXF8eQIUNwc3MjICCADz/8sNA1EhISGD9+PP7+/jg6OtKqVSuWLVtW6LiUlBTGjh2Lu7s7Hh4ejBkzhpSUlELH9ezZk549exbaPnbsWEJDQ4t9PraOKe17bUvz5s3p1atXoe1Go5GgoCAeeughy7bVq1fTrl07XF1dcXNzo0WLFnzyySfFXj//GJUFCxbQoEEDHBwciIyMBOD06dM89NBDeHl54ejoSPv27Vm/fn2h65w8eZLevXvj5ORE3bp1mTt3LkajsdBxBw8epH///vj4+ODk5ERYWBhPPPFEkW37+uuvLe256667OHDggNX+/K+x+Xn89ddfnDx50upn5eGHHwagV69elu07duwo9nURBPFnpyAAo0eP5rXXXmPLli1MmDChyGNOnjzJfffdR8uWLXnrrbdwcHDg3Llz7N69G4CIiAjeeust3njjDZ566im6d+8OQJcuXQBYu3YtWVlZTJw4EW9vb/bv38/ChQu5dOkSa9eutbqXwWCgf//+dOzYkQ8++IA///yTDz/8kAYNGjBx4kTLcePHj2fp0qUMHDiQJ598Er1ez65du9i7d68lA/XOO+8wa9Yshg8fzpNPPsn169dZuHAhd999N0eOHLHrL+MRI0YQERHB/Pnz+f3335k7dy5eXl4sWrSI3r17895777FixQpeeukl7rrrLu6++24AsrOz6dmzJ+fOneP5558nLCyMtWvXMnbsWFJSUpgyZQoAsiwzZMgQ/vnnH5555hkiIiL45ZdfGDNmTCnexYpT0ntty4gRI5g9ezZXr14lICDAsv2ff/4hPj6eRx55BDAFSiNHjqRPnz689957AJw6dYrdu3dbXpPiLFmyhJycHJ566ikcHBzw8vLi5MmTdO3alaCgIF599VWcnZ354YcfGDp0KD/99BMPPPAAAFevXqVXr17o9XrLcV9//bUlI2mWkJBAv3798PX15dVXX8XDw4OLFy/y888/F2rPypUrSU9P5+mnn0aSJN5//32GDRvGhQsXUKvVhY739fXl+++/55133iEjI4N58+YB0KhRIyZPnsynn37Ka6+9RkREBIDlX0GwSRaEO8CSJUtkQD5w4IDNY9zd3eU2bdpYHr/55pty/h+Rjz/+WAbk69ev27zGgQMHZEBesmRJoX1ZWVmFts2bN0+WJEmOiYmxbBszZowMyG+99ZbVsW3atJHbtWtnebx9+3YZkCdPnlzoukajUZZlWb548aKsVCrld955x2r/iRMnZJVKVWh7QebX4KmnnrJs0+v1ct26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",
|
|
"text/plain": [
|
|
"<Figure size 640x480 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"# YOUR CODE HERE\n",
|
|
"plot_dist_mod()\n",
|
|
"plt.plot(z, mu_pred_lin, label=\"mu_pred_lin\")\n",
|
|
"plt.plot(z, mu_pred_poly, label=\"mu_pred_poly\")\n",
|
|
"plt.plot(z, mu_pred_poly_improved, label=\"mu_pred_poly_improved\")\n",
|
|
"plt.plot(z, mu_cosmo, label=\"mu_cosmo\")\n",
|
|
"plt.legend()\n",
|
|
"#raise NotImplementedError()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": []
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "b277d71c70a41ca213e62c916b98207d",
|
|
"grade": false,
|
|
"grade_id": "cell-285160edd2e418e2",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"*Compute the RMS error between the predictions made by the cosmological model and each of the regression models, over the sample array `z`.*"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 113,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "0034720cf8c44e319df90de05466ef84",
|
|
"grade": false,
|
|
"grade_id": "cell-939141aa04822e33",
|
|
"locked": false,
|
|
"schema_version": 3,
|
|
"solution": true
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"# Compute the RMS error between the data and the predictions for each model.\n",
|
|
"# Use variables rms_cosmo_lin, rms_cosmo_poly and rms_cosmo_poly_improved.\n",
|
|
"# YOUR CODE HERE\n",
|
|
"rms_cosmo_lin = compute_rms(mu_cosmo, mu_pred_lin)\n",
|
|
"rms_cosmo_poly = compute_rms(mu_cosmo, mu_pred_poly)\n",
|
|
"rms_cosmo_poly_improved = compute_rms(mu_cosmo, mu_pred_poly_improved)\n",
|
|
"#raise NotImplementedError()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 114,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "f4a351596164e691fb7bb6359e3de55b",
|
|
"grade": false,
|
|
"grade_id": "cell-770a716893bdb639",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"rms_cosmo_lin = 35.5823\n",
|
|
"rms_cosmo_poly = 653.4910\n",
|
|
"rms_cosmo_poly_improved = 41.9648\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"# Print RMS values computed.\n",
|
|
"print(\"rms_cosmo_lin = {0:.4f}\".format(rms_cosmo_lin))\n",
|
|
"print(\"rms_cosmo_poly = {0:.4f}\".format(rms_cosmo_poly))\n",
|
|
"print(\"rms_cosmo_poly_improved = {0:.4f}\".format(rms_cosmo_poly_improved))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 115,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "6f439fe717a169e6d0658974b1dcbc7b",
|
|
"grade": true,
|
|
"grade_id": "cell-e8a9f757965b2069",
|
|
"locked": true,
|
|
"points": 1,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"rms_cosmo_lin defined.\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"check_var_defined('rms_cosmo_lin')"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 116,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "33956cf40ac1a6064c599cca42bb3520",
|
|
"grade": true,
|
|
"grade_id": "cell-30ed009401260759",
|
|
"locked": true,
|
|
"points": 1,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"rms_cosmo_poly defined.\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"check_var_defined('rms_cosmo_poly')"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 117,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "4a4fc0aef5b79d11ac43990c71b12d93",
|
|
"grade": true,
|
|
"grade_id": "cell-e6ee872c00472aa2",
|
|
"locked": true,
|
|
"points": 1,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"rms_cosmo_poly_improved defined.\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"check_var_defined('rms_cosmo_poly_improved')"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "f67fca72235a566438e6daed262ecc04",
|
|
"grade": false,
|
|
"grade_id": "cell-cfa4d93afc081e93",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"*Comment on the RMS values computed and the implications for the accuracy of the different regression models considered.*"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "f25a554b6d3d42a22139116a83b3c1c7",
|
|
"grade": true,
|
|
"grade_id": "cell-a993842383ec9778",
|
|
"locked": false,
|
|
"points": 2,
|
|
"schema_version": 3,
|
|
"solution": true
|
|
}
|
|
},
|
|
"source": [
|
|
"As it turns out, from the RMSE results the basic linear regression was a better fit to the cosmological model than the more complex polynomial model with Ridge regression. This suggests that a polynomial model may not be a good fit. The theoretical relationship suggests an exponential nature rather than polynomial."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "e28b2898e145c2fb9c843928795b54f2",
|
|
"grade": false,
|
|
"grade_id": "cell-c8ac035dcf2c47fc",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"---"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "900204de52da9d3c8b85d7604102a518",
|
|
"grade": false,
|
|
"grade_id": "cell-2d2591b309fcc3d2",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"## Part 2: Classification"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "0e5cd46344bce92e33149bb5f42b9485",
|
|
"grade": false,
|
|
"grade_id": "cell-bb13c563fd6784c9",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"In these exercises we will consider classification of [RR Lyrae](https://en.wikipedia.org/wiki/RR_Lyrae_variable) variable stars. RR Lyrae variables are often used as standard candles to measure astronomical distances since their period of pulsation can be related to their absolute magnitude.\n",
|
|
"\n",
|
|
"Observations of star magnitudes are made in each [SDSS filter band](http://skyserver.sdss.org/dr2/en/proj/advanced/color/sdssfilters.asp): u, g, r, i, z.\n",
|
|
"\n",
|
|
"We will consider the space of astronomical \"colours\" to distinguish RR Lyraes from background stars. Astronomical colours are simply differences in magnitudes between bands, e.g. u-g, g-r, r-i, i-z. You can find further background [here](https://en.wikipedia.org/wiki/Color%E2%80%93color_diagram)."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "c8a74d7f460b94e02dde82bb72bb5eaf",
|
|
"grade": false,
|
|
"grade_id": "cell-4f6b1f1dc074f5cc",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"First, download the data. (This may take some time on first execution. Subsequently executions will read from cached data on your system.)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "df9d97d24e9496cc877839350420247b",
|
|
"grade": false,
|
|
"grade_id": "cell-73597701131bc8e2",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"# Load data\n",
|
|
"from astroML.datasets import fetch_rrlyrae_combined\n",
|
|
"X, y = fetch_rrlyrae_combined()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "8bf835a66bdebf03f21f25c2038156eb",
|
|
"grade": false,
|
|
"grade_id": "cell-2b739257efd6fbdf",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"You can learn more about the format of the returned data [here](http://www.astroml.org/modules/generated/astroML.datasets.fetch_rrlyrae_combined.html). In particular, note that the columns of `X` are u-g, g-r, r-i, i-z."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "cbba628ec0398b2d517363e7ba5b669b",
|
|
"grade": false,
|
|
"grade_id": "cell-1d6b876f89c05942",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"*Construct a Pandas DataFrame for the `X` data and a Series for the `y` data. Call your Pandas objects `X_pd` and `y_pd` respectively.*\n",
|
|
"\n",
|
|
"Be sure to give your colums the correct colour name, e.g. 'u-g'."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "17f47902f34b6b5623f6d387902a536e",
|
|
"grade": false,
|
|
"grade_id": "cell-7250404d5b9e0c13",
|
|
"locked": false,
|
|
"schema_version": 3,
|
|
"solution": true
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"import pandas as pd\n",
|
|
"cols=['u-g', 'g-r', 'r-i', 'i-z']\n",
|
|
"# YOUR CODE HERE\n",
|
|
"raise NotImplementedError()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "32251036f16850a2b13b1f78e0cf6ca8",
|
|
"grade": true,
|
|
"grade_id": "cell-a913d8acabdfba5c",
|
|
"locked": true,
|
|
"points": 1,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"check_var_defined('X_pd')\n",
|
|
"print(X_pd)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "1a57773c7e968f9c71d9be3229d9e2a8",
|
|
"grade": false,
|
|
"grade_id": "cell-0b438d5f8dcac8e9",
|
|
"locked": false,
|
|
"schema_version": 3,
|
|
"solution": true
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"# YOUR CODE HERE\n",
|
|
"raise NotImplementedError()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "097b3a38b8aec4ddf4a649990924e628",
|
|
"grade": true,
|
|
"grade_id": "cell-d1392b89a707b35a",
|
|
"locked": true,
|
|
"points": 1,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"check_var_defined('y_pd')\n",
|
|
"print(y_pd)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "a2a814f95845ae40b8d2e46d3f3b02d2",
|
|
"grade": false,
|
|
"grade_id": "cell-dba1c66617cc789e",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"*Combine your data and targets into a single Pandas DataFrame, labelling the target column 'target'. Call the resulting Pandas DataFrame `X_pd_all`.*"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "c9bc7cc9a6cb4270148403c68e9cd022",
|
|
"grade": false,
|
|
"grade_id": "cell-f80ca9f2573d06fb",
|
|
"locked": false,
|
|
"schema_version": 3,
|
|
"solution": true
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"# YOUR CODE HERE\n",
|
|
"raise NotImplementedError()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "9b150964210efff48af195349090fff3",
|
|
"grade": true,
|
|
"grade_id": "cell-694c65584675c6c6",
|
|
"locked": true,
|
|
"points": 1,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"check_var_defined('X_pd_all')\n",
|
|
"print(X_pd_all)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "2a59e1592037847daee2a1d59e66e82e",
|
|
"grade": false,
|
|
"grade_id": "cell-b2cdd1e8ff443c4f",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"*Add a 'target description' column to your existing `X_pd_all` DataFrame, with fields 'Background' and 'RR Lyrae' to specify the target type.*"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "0175b69fda7663e0c7f1e816703b8273",
|
|
"grade": false,
|
|
"grade_id": "cell-f94161f729fadf8c",
|
|
"locked": false,
|
|
"schema_version": 3,
|
|
"solution": true
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"# YOUR CODE HERE\n",
|
|
"raise NotImplementedError()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "9b02148198742613e8a4ca524e073b71",
|
|
"grade": true,
|
|
"grade_id": "cell-cb2480e79d82c641",
|
|
"locked": true,
|
|
"points": 1,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"print(X_pd_all)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "696a530a5fa11fd74e886aad53c4730a",
|
|
"grade": false,
|
|
"grade_id": "cell-add4e81373265098",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"*How many RR Lyrae variable stars are there in the dataset (i.e compute `n_rrlyrae`)?*"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "9e45a92c9efcd4a5dc60ae91cfaece89",
|
|
"grade": false,
|
|
"grade_id": "cell-753a59a39e3df18c",
|
|
"locked": false,
|
|
"schema_version": 3,
|
|
"solution": true
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"# YOUR CODE HERE\n",
|
|
"raise NotImplementedError()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "e4fa379f2a74a6855884a165bc422e87",
|
|
"grade": true,
|
|
"grade_id": "cell-c7fa425ec227dd04",
|
|
"locked": true,
|
|
"points": 1,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"check_var_defined('n_rrlyrae')\n",
|
|
"print(\"n_rrlyrae = {0}\".format(n_rrlyrae))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "8836626b58900a14fc8d5cca59c33d20",
|
|
"grade": false,
|
|
"grade_id": "cell-a267bf2d5be875a6",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"*How many background stars are there in the dataset (i.e. compute `n_background`)?*"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "9390ffb5aa4c435a65609e8d9fbbea17",
|
|
"grade": false,
|
|
"grade_id": "cell-f902e74120d04b39",
|
|
"locked": false,
|
|
"schema_version": 3,
|
|
"solution": true
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"# YOUR CODE HERE\n",
|
|
"raise NotImplementedError()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "766f1ee43bdca36d9c5b2eba3f20be3e",
|
|
"grade": true,
|
|
"grade_id": "cell-dd77ae406ebc1e36",
|
|
"locked": true,
|
|
"points": 1,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"check_var_defined('n_background')\n",
|
|
"print(\"n_background = {0}\".format(n_background))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "0ad0f46079adada0deefc29a592e1c23",
|
|
"grade": false,
|
|
"grade_id": "cell-494facc20b7778b6",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"*Plot scatter plot pairs for all colour combinations using `seaborn`. Colour the points by target type. Make sure the distribution plots are normalised to have an area of 1 under the curve for each of the classes.*"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "2198169c65059d8e1fd6d52582651c9f",
|
|
"grade": false,
|
|
"grade_id": "cell-ef57ad845334bbaa",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"%matplotlib inline\n",
|
|
"import seaborn as sns; sns.set()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "9a5b0a8a06c988cba3bac3fb41ee6ca6",
|
|
"grade": true,
|
|
"grade_id": "cell-6f8c0ce750628d0e",
|
|
"locked": false,
|
|
"points": 2,
|
|
"schema_version": 3,
|
|
"solution": true
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"# YOUR CODE HERE\n",
|
|
"raise NotImplementedError()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "cf6915bf6aa3ce7f12e619edc09b06e1",
|
|
"grade": false,
|
|
"grade_id": "cell-149d6b589054b26b",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"Let's separate the data into training and test sets, keeping 25% of the data for testing. "
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "386593a707ee1226d8721ea92970f653",
|
|
"grade": false,
|
|
"grade_id": "cell-22b31f7602338d7f",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"from sklearn.model_selection import train_test_split\n",
|
|
"X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=1)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "55ce997145aece349fa6ae7401d4cb1d",
|
|
"grade": false,
|
|
"grade_id": "cell-34fc23b040e948f7",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"First let's consider 1D classification for the zeroth colour, i.e. $u-g$. "
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "7c77a8433e4898de59b775624cf05767",
|
|
"grade": false,
|
|
"grade_id": "cell-53b81bcac2b85a55",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"ind = 0\n",
|
|
"col=cols[ind]\n",
|
|
"col"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "b3578a7b38fba9d5a52458bf8df86c7f",
|
|
"grade": false,
|
|
"grade_id": "cell-7a87a3946325c16c",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"X_train_1d = X_train[:, ind]\n",
|
|
"X_train_1d = X_train_1d.reshape(-1,1)\n",
|
|
"X_test_1d = X_test[:, ind]\n",
|
|
"X_test_1d = X_test_1d.reshape(-1,1)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "838b5dad42b1e778c11cd408b6987daf",
|
|
"grade": false,
|
|
"grade_id": "cell-bb6c2985470ef60d",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"To get some further intuition about the 1D classiciation problem consider a 1D plot of\n",
|
|
"class against colour."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "c32035c4ae5b83d6b7f73e39bda0d7a6",
|
|
"grade": false,
|
|
"grade_id": "cell-aac19aaa4019fefc",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"def plot_scatter():\n",
|
|
" plt.figure(figsize=(10,5))\n",
|
|
" plt.scatter(X_train_1d[y_train==1], y_train[y_train==1], c='m', marker='^', label='RR Lyrae')\n",
|
|
" plt.scatter(X_train_1d[y_train==0], y_train[y_train==0], c='c', marker='v', label='Background')\n",
|
|
" plt.xlabel('$' + col + '$')\n",
|
|
" plt.ylabel('Probability of type RR Lyrae')\n",
|
|
"plot_scatter() \n",
|
|
"plt.legend()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "e9cb694a42ffb3138b18c2e405645ce1",
|
|
"grade": false,
|
|
"grade_id": "cell-bd01fa3c7086288f",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"*Given the plot shown above, comment on how well you expect logistic regression to perform.*"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "cf842b131e1b494992c17edc41569b9d",
|
|
"grade": true,
|
|
"grade_id": "cell-1cad643fb7816037",
|
|
"locked": false,
|
|
"points": 1,
|
|
"schema_version": 3,
|
|
"solution": true
|
|
}
|
|
},
|
|
"source": [
|
|
"YOUR ANSWER HERE"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "639ffbefef37614d5671b1df92842700",
|
|
"grade": false,
|
|
"grade_id": "cell-00dca71454bb5330",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"*Where would you guess the decision bounary should lie? Set the variable `decision_boundary_guess` to your guess.*"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "1f8f91ff116877b36b5f768c4e7bbf53",
|
|
"grade": false,
|
|
"grade_id": "cell-5eef717d4fab1828",
|
|
"locked": false,
|
|
"schema_version": 3,
|
|
"solution": true
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"# YOUR CODE HERE\n",
|
|
"raise NotImplementedError()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "59d1034042c8531f42243eb3de1e6de7",
|
|
"grade": true,
|
|
"grade_id": "cell-00ef975a7880050f",
|
|
"locked": true,
|
|
"points": 1,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"check_var_defined('decision_boundary_guess')\n",
|
|
"print(\"decision_boundary_guess = {0:.4f}\".format(decision_boundary_guess))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "f6e3c3c0ceece7871bf22c9255a51295",
|
|
"grade": false,
|
|
"grade_id": "cell-4c704d78b7b22e68",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"Use Scikit-Learn to perform logistic regression to classify the two classes for this 1D problem."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "1acac14798c5dc7542fc6ea9406938bc",
|
|
"grade": false,
|
|
"grade_id": "cell-618989081fddad31",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"First, set the inverse regularation strength `C` such that regularisation is effecitvely not performed."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "58f98ba91242ad172c6817655bedd385",
|
|
"grade": false,
|
|
"grade_id": "cell-d7b94ebcadcc6111",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"C = 1e10"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "c9845c6ff70b8fbeaf82ce21e36fc34b",
|
|
"grade": false,
|
|
"grade_id": "cell-70bcad6835ff868d",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"*Second, fit the model using Scikit-Learn. Use the variable `clf` for your classification model.*"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "c1620a833ae3b05de4b1a57a1ce9ab03",
|
|
"grade": false,
|
|
"grade_id": "cell-f1790c24720c07d8",
|
|
"locked": false,
|
|
"schema_version": 3,
|
|
"solution": true
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"from sklearn.linear_model import LogisticRegression\n",
|
|
"# YOUR CODE HERE\n",
|
|
"raise NotImplementedError()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "4af20705b1b5e8ba2ccb810b4ac4a8f6",
|
|
"grade": true,
|
|
"grade_id": "cell-f6edcb4e5f610518",
|
|
"locked": true,
|
|
"points": 1,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"check_var_defined('clf')"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "8241cadb1bf5fa6ca1e650cf83a16181",
|
|
"grade": false,
|
|
"grade_id": "cell-1aafef5deaf49404",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"*Compute the decision boundary of the logistic regression model fitted by Scikit-Learn. User variable `decision_boundary_sklearn` for your result.*\n",
|
|
"\n",
|
|
"(Ensure your result is a scalar and not an array of length 1.)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "3ada1a115b287bb9f88afb2c54886805",
|
|
"grade": false,
|
|
"grade_id": "cell-01cd8a3ebc69de43",
|
|
"locked": false,
|
|
"schema_version": 3,
|
|
"solution": true
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"# YOUR CODE HERE\n",
|
|
"raise NotImplementedError()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "d8f8933baaf6b9eec389763501544d46",
|
|
"grade": true,
|
|
"grade_id": "cell-0ed39065189e2fae",
|
|
"locked": true,
|
|
"points": 1,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"assert not hasattr(decision_boundary_sklearn, \"__len__\")\n",
|
|
"print(\"decision_boundary_sklearn = {0:.4f}\".format(decision_boundary_sklearn))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "61747e5a45a3f44ed6fecb3d4840739f",
|
|
"grade": false,
|
|
"grade_id": "cell-b634a6057f675df8",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"*Evaluate the probabilities predicted by your logistic regression model over the domain specified by the variable `X_1d_new`. Use variable `y_1d_proba` for your computed probabilities.*"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "713631c608bc415a882d456ebd580a72",
|
|
"grade": false,
|
|
"grade_id": "cell-b3f7cdf5d4698ad6",
|
|
"locked": false,
|
|
"schema_version": 3,
|
|
"solution": true
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"X_1d_new = np.linspace(0.3, 2.0, 1000).reshape(-1, 1)\n",
|
|
"# YOUR CODE HERE\n",
|
|
"raise NotImplementedError()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "8d32cd84ae52ee452b0b5d3d026c81e7",
|
|
"grade": true,
|
|
"grade_id": "cell-bb76289d4e36fcb0",
|
|
"locked": true,
|
|
"points": 1,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"check_var_defined('y_1d_proba')"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "d257001f04351ccc61372e6e3ef4ed24",
|
|
"grade": false,
|
|
"grade_id": "cell-84d06c82f79d0657",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"*Plot the probability of a star being of type RR Lyrae against the colour variable considered. Also plot the probability of being a Background star. Overlay these plots on the scatter plot of class types. Also plot the decision boundary that you guessed previously and the one computed by Scikit-Learn.*"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "9406aeb0f224d10e25c85c23229913ed",
|
|
"grade": true,
|
|
"grade_id": "cell-1c623b6df631aa69",
|
|
"locked": false,
|
|
"points": 3,
|
|
"schema_version": 3,
|
|
"solution": true
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"plot_scatter()\n",
|
|
"# YOUR CODE HERE\n",
|
|
"raise NotImplementedError()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "38c50ceb30eb397312f8c8781e61c8ce",
|
|
"grade": false,
|
|
"grade_id": "cell-47b93e984622610a",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"*From inspection of your plot, how would all objects in the training set be classified?*"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "935b844dc811a7bb002362530ea1382c",
|
|
"grade": true,
|
|
"grade_id": "cell-dff437e03665f571",
|
|
"locked": false,
|
|
"points": 1,
|
|
"schema_version": 3,
|
|
"solution": true
|
|
}
|
|
},
|
|
"source": [
|
|
"YOUR ANSWER HERE"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "57c4ff384e0f250284b57a31fdd4d676",
|
|
"grade": false,
|
|
"grade_id": "cell-8bd241aeb91446bd",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"*Use your logistic regression model fitted by Scikit-Learn to predict the class of all objects in the test set. Use variable `y_test_1d_pred` to specify your answer.*"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "2c6b24344bcddc3f7b486346219e61af",
|
|
"grade": false,
|
|
"grade_id": "cell-bf444b0d8690c876",
|
|
"locked": false,
|
|
"schema_version": 3,
|
|
"solution": true
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"# YOUR CODE HERE\n",
|
|
"raise NotImplementedError()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "78f7aec829aca85dea759adc10e7c1dc",
|
|
"grade": true,
|
|
"grade_id": "cell-d69905ed477cb96f",
|
|
"locked": true,
|
|
"points": 1,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"check_var_defined('y_test_1d_pred')"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "a6947196762b67730c6fc399918e0f5b",
|
|
"grade": false,
|
|
"grade_id": "cell-71d78cb3b65a5d2d",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"*How many objects are classified as of type RR Lyrae? Use variable `n_rrlyrae_pred` to specify your answer.*"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "8346a9ea30670eef34617e29278b7e57",
|
|
"grade": false,
|
|
"grade_id": "cell-16f880b76044c462",
|
|
"locked": false,
|
|
"schema_version": 3,
|
|
"solution": true
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"# YOUR CODE HERE\n",
|
|
"raise NotImplementedError()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "63011f49012188bb2c43c31b5583d0ab",
|
|
"grade": true,
|
|
"grade_id": "cell-357fb80562d278c5",
|
|
"locked": true,
|
|
"points": 1,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"check_var_defined('n_rrlyrae_pred')\n",
|
|
"assert n_rrlyrae_pred % 1 == 0 # check integer\n",
|
|
"print(\"n_rrlyrae_pred = {0}\".format(n_rrlyrae_pred))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "60515433771f989e3f319af605095ce3",
|
|
"grade": false,
|
|
"grade_id": "cell-1c52ae8c8d62b5c1",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"*How many objects are classified as of type Background? Use variable `n_background_pred` to specify your answer.*"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "d27d505271b0382875458a6a858a5a99",
|
|
"grade": false,
|
|
"grade_id": "cell-ba43adb513abebcd",
|
|
"locked": false,
|
|
"schema_version": 3,
|
|
"solution": true
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"# YOUR CODE HERE\n",
|
|
"raise NotImplementedError()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "92dc794912b509ba3c7666f5adfc5121",
|
|
"grade": true,
|
|
"grade_id": "cell-5280ae78f8605c96",
|
|
"locked": true,
|
|
"points": 1,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"check_var_defined('n_background_pred')\n",
|
|
"assert n_background_pred % 1 == 0 # check integer\n",
|
|
"print(\"n_background_pred = {0}\".format(n_background_pred))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "5a4bf6f4b7b42873c50a01847c6a3ccd",
|
|
"grade": false,
|
|
"grade_id": "cell-8c852f5f04910102",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"Let's check the Scikit-Learn result by solving the logistic regression problem (without regularisation) manually."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "80cfc52c440f87820d3df9ce756d0420",
|
|
"grade": false,
|
|
"grade_id": "cell-297b86c040caaaa6",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"Recall that the cost function for logistic regression is given by\n",
|
|
"$$\n",
|
|
"C(\\theta) = -\\frac{1}{m} \\sum_{i=1}^m \n",
|
|
"\\left [ \n",
|
|
"y^{(i)} \\log(\\hat{p}^{(i)})\n",
|
|
"+\n",
|
|
"(1 - y^{(i)}) \\log(1 - \\hat{p}^{(i)})\n",
|
|
"\\right],\n",
|
|
"$$\n",
|
|
"\n",
|
|
"\n",
|
|
"where\n",
|
|
"\n",
|
|
"$$\\hat{p} = \\sigma(\\theta^\\text{T} x) = \\frac{1}{1+\\exp{(-\\theta^\\text{T} x)}}. $$"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "0be2a2a142b58454e9eee6c6a629faf3",
|
|
"grade": false,
|
|
"grade_id": "cell-4f5546691b1d0ce4",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"Show analytically that the derivative of the cost function is given by\n",
|
|
"$$\\begin{eqnarray}\n",
|
|
"\\frac{\\partial C}{\\partial \\theta} \n",
|
|
"&=& \n",
|
|
"\\frac{1}{m} \\sum_{i=1}^m \n",
|
|
"\\left[ \\sigma\\left(\\theta^{\\rm T} x^{(i)} \\right) - y^{(i)} \\right]\n",
|
|
"x^{(i)}\\\\\n",
|
|
"&=&\n",
|
|
"\\frac{1}{m} \n",
|
|
"X^{\\rm T}\n",
|
|
"\\left[ \\sigma\\left(X \\theta \\right) - y \\right]\n",
|
|
"\\end{eqnarray}$$\n",
|
|
"\n",
|
|
"(use latex mathematics expressions)."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "aac5b115296dd81b6f6b134cdbfc8ab9",
|
|
"grade": false,
|
|
"grade_id": "cell-e9f16916c6a0b264",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"*First, simplify the cost function terms $\\log(\\hat{p})$ and $\\log(1-\\hat{p})$ to express in terms linear in $\\log\\left({1+{\\rm e}^{-\\theta^{\\rm T}x}}\\right)$.*\n",
|
|
"\n",
|
|
"(You may drop $i$ superscripts for notational brevity.)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "460abf3f41632681b67e865162d4cef3",
|
|
"grade": true,
|
|
"grade_id": "cell-5fc3a8343ec24488",
|
|
"locked": false,
|
|
"points": 2,
|
|
"schema_version": 3,
|
|
"solution": true
|
|
}
|
|
},
|
|
"source": [
|
|
"YOUR ANSWER HERE"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "460d773d236b0ccb40e769762703284e",
|
|
"grade": false,
|
|
"grade_id": "cell-171037df1a01a3f4",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"*Next, substitute these terms into the cost function and simplify to also express the cost function in terms linear in $\\log\\left({1+{\\rm e}^{-\\theta^{\\rm T}x}}\\right)$.*"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "e9a37a1c8dc9250fa7070f97ba5adf58",
|
|
"grade": true,
|
|
"grade_id": "cell-dcdb0de863dc8931",
|
|
"locked": false,
|
|
"points": 2,
|
|
"schema_version": 3,
|
|
"solution": true
|
|
}
|
|
},
|
|
"source": [
|
|
"YOUR ANSWER HERE"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "e1fdb7cfcd2cb7f1b88deb585ec01297",
|
|
"grade": false,
|
|
"grade_id": "cell-6f608ac000ec6c3b",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"*Now compute the derivative of the cost function with respect to variable $\\theta_j$, i.e. compute $\\partial C / \\partial \\theta_j$.*"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "6d001523ce8324ab2ed170b153b96003",
|
|
"grade": true,
|
|
"grade_id": "cell-c386ea220c086ace",
|
|
"locked": false,
|
|
"points": 1,
|
|
"schema_version": 3,
|
|
"solution": true
|
|
}
|
|
},
|
|
"source": [
|
|
"YOUR ANSWER HERE"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "0a496a1ff30721c92959260555798802",
|
|
"grade": false,
|
|
"grade_id": "cell-89b9177d7dde5e70",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"*Combine terms for all $\\theta_j$ to give the overall derivative with respect to $\\theta$, i.e. $\\partial C / \\partial \\theta$.*"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "d456331004b76307432816c30e8c1fdf",
|
|
"grade": true,
|
|
"grade_id": "cell-331a74ac412db42b",
|
|
"locked": false,
|
|
"points": 1,
|
|
"schema_version": 3,
|
|
"solution": true
|
|
}
|
|
},
|
|
"source": [
|
|
"YOUR ANSWER HERE"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "54da6d5b63818d49cf17905b39e8bfab",
|
|
"grade": false,
|
|
"grade_id": "cell-722790463e0f0312",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"Using the analytically expression for the derivative of the cost function, we will solve the logistic regression problem by implementing a gradient descent algorithm."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "56b427758004808ef8810be4f28e3f57",
|
|
"grade": false,
|
|
"grade_id": "cell-c4321f09bf73ba33",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"*First, define the sigmoid function.*"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "529913786cc0781f24e5c75054c8261b",
|
|
"grade": false,
|
|
"grade_id": "cell-e12fc0aa65b673b1",
|
|
"locked": false,
|
|
"schema_version": 3,
|
|
"solution": true
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"def sigmoid(x):\n",
|
|
" # YOUR CODE HERE\n",
|
|
" raise NotImplementedError()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "797ba69ea2672a081856123e1d4cab2f",
|
|
"grade": true,
|
|
"grade_id": "cell-a5a50f4ec07d05fd",
|
|
"locked": true,
|
|
"points": 1,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"assert np.isclose(sigmoid(0), 0.5)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "915639b69935959b525f62d5bd0b3c00",
|
|
"grade": false,
|
|
"grade_id": "cell-ba2bb8821f4e75ad",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"*Next, extend the training data to account for a bias term in your model. Use variable `X_train_1d_b` to specify your result.*"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "e23f14ea753621e64da00f591268a851",
|
|
"grade": false,
|
|
"grade_id": "cell-463d94ffced62fba",
|
|
"locked": false,
|
|
"schema_version": 3,
|
|
"solution": true
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"# YOUR CODE HERE\n",
|
|
"raise NotImplementedError()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "b3f12428f02c09090a800fe5d46ef8f5",
|
|
"grade": true,
|
|
"grade_id": "cell-c6f32c5137a9f302",
|
|
"locked": true,
|
|
"points": 1,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"check_var_defined('X_train_1d_b')"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "9e30b76258ae09d0d57ee57525cab5fa",
|
|
"grade": false,
|
|
"grade_id": "cell-15322bd5d7e6c8bf",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"*Implement batch gradient descent to fit the parameters of your logistic regression model. Consider `n_iterations = 4000` iterations and a learning rate of `alpha = 100.0`. Consider a starting point of $\\theta_0 = (1, 1)$, i.e. `theta = np.array([[1], [1]])`. Use variable `theta` to specify your estimated parameters.*\n",
|
|
"\n",
|
|
"*(Make sure your implementation is reasonably efficient. If it takes longer than 2 minutes to execute when running on our server it may not complete and you will not be awarded grades. The solution answer runs in under 10 seconds.)*"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "e09887c1b2b8d4411a068063095582ec",
|
|
"grade": false,
|
|
"grade_id": "cell-aee503a999e27cf6",
|
|
"locked": false,
|
|
"schema_version": 3,
|
|
"solution": true
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"n_iterations = 4000\n",
|
|
"alpha = 100.0\n",
|
|
"theta = np.array([[1], [1]])\n",
|
|
"\n",
|
|
"# YOUR CODE HERE\n",
|
|
"raise NotImplementedError()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "b29368af60c38637709a67ba63372233",
|
|
"grade": true,
|
|
"grade_id": "cell-db0d3866ab6ed5aa",
|
|
"locked": true,
|
|
"points": 4,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"check_var_defined('theta')\n",
|
|
"print(\"theta[0] = {0:.4f}\".format(theta[0][0]))\n",
|
|
"print(\"theta[1] = {0:.4f}\".format(theta[1][0]))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "2c3275c68a087f4b57825087f2c0e024",
|
|
"grade": false,
|
|
"grade_id": "cell-d6efe104a72bb532",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"*Compute the difference between the logistic regression model intercept computed by Scikit-Learn and manually. Use variable `intercept_diff` for your result.*"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "609ee4a21d8b86b1bbf931c8313b38d9",
|
|
"grade": false,
|
|
"grade_id": "cell-b761dbdc7668fb7d",
|
|
"locked": false,
|
|
"schema_version": 3,
|
|
"solution": true
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"# YOUR CODE HERE\n",
|
|
"raise NotImplementedError()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "77cebdb4b7cf0653da556a19347d7921",
|
|
"grade": true,
|
|
"grade_id": "cell-eda44b051be24b4c",
|
|
"locked": true,
|
|
"points": 1,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"check_var_defined('intercept_diff')\n",
|
|
"print(\"intercept_diff = {0:.4E}\".format(intercept_diff))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "59efb6665ec993c52e2262eee838fc25",
|
|
"grade": false,
|
|
"grade_id": "cell-3ff8e6906407e9fe",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"*Compute the difference between the logistic regression model* slope *(i.e. coefficient) computed by Scikit-Learn and manually. Use variable `coeff_diff` for your result.*"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "ec3e8455318b44f96b4cc4ff259aaaad",
|
|
"grade": false,
|
|
"grade_id": "cell-17bd3970318abda0",
|
|
"locked": false,
|
|
"schema_version": 3,
|
|
"solution": true
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"# YOUR CODE HERE\n",
|
|
"raise NotImplementedError()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "bcc12d94a1fa9b22a5710d5cc64b9399",
|
|
"grade": true,
|
|
"grade_id": "cell-830185c3c51f3f91",
|
|
"locked": true,
|
|
"points": 1,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"check_var_defined('coeff_diff')\n",
|
|
"print(\"coeff_diff = {0:.4E}\".format(coeff_diff))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "8eebb530913c2d78ea43e8d6cfccb9a7",
|
|
"grade": false,
|
|
"grade_id": "cell-0d8a45598ebad1aa",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"You should find that the solution from your gradient descent algorithm is close (although not identical) to that recovered by Scikit-Learn. "
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "ebb30f7db5829cfb68123d51796994cd",
|
|
"grade": false,
|
|
"grade_id": "cell-8b404d163f645ffd",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"Both fitted logistic regression models, however, are not effective. The reason for this is because of class imbalance. *Describe the class imbalance problem in your own words and how it manifests itself in the classification problem at hand.*"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "bbf0e320d4f9d168daa3b4b6397a6a6b",
|
|
"grade": true,
|
|
"grade_id": "cell-73126eae7fcd4d45",
|
|
"locked": false,
|
|
"points": 3,
|
|
"schema_version": 3,
|
|
"solution": true
|
|
}
|
|
},
|
|
"source": [
|
|
"YOUR ANSWER HERE"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "d2c5242206ed7f763289951a7d5b1acd",
|
|
"grade": false,
|
|
"grade_id": "cell-32339ef70667c4de",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"The class imbalance problem can be addressed by weighting the training data in a manner that is inversely proportional to their frequency.\n",
|
|
"\n",
|
|
"*Repeat the fitting of your linear regression model but this time perform class weighting. Use variable `clf_balanced` for your new model.*\n",
|
|
"\n",
|
|
"See the `class_weight` argument of the Scikit-Learn [Logistic Regression](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html) classifier for further details on how to perform class weighting."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "ca93af45fe489f2970d9465be9f1f227",
|
|
"grade": false,
|
|
"grade_id": "cell-043f89d606f8da67",
|
|
"locked": false,
|
|
"schema_version": 3,
|
|
"solution": true
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"from sklearn.linear_model import LogisticRegression\n",
|
|
"# YOUR CODE HERE\n",
|
|
"raise NotImplementedError()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "1fea7d2b3c6c89155867794f7c43b1b3",
|
|
"grade": true,
|
|
"grade_id": "cell-5dea5e84c6b3f90f",
|
|
"locked": true,
|
|
"points": 0,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"check_var_defined('clf_balanced')"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "56698708c8d07b85c23e96e74a5f7d02",
|
|
"grade": false,
|
|
"grade_id": "cell-0e177c0c3236c200",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"*Compute the decision boundary of the logistic regression model fitted by Scikit-Learn when weighting classes.* \n",
|
|
"\n",
|
|
"(Ensure your result is a scalar and not an array of length 1.)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "4e68b25af62c3c3b9ce3d88fe30e7246",
|
|
"grade": false,
|
|
"grade_id": "cell-8789a822ce94928b",
|
|
"locked": false,
|
|
"schema_version": 3,
|
|
"solution": true
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"# YOUR CODE HERE\n",
|
|
"raise NotImplementedError()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "b1830b90407271f2c1a3d024750d1368",
|
|
"grade": true,
|
|
"grade_id": "cell-6d9e2c731edfff2f",
|
|
"locked": true,
|
|
"points": 2,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"check_var_defined('decision_boundary_sklearn_balanced')\n",
|
|
"assert not hasattr(decision_boundary_sklearn_balanced, \"__len__\")\n",
|
|
"print(\"decision_boundary_sklearn_balanced = {0:.4f}\".format(decision_boundary_sklearn_balanced))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "5c9b36e7743bfde53557b5426c4fb77f",
|
|
"grade": false,
|
|
"grade_id": "cell-3361e275fac9beac",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"*Evaluate the probabilities prediced by your new logistic regression model over the domain specified by the variable `X_1d_new`. Use variable `y_1d_proba_balanced` for your computed probabilities.*"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "e9f94c6ad6d1ed961f39c11ae5b8ac9e",
|
|
"grade": false,
|
|
"grade_id": "cell-3db9585a121a321b",
|
|
"locked": false,
|
|
"schema_version": 3,
|
|
"solution": true
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"# YOUR CODE HERE\n",
|
|
"raise NotImplementedError()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "344d65536b5d89cf8b1fd6e93f527f66",
|
|
"grade": true,
|
|
"grade_id": "cell-b5df6903e536bc3e",
|
|
"locked": true,
|
|
"points": 1,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"check_var_defined('y_1d_proba_balanced')"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "acc5329742bc3574c6acb59d20110cb6",
|
|
"grade": false,
|
|
"grade_id": "cell-cef66593b1ed2e90",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"*For your new balanced model, plot the probability of a star being of type RR Lyrae against the colour variable considered. Also plot the probability of being a Background star. Overlay these plots on the scatter plot of class types. Also plot the decision boundary that you guessed previously, the one computed by Scikit-Learn initially, and the one computed by Scikit-Learn for your new balanced model.*"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "48606796161d04d156d3cba41a082cba",
|
|
"grade": true,
|
|
"grade_id": "cell-9ce627c16d3996e6",
|
|
"locked": false,
|
|
"points": 2,
|
|
"schema_version": 3,
|
|
"solution": true
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"plot_scatter()\n",
|
|
"# YOUR CODE HERE\n",
|
|
"raise NotImplementedError()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "a29c1deb02f416bb5859ea868d5f1ecf",
|
|
"grade": false,
|
|
"grade_id": "cell-b91a8e6743a0e23f",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"*Comment on the decision boundary of the balanced model compared to the unbalanced models fitted previously.*"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "963c36d881b371659186c7739c8a1a43",
|
|
"grade": true,
|
|
"grade_id": "cell-45725a6e2c43d0f1",
|
|
"locked": false,
|
|
"points": 1,
|
|
"schema_version": 3,
|
|
"solution": true
|
|
}
|
|
},
|
|
"source": [
|
|
"YOUR ANSWER HERE"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "f1f1759a78aff4f424286f2f577be5ec",
|
|
"grade": false,
|
|
"grade_id": "cell-a5126bea92958ffe",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"Now that we've built up good intuition surrounding the subtleties of the classification problem at hand in 1D, let's consider the 2D problem (we will keep to 2D for plotting convenience)."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "b853b8b820ed7b06e86b709642fba4c3",
|
|
"grade": false,
|
|
"grade_id": "cell-46205b5da6dd0e77",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"For the 2D case we consider the following colours."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "92a30f4f2db3010902ab7d521054bbff",
|
|
"grade": false,
|
|
"grade_id": "cell-11a94502070606e6",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"ind = 1\n",
|
|
"cols[:ind+1]"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "24955f013f80e7be059375dcbbecec30",
|
|
"grade": false,
|
|
"grade_id": "cell-ea66a8b2540e3455",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"Consider the following training and test data for the 2D problem."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "62e64cbf875c25da99467cb26c1f6c7a",
|
|
"grade": false,
|
|
"grade_id": "cell-374dd2ec4c108d9c",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"X_train_2d = X_train[:, :ind+1]\n",
|
|
"X_train_2d = X_train_2d.reshape(-1,ind+1)\n",
|
|
"X_test_2d = X_test[:, :ind+1]\n",
|
|
"X_test_2d = X_test_2d.reshape(-1,ind+1)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "be00d6c3427598d2d4a80466e56e4221",
|
|
"grade": false,
|
|
"grade_id": "cell-ead79764fa5bdc91",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"*Train a logistic regression model for this 2D problem. Use variable `clf_2d_logistic` for your classifier.*"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "084e3730086edc9f3a88b357a32f13b3",
|
|
"grade": false,
|
|
"grade_id": "cell-807bce2068c8c513",
|
|
"locked": false,
|
|
"schema_version": 3,
|
|
"solution": true
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"# YOUR CODE HERE\n",
|
|
"raise NotImplementedError()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "e54724d2562c049fb17447ee0955fdcd",
|
|
"grade": true,
|
|
"grade_id": "cell-6d3421df624a8839",
|
|
"locked": true,
|
|
"points": 0,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"check_var_defined('clf_2d_logistic')"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "7b0cbcffdf52227ee932131fe0594f4d",
|
|
"grade": false,
|
|
"grade_id": "cell-d8af8aa1d07b0c2e",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"*Compute the precision and recall of your 2D logistic regression model. Use variables `precision_logistic` and `recall_logistic` for your results.*"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "a497d2e0107dba9c7bf6b8d6890b5d75",
|
|
"grade": false,
|
|
"grade_id": "cell-5aa20025d9dcd3de",
|
|
"locked": false,
|
|
"schema_version": 3,
|
|
"solution": true
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"# YOUR CODE HERE\n",
|
|
"raise NotImplementedError()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "89d58d5042e1fc392b449b7f0cb03e3b",
|
|
"grade": true,
|
|
"grade_id": "cell-901a95a71017f77a",
|
|
"locked": true,
|
|
"points": 1,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"check_var_defined('precision_logistic')\n",
|
|
"print(\"precision_logistic = {0:.6f}\".format(precision_logistic))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "a8c0b5936c41a742cddef03152ffa57a",
|
|
"grade": true,
|
|
"grade_id": "cell-c829df4fb5b5646d",
|
|
"locked": true,
|
|
"points": 1,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"check_var_defined('recall_logistic')\n",
|
|
"print(\"recall_logistic = {0:.6f}\".format(recall_logistic))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "9ba63808879ae626d04958a07df7be2e",
|
|
"grade": false,
|
|
"grade_id": "cell-e7757c51155e4dfc",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"Consider the following meshgrid defining the u-g and g-r colour domain of interest."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "936ae179349f4afb9f2e84f901b1ac39",
|
|
"grade": false,
|
|
"grade_id": "cell-c1045a44e953f715",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"xlim = (0.7, 1.45) # u-g\n",
|
|
"ylim = (-0.15, 0.4) # g-r\n",
|
|
"xx, yy = np.meshgrid(np.linspace(xlim[0], xlim[1], 100),\n",
|
|
" np.linspace(ylim[0], ylim[1], 100))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "f4172020874b0ca0808cef832529bb1c",
|
|
"grade": false,
|
|
"grade_id": "cell-7b3fd3dd9fb85196",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"*Over the domain specified above plot the predicted classification probability. Overlay on your plot the data instances, highlighting whether a RR Lyrae or background star, and the decision boundary.*"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "f86ab2a5e0c7bbae351fa52f20f7f928",
|
|
"grade": true,
|
|
"grade_id": "cell-cb93ed5cd3864d37",
|
|
"locked": false,
|
|
"points": 5,
|
|
"schema_version": 3,
|
|
"solution": true
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"# YOUR CODE HERE\n",
|
|
"raise NotImplementedError()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "9d7c9da1a39851de5856c8e6353c3aa7",
|
|
"grade": false,
|
|
"grade_id": "cell-a39275a441142214",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"*Now train an SVM classifier that can support a non-linear decision boundary on the same problem. Use the variable `clf_2d_svm` for your model.*"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "e95438410123c8be26e3caeee498b988",
|
|
"grade": true,
|
|
"grade_id": "cell-c15b2b7d9de2fc9c",
|
|
"locked": false,
|
|
"points": 3,
|
|
"schema_version": 3,
|
|
"solution": true
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"# YOUR CODE HERE\n",
|
|
"raise NotImplementedError()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"check_var_defined('clf_2d_svm')"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "fb4bec941b61ff878b444ad7d0845e2e",
|
|
"grade": false,
|
|
"grade_id": "cell-5b337b0e95730f71",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"*Replicate for the SVM your plot above for the 2D logistic regression model. Over the domain specified above plot the decision function score. Overlay on your plot the data instances, highlighting whether a RR Lyrae or background star, and the decision boundary.*"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "139c53d2625a5b080ec97d77d07c64d4",
|
|
"grade": true,
|
|
"grade_id": "cell-3f1d0097c1a9a231",
|
|
"locked": false,
|
|
"points": 4,
|
|
"schema_version": 3,
|
|
"solution": true
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"# YOUR CODE HERE\n",
|
|
"raise NotImplementedError()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "1d44b6983a7391f6baec9783e8f9c3b9",
|
|
"grade": false,
|
|
"grade_id": "cell-9396defb6a2fd540",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"*Compute the precision and recall of your 2D SVM model. Use variables `precision_svm` and `recall_svm` for your results.*"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "676c64172c9ee6735a3554f3a19e2787",
|
|
"grade": false,
|
|
"grade_id": "cell-4bb00fa2958c34b5",
|
|
"locked": false,
|
|
"schema_version": 3,
|
|
"solution": true
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"# YOUR CODE HERE\n",
|
|
"raise NotImplementedError()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "242d477110906928300aca9370ecae60",
|
|
"grade": true,
|
|
"grade_id": "cell-8a0f183fa2697432",
|
|
"locked": true,
|
|
"points": 2,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"check_var_defined('precision_svm')\n",
|
|
"print(\"precision_svm = {0:.6f}\".format(precision_svm))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "4b9d01eaa4ee806dc2c07205c2d46660",
|
|
"grade": true,
|
|
"grade_id": "cell-c88d680adad83470",
|
|
"locked": true,
|
|
"points": 2,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"check_var_defined('recall_svm')\n",
|
|
"print(\"recall_svm = {0:.6f}\".format(recall_svm))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "991b3f11093789127b5b6fbf01e75552",
|
|
"grade": false,
|
|
"grade_id": "cell-6e323ca87d06c0b4",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false
|
|
}
|
|
},
|
|
"source": [
|
|
"*Comment on the difference in decision boundary between your logistic regression and SVM models and how this impacts the effectiveness of the models.*"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "3d6cb3a273d55b60497f2ed2047bfc2d",
|
|
"grade": true,
|
|
"grade_id": "cell-5429ab62dc4857e2",
|
|
"locked": false,
|
|
"points": 4,
|
|
"schema_version": 3,
|
|
"solution": true
|
|
}
|
|
},
|
|
"source": [
|
|
"YOUR ANSWER HERE"
|
|
]
|
|
}
|
|
],
|
|
"metadata": {
|
|
"kernelspec": {
|
|
"display_name": "Python 3 (ipykernel)",
|
|
"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.11.11"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 4
|
|
}
|