hw9 2021/7/28 hw9 https://data100.datahub.berkeley.edu/user/luzgool/nbconvert/html/su21/hw/hw9/hw9.ipynb?download=false 1/21 In [1]: # Initialize Otter import otter grader =...

1 answer below »
HiThis is a new assignment. I already finished all the part on Q3a and Q3b, but just one minor error need to be fixed. And I also need full help on Q3c. Could you make it cheaper since I only need full help on one question.Thanks!


hw9 2021/7/28 hw9 https://data100.datahub.berkeley.edu/user/luzgool/nbconvert/html/su21/hw/hw9/hw9.ipynb?download=false 1/21 In [1]: # Initialize Otter import otter grader = otter.Notebook("hw9.ipynb") In [2]: # Imports import pandas as pd import numpy as np import matplotlib.pyplot as plt import csv import re import seaborn as sns import sklearn 2021/7/28 hw9 https://data100.datahub.berkeley.edu/user/luzgool/nbconvert/html/su21/hw/hw9/hw9.ipynb?download=false 2/21 import sklearn.datasets import sklearn.linear_model np.random.seed(42) plt.style.use('fivethirtyeight') sns.set() sns.set_context("talk") # Set some parameters plt.rcParams['figure.figsize'] = (12, 9) plt.rcParams['font.size'] = 16 np.set_printoptions(4) # We will use plot_3d helper function to help us visualize gradients from hw9_utils import plot_3d %matplotlib inline In [3]: # Run this cell to load our sample data part_1_data = pd.read_csv("https://github.com/DS-100/su20/raw/gh-pages/resources part_1_data.head() Out[3]: In [4]: def scatter(x, y): """ Generate a scatter plot using x and y Keyword arguments: x -- the vector of values x y -- the vector of values y """ plt.figure(figsize=(8, 6)) plt.scatter(x, y, marker='.') plt.xlabel('x') plt.ylabel('y') 2021/7/28 hw9 https://data100.datahub.berkeley.edu/user/luzgool/nbconvert/html/su21/hw/hw9/hw9.ipynb?download=false 3/21 linear_model x = part_1_data['x'] y = part_1_data['y'] scatter(x,y) ∗ ∗ ∗ ∗ In [5]: def linear_model(x, theta): """ Returns the estimate of y given x and theta Keyword arguments: x -- the vector of values x theta -- the scalar theta """ return theta * x 2021/7/28 hw9 https://data100.datahub.berkeley.edu/user/luzgool/nbconvert/html/su21/hw/hw9/hw9.ipynb?download=false 4/21 In [6]: def average_squared_loss(y, y_hat): """ Returns the averge squared loss for observations y and predictions y_hat. Keyword arguments: y -- the vector of true values y y_hat -- the vector of predicted values y_hat """ return np.mean((y - y_hat) ** 2) In [7]: def visualize(x, y, thetas): """ Plots the average l2 loss for given x, y as a function of theta. Use the functions you wrote for linear_model and l2_loss. Keyword arguments: x -- the vector of values x y -- the vector of values y thetas -- an array containing different estimates of the scalar theta """ avg_loss = np.array([average_squared_loss(linear_model(x, theta), y) for the plt.figure(figsize=(8,6)) plt.plot(thetas, avg_loss) plt.xlabel("Theta") plt.ylabel("Average Loss") thetas = np.linspace(-1, 5, 70) visualize(x, y, thetas) 2021/7/28 hw9 https://data100.datahub.berkeley.edu/user/luzgool/nbconvert/html/su21/hw/hw9/hw9.ipynb?download=false 5/21 find_theta In [8]: def find_theta(x, y): """ Find optimal theta given x and y Keyword arguments: x -- the vector of values x y -- the vector of values y """ sums = np.sum(x*y) 2021/7/28 hw9 https://data100.datahub.berkeley.edu/user/luzgool/nbconvert/html/su21/hw/hw9/hw9.ipynb?download=false 6/21 theta_hat = 1.550264808596222 q1 visualize squared = np.sum(x**2) return sums / squared theta_hat_simple = find_theta(x, y) print(f'theta_hat = {theta_hat_simple}') In [9]: grader.check("q1") Out[9]: In [10]: theta_opt = find_theta(x, y) visualize(x, y, thetas) plt.axvline(x=theta_opt, color='r'); In [11]: theta_opt_2 = find_theta(x, y) scatter(x, y) line_values = linear_model(x, theta_opt_2) plt.plot(x, line_values, color='r'); 2021/7/28 hw9 https://data100.datahub.berkeley.edu/user/luzgool/nbconvert/html/su21/hw/hw9/hw9.ipynb?download=false 7/21 In [12]: def visualize_residual(x, y): """ Plot a scatter plot of the residuals, the remaining values after removing the linear model from our data. Keyword arguments: x -- the vector of values x y -- the vector of values y """ ... theta_hat = find_theta(x, y) y_sin = y - linear_model(x, theta_hat) plt.scatter(x, y_sin) plt.xlabel('x') plt.ylabel('residual (true y - estimated y)') plt.title('Residual vs x for Linear Model') plt.axhline(y=0, color='r') visualize_residual(x, y) 2021/7/28 hw9 https://data100.datahub.berkeley.edu/user/luzgool/nbconvert/html/su21/hw/hw9/hw9.ipynb?download=false 8/21 sin_model In [17]: def sin_model(x, theta): """ Predict the estimate of y given x, theta_1, theta_2 Keyword arguments: x -- the vector of values x theta -- a vector of length 2, where theta[0] = theta_1 and theta[1] = theta """ theta_1 = theta[0] theta_2 = theta[1] return theta_1 * x + np.sin(theta_2 * x) 2021/7/28 hw9 https://data100.datahub.berkeley.edu/user/luzgool/nbconvert/html/su21/hw/hw9/hw9.ipynb?download=false 9/21 sin_MSE sin_MSE_dt1 sin_MSE_dt2 theta sin_MSE_gradient dt1 dt2 dt part_1_data np.mean np.sum sin_model In [32]: def sin_MSE(theta, x, y): """ Compute the numerical value of the l2 loss of our sinusoidal model given the Keyword arguments: theta -- the vector of values theta x -- the vector of x values y -- the vector of y values """ x = part_1_data['x'] y = part_1_data['y'] return np.mean((y - (sin_model(x, theta)))**2) def sin_MSE_dt1(theta, x, y): """ Compute the numerical value of the partial of l2 loss with respect to theta_ Keyword arguments: theta -- the vector of values theta x -- the vector of x values y -- the vector of y values """ x = part_1_data['x'] y = part_1_data['y'] return -2 * np.mean((y - (sin_model(x, theta))) * x) def sin_MSE_dt2(theta, x, y): """ 2021/7/28 hw9 https://data100.datahub.berkeley.edu/user/luzgool/nbconvert/html/su21/hw/hw9/hw9.ipynb?download=false 10/21 q2 gradient_descent(df, initial_guess, alpha, n) df initial_guess Compute the numerical value of the partial of l2 loss with respect to theta_ Keyword arguments: theta -- the vector of values theta x -- the vector of x values y -- the vector of y values """ x = part_1_data['x'] y = part_1_data['y'] return -2 * np.mean((y - (sin_model(x, theta))) * (x * np.cos(theta[1] * x)) # This function calls dt1 and dt2 and returns the gradient dt. It is already imp def sin_MSE_gradient(theta, x, y): """ Returns the gradient of l2 loss with respect to vector theta Keyword arguments: theta -- the vector of values theta x -- the vector of x values y -- the vector of y values """ return np.array([sin_MSE_dt1(theta, x, y), sin_MSE_dt2(theta, x, y)]) In [33]: grader.check("q2") Out[33]: 2021/7/28 hw9 https://data100.datahub.berkeley.edu/user/luzgool/nbconvert/html/su21/hw/hw9/hw9.ipynb?download=false 11/21 grad_desc theta data alpha alpha theta theta theta_history theta loss_history theta num_iter sin_MSE sin_MSE_gradient In [29]: def init_theta(): """Creates an initial theta [0, 0] of shape (2,) as a starting point for gra return np.zeros((2,)) def grad_desc(loss_f, gradient_loss_f, theta, data, num_iter=20, alpha=0.1): """ Run gradient descent update for a finite number of iterations and static lea Keyword arguments: loss_f -- the loss function to be minimized (used for computing loss_history gradient_loss_f -- the gradient of the loss function to be minimized theta -- the vector of values theta to use at first iteration data -- the data used in the model num_iter -- the max number of iterations 2021/7/28 hw9 https://data100.datahub.berkeley.edu/user/luzgool/nbconvert/html/su21/hw/hw9/hw9.ipynb?download=false 12/21 --------------------------------------------------------------------------- TypeError Traceback (most recent call last) /tmp/ipykernel_42/1607380412.py in 33 34 theta_start = init_theta() ---> 35 theta_hat, thetas_used, losses_calculated = grad_desc(sin_MSE, sin_MSE_g radient, theta_start, part_1_data, num_iter=20, alpha=0.1) 36 for b, l in zip(thetas_used, losses_calculated): 37 print(f"theta: {b}, Loss: {l}") /tmp/ipykernel_42/1607380412.py in grad_desc(loss_f, gradient_loss_f, theta, dat a, num_iter, alpha) 24 for i in range(num_iter): 25 theta_history.append(theta) ---> 26 loss = loss_f(theta)
Answered Same DayJul 28, 2021

