Skip to content

Instantly share code, notes, and snippets.

@tuf22191
Created May 4, 2018 03:55
Show Gist options
  • Save tuf22191/33cc8378750281db1e2fdc1e1cb86915 to your computer and use it in GitHub Desktop.
Save tuf22191/33cc8378750281db1e2fdc1e1cb86915 to your computer and use it in GitHub Desktop.
Linear Regression: Looking at World's Billionaire Population as a function of time
{
"cells": [
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"#from Collections import Counter \n",
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We need to get some data first, let's do an example of number of billionaires a function of time: \n",
"\n",
"data was taken from : https://www.forbes.com/special-report/2012/billionaires-25th-anniversary-timeline.html \n",
"\n",
"in our model we are assuming that the number of billionaires is completely determined with time , in future tutorials we might add additional features to our algorithms (like global market indicators) \n"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"26\n",
"26\n"
]
}
],
"source": [
"time = np.arange(1987, 2013)\n",
"num_billionaires = np.array([140,191,198,269,273,288,310,349,365,447,486,454,\n",
" 465,470,538,497,476,587,691,793,946,1125,793,1011,1210,\n",
" 1226])\n",
"print(len(time))\n",
"print(len(num_billionaires))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's plot the data to see what it looks like (should be an increasing trend):"
]
},
{
"cell_type": "code",
"execution_count": 48,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\nrkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0xaea3358>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"dataframe = pd.DataFrame({'year':time, 'amt':num_billionaires})\n",
"plt.plot(dataframe['year'], dataframe['amt'])\n",
"plt.title('Amt of Billionaires as a Function of Year')\n",
"plt.show() #page 25\n",
"#talk about income disparity"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Great! Let's try to fit a linear regression model. Let's code one up first. Recall that the formula for Linear Regression (also called L2 norm minimization or Least Squares Regression): \n",
"\n",
"$$\n",
" \\hat{w} = (X^T X)^{-1}X^T \\hat{t}\\\n",
"$$\n",
"\n",
"Where X is an augmented data matrix (we will construct this by ourselves). The $\\hat{t}$ is the vector of the output variables (vector because we stack all the output results of each of training data points). For us the output variable is the number of billlionaires (which is a function/output of time <- which is the input)\n",
"\n",
"So lets assume for our billionaires data, we will have a straight line so we will assume that the formula for amount of billionaires with respect to time is: \n",
"\n",
"$$ \n",
" f(\\hat{w}) = w_0 + w_1t\\ \\tag 1\\\\\n",
"$$\n",
"\n",
" where $\\hat{w}$ is a vector comprised of $[ w_0 , w_1 ]$ . We will now populate the $X$ matrix and the $X^T$ matrix, and the $\\hat{t}$ vector from our training data (the time and num_billionaires). "
]
},
{
"cell_type": "code",
"execution_count": 49,
"metadata": {},
"outputs": [],
"source": [
"X_mat = np.ones(len(time))\n",
"X_mat = np.vstack([X_mat, time]).T\n",
"#print(X_mat) #looks exactly the way we need it for our algorithm \n",
"X_mat_transpose = np.array(X_mat.T)\n",
"#print(X_mat_transpose)"
]
},
{
"cell_type": "code",
"execution_count": 50,
"metadata": {},
"outputs": [],
"source": [
"output_t_vector = np.array(num_billionaires) #using np.array creates a copy of the vector\n",
"output_t_vector = output_t_vector.reshape((len(output_t_vector), 1)) #must reshape for easier data manipulation\n",
"#print(output_t_vector) # this the t vector from equation 1 , we now have everything for linear regression"
]
},
{
"cell_type": "code",
"execution_count": 51,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(26L, 2L)\n",
"(2L, 26L)\n",
"(26L, 1L)\n"
]
}
],
"source": [
"#double check the shapes \n",
"print(X_mat.shape)\n",
"print(X_mat_transpose.shape)\n",
"print(output_t_vector.shape)"
]
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[ -7.77259703e+04 3.91535043e+01]\n"
]
}
],
"source": [
"#and now for the algorithm\n",
"def train_least_squares(x_mat, x_mat_transposed, t_vect):\n",
" #just follow equation 1 above 1 step at a time\n",
" #multiply x_mat by its transpose\n",
" w_vector = np.matmul(x_mat_transposed,x_mat) #https://docs.scipy.org/doc/numpy-1.14.0/reference/generated/numpy.matmul.html\n",
" #take inverse\n",
" w_vector = np.linalg.inv(w_vector)\n",
" #multiply by x_mat's transpose\n",
" w_vector = np.matmul(w_vector, x_mat_transposed)\n",
" #multiply by T vector \n",
" w_vector = np.matmul(w_vector, t_vect)\n",
" w_vector = w_vector.flatten() # converts the shape of w_vector from matrix 1-d array just a nuance to make things easier to read off for us\n",
" return w_vector # return the coefficients w_0 and w_1'\n",
"\n",
"w_vect_trained = train_least_squares(X_mat, X_mat_transpose, output_t_vector)\n",
"print(w_vect_trained)\n"
]
},
{
"cell_type": "code",
"execution_count": 53,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0xb50c8d0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# so let's plot the line along with the scatter plot \n",
"plt.scatter(dataframe['year'], dataframe['amt'])\n",
"\n",
"line_points = [(w_vect_trained[0]+w_vect_trained[1]*year) for year in dataframe['year']]\n",
"\n",
"plt.plot(dataframe['year'], line_points)\n",
"plt.show() #p25"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Beautiful, the line seems to fit our model pretty accurately! However, there looks like we could add a sinusoidal to the data. In a future tutorial, we will perhaps look at ways to do a little bit more complex regression fitting but using this same framework. Furthermore, we can test our error because the data goes up to 2012 and so we can add 6 more years to see how good our predictions might be! We can then talk about overfitting/regularization/etc! \n",
"\n",
"But for now friends, take care!"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.14"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment