{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Exercise 7.1\n",
    "\n",
    "Suppose that the distinct plane points $(x_i,y_i)$ for $i=1,\\ldots,n$ are to be fit using a linear function without intercept, $\\hat{f}(x)=w x$. Use calculus to find a formula for the value of $w$ that minimizes the sum of squared residuals,\n",
    "\n",
    "$$ \n",
    "L(w) = \\sum_{i=1}^n \\bigl(y_i - \\hat{f}(x_i)\\bigr)^2. \n",
    "$$\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Exercise 7.2\n",
    "\n",
    "Suppose that $x_1=-2$, $x_2=1$, and $x_3=2$. Define $w$ as in Exercise 7.1, and define the predicted values $\\hat{y}_k=w x_k$ for $k=1,2,3$. Express each $\\hat{y}_k$ as a combination of the three values $y_1$, $y_2$, and $y_3$, which remain arbitrary. (This is a special case of a general fact about linear regression: each prediction is a linear combination of the training values.)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Exercise 7.3\n",
    "\n",
    "Using the formulas derived in [Section 7.1](regression.html#sec-regression-linear), show that the point $(\\bar{x},\\bar{y})$ always lies on the linear regression line. (Hint: You only have to show that $\\hat{f}(\\bar{x}) = \\bar{y}$, which can be done without first solving for $a$ and $b$.)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Exercise 7.4 \n",
    "\n",
    "Prove that minimizing $\\| \\mathbf{X} \\mathbf{w} - \\mathbf y\\|_2 $ for $\\mathbf{w}$ is equivalent to finding a solution to the normal equations $\\mathbf{X}^T \\mathbf{X} \\mathbf{w} = \\mathbf{X}^T \\mathbf{y}$. \n",
    "\n",
    "What can we say about the set of solutions $\\{ \\mathbf{w} \\}$?\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Exercise 7.5\n",
    "\n",
    "Suppose that \n",
    "$$\n",
    "\\begin{split}\n",
    "    \\mathbf x &= [-2, 0, 1, 3] \\\\ \n",
    "    \\mathbf y &= [4, 1, 2, 0].\n",
    "\\end{split}\n",
    "$$\n",
    "\n",
    "Find the **(a)** MSE, **(b)** MAE, and **(c)** coefficient of determination on this set for the regression function $\\hat{f}(x)=1-x$. "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Exercise 7.6\n",
    "\n",
    "Suppose for $d=3$ features you have the $n=4$ sample vectors\n",
    "$$\n",
    "\\mathbf x_1 = [1,0,1], \\quad \\mathbf x_2 = [-1,2,2],\\quad \\mathbf x_3=[3,-1,0], \\quad \\mathbf x_4 = [0,2,-2], \n",
    "$$\n",
    "\n",
    "and a multilinear regression computes the weight vector $\\mathbf w = [2,1,-1]$. \n",
    "\n",
    "Find **(a)** the matrix-vector product $\\mathbf X\\mathbf w$, and **(b)** the predictions of the regressor on the sample vectors. "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Exercise 7.7\n",
    "\n",
    "Suppose that values $y_i$ for $i=1,\\ldots,n$ are to be fit to 2D sample vectors using a multilinear regression function $\\hat{f}(\\mathbf x)=w_1 x_1 + w_2 x_2$. Define the sum-of-squared-residuals loss function\n",
    "$$ \n",
    "L(w_1,w_2) = \\sum_{i=1}^n \\bigl(y_i - \\hat{f}(\\mathbf x_i)\\bigr)^2. \n",
    "$$\n",
    "\n",
    "Show that by holding $w_1$ constant and taking a derivative with respect to $w_2$, and then holding $w_2$ constant and taking a derivative with respect to $w_1$, at the minimum loss we must have \n",
    "$$\n",
    "\\begin{split}\n",
    "\\left(\\sum X_{i,1}^2 \\right) w_1 + \\left(\\sum X_{i,1} X_{i,2}  \\right) w_2 &= \\sum X_{i,1}\\, y_i, \\\\ \n",
    "\\left(\\sum X_{i,1} X_{i,2} \\right) w_1 + \\left(\\sum X_{i,2}^2 \\right) w_2 &= \\sum X_{i,2} \\, y_i, \n",
    "\\end{split}\n",
    "$$\n",
    "\n",
    "where $X_{i,1}$ and $X_{i,2}$ are the entries in the $i$-th row of the feature matrix $\\mathbf X$. (In each case above the sum is from $i=1$ to $i=n$.)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Exercise 7.8\n",
    "\n",
    "If we fit the model $\\hat{f}(x)=w x$ to the single data point $(2,6)$, then the ridge loss is \n",
    "$$\n",
    "L(w) = (2w-6)^2 + \\alpha w^2,\n",
    "$$\n",
    "\n",
    "where $\\alpha$ is a nonnegative constant. When $\\alpha = 0$, it's clear that $w=3$ is the minimizer of $L(w)$. \n",
    "\n",
    "Show that if $\\alpha>0$, then $L'(w)$ is zero at a value of $w$ in the interval $(0,3)$. (This shows that the optimum weight choice decreases in the presence of the regularization penalty.) "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Exercise 7.9\n",
    "\n",
    "If we fit the model $\\hat{f}(x)=w x$ to the single data point $(2,6)$, then the LASSO loss is \n",
    "$$\n",
    "L(w) = (2w-6)^2 + \\alpha |w|,\n",
    "$$\n",
    "\n",
    "where $\\alpha$ is a nonnegative constant. When $\\alpha = 0$, it's clear that $w=3$ is the global minimizer of $L(w)$. Below you will show that the minimizer is less than this if $\\alpha > 0$.\n",
    "\n",
    "**(a)** Show that if $w < 0$ and $\\alpha>0$, then $L'(w)$ can never be zero. \n",
    "\n",
    "**(b)** Show that if $w>0$ and $0<\\alpha < 24$, then $L'(w)$ has a single root in the interval $(0,3)$.\n",
    "\n",
    "<!-- \n",
    "::::{#exr-regression-regular-two-features}\n",
    "Repeat @exr-regression-two-features, but using the regularized residual \n",
    "$$ \n",
    "\\tilde{r} = C (\\alpha^2 + \\beta^2) + \\sum_{i=1}^n \\bigl(\\hat{f}(u_i,v_i)-y_i\\bigr)^2. \n",
    "$$\n",
    ":::: -->\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Exercise 7.10\n",
    "\n",
    "For each function on two-dimensional vectors, either prove that it is linear or produce a counterexample that shows it cannot be linear.\n",
    "\n",
    "**(a)** $\\hat{f}(\\mathbf x) = x_1 x_2$\n",
    "\n",
    "**(b)** $\\hat{f}(\\mathbf x) = x_2$\n",
    "\n",
    "**(c)** $\\hat{f}(\\mathbf x) = x_1 + x_2 + 1$\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "## Exercise 7.11\n",
    "\n",
    "Given the data set $(x_i,y_i)=\\{(0,-1),(1,1),(2,3),(3,0),(4,3)\\}$, find the MAE-based $Q$ score for the following hypothetical decision tree splits.\n",
    "\n",
    "**(a)** $x \\le 0.5, \\qquad$ **(b)** $x \\le 1.5, \\qquad$ **(c)** $x \\le 2.5,\\qquad$ **(d)** $x \\le 3.5$.\n"
   ]
  },
  {
   "attachments": {
    "image.png": {
     "image/png": "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b19T3hnSRq5V56G0xd/SgXeQmJgo//vf/+SDDz7QNwIkfcyBv/TSS+Wll16S8PBw85NlGxb9SD2VIZFHoyU0JFgqhYboxEOegfinqPhHR8dIaMVQCQ0OEt+C2tLIMnhIzeczZ8utt98u1w0fJrNmfC4+jL/HIP7JaackJjZOqoRVlqDA8oy/B2EF1KTkVImOjZXq1apKsIo/ukpKI8uzUnBwsDz//PN6Xvunn34qb775pqxbt06++OIL2yR4QK0GJbZAVaMPUP8ywXsW4o+4o1m4POLPG5xH4Ybmq2rwkpEm3kYWE4yHIf64/ivg+lc1TMbfsxBvNMk74l9aEzy4JTNhYB363a+++mq5/vrrpXHjxrpGT0RERJ7D6icREZFNMckTERHZFJM8ERGRTTHJExER2RSTPBERkU0xyRMREdkUkzwREZFNMckTERHZFJM8ERGRTTHJExER2RSTPBERkU0xyRMREdkUkzwREZFNMckTERHZFJM8ERGRTTHJExER2RSTPBERkU0xyRMREdkUkzwREZFNMckTERHZFJM8ERGRTTHJExER2RSTPBERkU0xyRMREdkUkzwREZFNMckTERHZFJM8ERGRTTHJExER2RSTPBERkU0xyRMREdkUkzwREZFNMckTERHZFJM8ERGRTTHJExER2RSTPBERkU0xyRMREdkUkzwREZFNMckTERHZFJM8ERGRTTHJExER2RSTPBERkU0xyRMREdkUkzwREZFNMckTERHZFJM8ERGRTTHJExER2RSTPBERkU0xyRMREdkUkzwREZFNMckTERHZFJM8ERGRTTHJExER2RSTPBERkU0xyRMREdkUkzwREZFNlTMU8zUVUmZmpkRHR0twcLCEhISYR4vvxIkTMmPGDImLi9P7F1xwgQwYMEC/prMQ/9jYWB37ChUqmEcL55dffpFVq1aZe3mrXbu23HHHHeYewcyZM2XMmDEycuRImT17tnm06HArwrW/Y8cO+euvv2TQoEHStGlT813KLT09XeLj46Vy5cri7+9vHi06xB/ft337dtm0aZNce+21Ur16dfNdyi0tLU3fo6tWrZpv/E+fPi0JCQmydetW2bhxo4waNUrCwsLMdz0ASZ6KJiMjw4iIiDDUjck8UnzqgjDef/99IzAw0PDy8tLb+PHjzXcpJ8Q/MjLSSEpKMo8U3vDhw7PjnN+m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"
    }
   },
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "## Exercise 7.12\n",
    "\n",
    "Here are values (labels) on an integer lattice.\n",
    "\n",
    "![image.png](attachment:image.png)\n",
    "\n",
    "<!--\n",
    "![](_media/griddata.png){width=\"360\" .lightbox}\n",
    "-->\n",
    "\n",
    "Let $\\hat{f}(x_1,x_2)$ be the kNN regressor using $k=4$, Euclidean metric, and mean averaging. In each case below, a function $g(t)$ is defined from values of $\\hat{f}$ along a vertical or horizontal line. Carefully sketch a plot of $g(t)$ for $-2\\le t \\le 2$.\n",
    "\n",
    "**(a)** $g(t) = \\hat{f}(1.2,t)$ \n",
    "\n",
    "**(b)** $g(t) = \\hat{f}(t,-0.75)$\n",
    "\n",
    "**(c)** $g(t) = \\hat{f}(t,1.6)$ \n",
    "\n",
    "**(d)** $g(t) = \\hat{f}(-0.25,t)$\n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Exercise 7.13\n",
    "\n",
    "Here are some label values and probabilistic predictions by a logistic regressor:\n",
    "\n",
    "$$\n",
    "\\begin{split}\n",
    "    \\mathbf y  &= [0,0,1,1], \\\\ \n",
    "    \\hat{\\mathbf{p}} &= [\\tfrac{3}{4},0,1,\\tfrac{1}{2}]. \n",
    "\\end{split}\n",
    "$$\n",
    "\n",
    "Using base-2 logarithms, calculate the cross-entropy loss for these predictions."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Exercise 7.14\n",
    "\n",
    "Let $\\mathbf X=[[-1],[0],[1]]$ and $\\mathbf y=[0,1,0]$. This small dataset is to be fit to a probabilistic predictor $\\hat{p}(x) = \\sigma(w x)$ for scalar weight $w$. \n",
    "\n",
    "**(a)** Let $L(w)$ be the cross-entropy loss function using natural logarithms. Show that\n",
    "$$\n",
    "L'(w) = \\frac{e^w-1}{e^w+1}. \n",
    "$$\n",
    "\n",
    "**(b)** Explain why part (a) implies that $w=0$ is the global minimizer of the loss $L$.\n",
    "\n",
    "**(c)** Using the result of part (b), simplify the optimum predictor function $\\hat{p}(x)$.\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Exercise 7.15\n",
    "\n",
    "Let $\\mathbf X=[[-1],[1]]$ and $\\mathbf y=[0,1]$. This small dataset is fit to a probabilistic predictor $\\hat{p}(x) = \\sigma(w x)$ for scalar weight $w$. Without regularization, the best fit takes $w\\to\\infty$, which makes the predictor become infinitely steep at $x=0$. To combat this behavior, let $L$ be the cross-entropy loss function with LASSO penalty, i.e.,\n",
    "\n",
    "$$\n",
    "L(w) = -\\ln[1-\\hat{p}(-1)] - \\ln[\\hat{p}(1)] + \\alpha |w|, \n",
    "$$\n",
    "\n",
    "for a positive regularization constant $\\alpha$.\n",
    "\n",
    "**(a)** Show that $L'$ is never zero for $w < 0$.\n",
    "\n",
    "**(b)** Show that if $0 <\\alpha <2$, then $L'$ has a zero at \n",
    "\n",
    "$$\n",
    "w = \\ln\\left( \\frac{2}{\\alpha}-1 \\right). \n",
    "$$\n",
    "\n",
    "**(c)** Show that $w$ from part (b) is a decreasing function of $\\alpha$. (Therefore, increasing $\\alpha$ makes the predictor less steep as a function of $x$.)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Exercise 7.16\n",
    "\n",
    "As for classification, one can ask the question about what would be the Bayes hypothesis for a given dataset $(x_1,y_1),\\ldots,(x_n,y_n)$, defined by a function $y = h(x)$ that minimizes some loss over the whole dataset. If the dataset satisfies a functional relationship, that is $x_i = x_j \\Rightarrow y_i = y_j$, then the Bayes hypothesis $h$ is simply defined by $h(x_i) := y_i$. This then means that if there are no two features $x_i,x_j$ which are identical, then the Bayes hypothesis achieves zero loss.\n",
    "\n",
    "Use the below code to load the `star_classification` dataset and think of an **efficient** way to check whether there are two features $x_i,x_j$ which are identical ($i\\neq j$). \n",
    "\n",
    "(Hint: It can be done on $O(n\\log n)$ operations using sorting.)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "\n",
    "astro = pd.read_csv(\"_datasets/star_classification.csv\")\n",
    "astro.replace(-9999, np.nan, inplace=True)\n",
    "astro.dropna(inplace=True)\n",
    "astro.head()\n",
    "\n",
    "X = astro[[\"u\", \"g\", \"r\", \"i\", \"z\", \"redshift\"]].values\n",
    "y = astro[\"class\"].values"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.13.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