Answer To: hw9 2021/7/28 hw9...

Pritam Kumar answered on Jul 28 2021
145 Votes
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"# Imports\n",
"import pandas as pd\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import csv\n",
"import re\n",
"import seaborn as sns\n",
"import sklearn\n",
"import sklearn.datasets\n",
"import sklearn.linear_model\n",
"\n",
"np.random.seed(42)\n",
"plt.style.use('fivethirtyeight')\n",
"sns.set()\n",
"sns.set_context(\"talk\")\n",
"\n",
"# Set some parameters\n",
"plt.rcParams['figure.figsize'] = (12, 9)\n",
"plt.rcParams['font.size'] = 16\n",
"np.set_printoptions(4)\n",
"\n",
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"
xy
0-5.000000-7.672309
1-4.966555-7.779735
2-4.933110-7.995938
3-4.899666-8.197059
4-4.866221-8.183883
\n",
"
"
],
"text/plain": [
" x y\n",
"0 -5.000000 -7.672309\n",
"1 -4.966555 -7.779735\n",
"2 -4.933110 -7.995938\n",
"3 -4.899666 -8.197059\n",
"4 -4.866221 -8.183883"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Run this cell to load our sample data\n",
"part_1_data = pd.read_csv(\"https://github.com/DS-100/su20/raw/gh-pages/resources/assets/datasets/hw7_data.csv\", index_col=0)\n",
"part_1_data.head()"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"
"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"def scatter(x, y):\n",
" \"\"\"\n",
" Generate a scatter plot using x and y\n",
"\n",
" Keyword arguments:\n",
" x -- the vector of values x\n",
" y -- the vector of values y\n",
" \"\"\"\n",
" plt.figure(figsize=(8, 6))\n",
" plt.scatter(x, y, marker='.')\n",
" plt.xlabel('x')\n",
" plt.ylabel('y')\n",
" \n",
"x = part_1_data['x']\n",
"y = part_1_data['y']\n",
"scatter(x,y)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"def linear_model(x, theta):\n",
" \"\"\"\n",
" Returns the estimate of y given x and theta\n",
"\n",
" Keyword arguments:\n",
" x -- the vector of values x\n",
" theta -- the scalar theta\n",
" \"\"\"\n",
" return theta * x"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"def average_squared_loss(y, y_hat):\n",
" \"\"\"\n",
" Returns the averge squared loss for observations y and predictions y_hat.\n",
"\n",
" Keyword arguments:\n",
" y -- the vector of true values y\n",
" y_hat -- the vector of predicted values y_hat\n",
" \"\"\"\n",
" return np.mean((y - y_hat) ** 2)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"
"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"def visualize(x, y, thetas):\n",
" \"\"\"\n",
" Plots the average l2 loss for given x, y as a function of theta.\n",
" Use the functions you wrote for linear_model and l2_loss.\n",
"\n",
" Keyword arguments:\n",
" x -- the vector of values x\n",
" y -- the vector of values y\n",
" thetas -- an array containing different estimates of the scalar theta\n",
" \"\"\" \n",
" avg_loss = np.array([average_squared_loss(linear_model(x, theta), y) for theta in thetas])\n",
" plt.figure(figsize=(8,6))\n",
" plt.plot(thetas, avg_loss)\n",
" plt.xlabel(\"Theta\")\n",
" plt.ylabel(\"Average Loss\")\n",
" \n",
"thetas = np.linspace(-1, 5, 70)\n",
"visualize(x, y, thetas)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"theta_hat = 1.5502648085962225\n"
]
}
],
"source": [
"def find_theta(x, y):\n",
" \"\"\"\n",
" Find optimal theta given x and y\n",
"\n",
" Keyword arguments:\n",
" x -- the vector of values x\n",
" y -- the vector of values y\n",
" \"\"\"\n",
" sums = np.sum(x*y)\n",
" squared = np.sum(x**2)\n",
" return sums / squared\n",
"\n",
"theta_hat_simple = find_theta(x, y)\n",
"print(f'theta_hat = {theta_hat_simple}')"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png":...
SOLUTION.PDF

Answer To This Question Is Available To Download

Related Questions & Answers

More Questions »

Submit New Assignment

Copy and Paste Your Assignment Here