Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rpicard92/de067bb96629a75122dc9d12c2ad03af to your computer and use it in GitHub Desktop.
Save rpicard92/de067bb96629a75122dc9d12c2ad03af to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# HW1 - Part 1\n",
"## CS-5891-01 Special Topics Deep Learning\n",
"## Ronald Picard\n",
"\n",
"In this noteboook we will walk through how to perform linear regression using gradient decent. The goal for this example is to predict what the profit for a new food truck might be given the population of the city. The input data to our model will be the population of a city, and the output data of our model will be the predicted profit. Since this is a 2-D linear regression model, the classic equation of the a line (y = m * x + b) will be our model. \n",
"\n",
"To start we need import some needed classes."
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [],
"source": [
"import os\n",
"import numpy as np\n",
"import struct\n",
"from matplotlib import pyplot\n",
"import csv\n",
"import time"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"First, we must change our path string to the path of our data file containing the features. (Please note that you must change this string to point to the food_truck_data.txt data file on your machine.) The data file is a csv-style matrix made up of 2 feature vectors (columns). Each entry in the first feature vector is the population of the particular city, whereas each entry in the second feature vector is the profit a food truck has recieved in the particular city. Each feature vector is of the same size, and there is a one-to-one correspondence between each indexed vector entry of the first and second feature vectors in the feature matrix."
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [],
"source": [
"## path\n",
"path = 'C:/Users/computer/Desktop/git/deep-learning-jupyter-notebooks/1-linear-regression-using-gradient-descent/food_truck_data.txt'"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Next, we retrieve the data from the data file as follows. This imports the feature data into a feature matrix from which we can extract each feature vector."
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [],
"source": [
"## retreive data \n",
"data = np.genfromtxt(path, delimiter=',', dtype=np.float32)\n",
"population_vector = data[:,0]\n",
"profit_vector = data[:,1]\n",
"# print(population)\n",
"# print(profit)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Next, we will normalize each of our feature vectors to (approximately) between -1 <= x <= 1. This will reduce the bias towards the larger feature and provide a more balanced model. We do this by using the using the formula: x(i) = (x(i) - Mean(x))/Std(x). The technique is known as feature scaling. (Please note that this means if we utilize our model later on, the input data must be normalized to produce an accurate prediction.)"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [],
"source": [
"## rectrieve size\n",
"m = np.size(profit_vector)\n",
"\n",
"## find the mean\n",
"population_mean = np.mean(population_vector)\n",
"profit_mean = np.mean(profit_vector)\n",
"#print('pop mean: ' + str(population_mean) + ', prof mean: ' + str(profit_mean))\n",
"\n",
"## find the std\n",
"population_std = np.std(population_vector)\n",
"profit_std = np.std(profit_vector)\n",
"#print('pop std: ' + str(population_std) + ', prof std:' + str(profit_std))\n",
"\n",
"## normalize the data to between -1 <= x_j <= 1 using equation x_j^i = (x_j^i - u_j)/s_j \n",
"population_mean_vector = np.multiply(population_mean, np.ones(np.size(m)))\n",
"#print(population_mean_vector)\n",
"normalized_population_vector = np.dot(1/population_std, population_vector - population_mean_vector)\n",
"#print(normalized_population_vector)\n",
"profit_mean_vector = np.multiply(profit_mean, np.ones(np.size(m)))\n",
"#print(profit_mean_vector)\n",
"normalized_profit_vector = np.dot(1/profit_std, profit_vector - profit_mean_vector)\n",
"#print(normalized_profit_vector)\n",
"\n",
"## create feature matrix\n",
"x = np.column_stack((np.ones(m), normalized_population_vector))\n",
"#print(x[:,0])\n",
"#print(x[:,1])\n",
"## re-assignment\n",
"\n",
"# re-assignment\n",
"y = normalized_profit_vector\n",
"#print(y)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now we create our 2 X 1 parameter vector with values initialized to 1. The reason that our parameter vector contains only two values is because we are trying to perform a 2-D linear regression. This means we need to find the slope and intercept values for the classic equation of a line h(x) = theta0 + theta1*x (this is analagous to our y = m * x + b equation). (Please note that the initial value of 1 was chosen pesudo-arbitrarly. We could have just as easily chosen 0.5 and recieved (nearly) the same result for a linear regression model.)"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [],
"source": [
"## create parameter vector\n",
"theta = np.array([1, 1])\n",
"#print(theta)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now that our model is set up and preprocessing is complete we need contruct our gradient descent algrorithm. This algorithm makes use of NumPy to perform linear alebra operations in a vectorized manner. The goal of our gradient decent algorithm is to minimize our cost function; which in this case is the least means squared. Calculating cost function gradient, multiplying it by the learning rate (step size), and subtracting this from the parameter vector iteratively will eventually lead us to the minima of our cost function and thus our ideal model parameters. \n",
"\n",
"There are three primary interative steps to our gradient decsent algorithm: \n",
"\n",
"1) Calculate the value of the cost function: j = (1/(2m)) * (X * Theta - Y)' * (X * Theta - Y).\n",
"\n",
"2) Calculate the value of the gradient of the cost function: dj_dTheta = (1/m) * (X' * X * Theta - X' * Y)\n",
"\n",
"3) Update the theta vector: Theta = Theta - alpha * dj_dTheta\n",
"\n",
"In the above steps: m = size of our feature vectors, Theta = parameter vector, Y = output profit feature vector, X = input feature matrix, j = cost function value, dj_dTheata = gradient vector with respect to the Theta vector, alpha = learning rate hyper-paramerter\n",
"\n",
"These steps repeat for the specified number of iterations. The final result of the Theta vector provides the values of theta0 (intercept) and theta1 (slope) corresponding to our line equation.\n",
"\n",
"While our algorithm is running we will collect the cost function values and the corresponding interation # in two arrays that will allow us to plot the cost function value as a function of the number iterations; which will allow us see a plot of the learning curve for our gradient descent algorithm. "
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"elapsed time: 0.0019948482513427734 ms\n",
"final cost function value: 0.49029398087552617\n",
"interations: 100\n",
"Normalized Parameters: theta0: 2.6499769928728125e-05, theta1: -0.13929690232082123\n"
]
}
],
"source": [
"# retrieve start time\n",
"start = time.time()\n",
"\n",
"## begin gradiant descent\n",
"alpha = 0.1\n",
"interations = 100\n",
"j_array = []\n",
"i_array = []\n",
"for i in range(interations):\n",
"\n",
" # calculate cost value\n",
" hx = np.dot(x, theta) # M X 2 times 2 X 1 = M X 1 \n",
" hx_minus_y = hx - y # M X 1 minus M X 1 = M X 1\n",
" hx_minus_y_transpose = np.transpose(hx_minus_y) # (M X 1)^T = 1 X M\n",
" j = np.dot(1/(2*m), np.dot(hx_minus_y_transpose, hx_minus_y)) # scalar * 1 X M times M X 1 = scalar\n",
" j_array.append(j)\n",
" i_array.append(i)\n",
"\n",
" # calculate gradient vector\n",
" x_transpose_x = np.dot(np.transpose(x), x) # 2 X M times M X 2 = 2 X 2\n",
" x_transpose_x_theta = np.dot(x_transpose_x, theta) # scalar * 2 X 1 = 2 X 1 \n",
" x_transpose_y = np.dot(np.transpose(x), y) # 2 X M times M X 1 = 2 X 1\n",
" dj_dtheta = np.dot(1/m, x_transpose_x_theta - x_transpose_y) # 2 X 1 minus 2 X 1 = 2 X 1\n",
"\n",
" # update theta vector\n",
" theta = theta - np.dot(alpha, dj_dtheta) # 2 X 1 - scalar * 2 X 1 = 2 X 1\n",
"\n",
"# retrieve end time\n",
"end = time.time()\n",
"\n",
"# logger data\n",
"print('elapsed time: ' + str(end-start) + ' ms')\n",
"print('final cost function value: ' + str(j))\n",
"print('interations: ' + str(interations))\n",
"print('Normalized Parameters: theta0: ' + str(theta[0]) + ', theta1: ' + str(theta[1]))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"As printed above, the parameters after 100 iterations came out to (approximatly) the following as shown above:\n",
"\n",
"1) theta0 = 2.6461507394829433e-05\n",
"\n",
"2) theta1 = 0.8378775736547807\n",
"\n",
"Therefore, our normalized 2-D line equation becomes: \n",
"\n",
"Price = 2.6461507394829433e-05 + 0.8378775736547807 * Population \n",
"\n",
"Finally we will plot the results. \n",
"\n",
"1) The first plot is the normalized line solution of the gradient decent algorithm. \n",
"\n",
"2) The second plot is denormalized line solution of the gradient decent algorithm. \n",
"\n",
"3) The third plot is the learning curve that relates the cost function value to the number of iterations of the algorithm. As seen by this plot, the cost function converges rapidly in about 20 iterations at a 0.1 leraning rate. "
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# plot the results\n",
"\n",
"pyplot.figure()\n",
"pyplot.scatter(normalized_population_vector, normalized_profit_vector) \n",
"normalized_xmin = -2\n",
"normalized_xmax = 2\n",
"normalized_h_x_min = theta[0] + np.multiply(theta[1], normalized_xmin)\n",
"normalized_h_x_max = theta[0] + np.multiply(theta[1], normalized_xmax)\n",
"pyplot.plot([normalized_xmin, normalized_xmax], [normalized_h_x_min, normalized_h_x_max], 'red')\n",
"pyplot.title('Normalized 2-D Linear Regression')\n",
"pyplot.xlabel('Population')\n",
"pyplot.ylabel('Profit')\n",
"pyplot.show()\n",
"\n",
"pyplot.figure()\n",
"pyplot.scatter(population_vector, profit_vector) \n",
"xmin = np.dot(normalized_xmin, population_std) + population_mean\n",
"xmax = np.dot(normalized_xmax, population_std) + population_mean\n",
"h_x_min = np.dot(normalized_h_x_min, profit_std) + profit_mean\n",
"h_x_max = np.dot(normalized_h_x_max, profit_std) + profit_mean\n",
"pyplot.plot([xmin, xmax], [h_x_min, h_x_max], 'red')\n",
"pyplot.title('Denormalized 2-D Linear Regression')\n",
"pyplot.xlabel('Population')\n",
"pyplot.ylabel('Profit')\n",
"pyplot.show()\n",
"\n",
"# plot learning curve\n",
"pyplot.figure()\n",
"pyplot.plot(i_array, j_array, 'red')\n",
"pyplot.title('Learning Curve')\n",
"pyplot.xlabel('Iterations')\n",
"pyplot.ylabel('Cost')\n",
"pyplot.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This concludes part 1."
]
}
],
"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.7.1"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment