Created
October 15, 2018 22:49
-
-
Save lgvaz/d89d10900cb1861846eb12d2b22b0cfa to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "cells": [ | |
| { | |
| "cell_type": "code", | |
| "execution_count": 1, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "%matplotlib inline\n", | |
| "import numpy as np\n", | |
| "import matplotlib.pyplot as plt" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## Load data" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 2, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "data = np.loadtxt('input.dat', dtype=np.int)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 3, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "t, x, y, z = data.T" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 4, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "class LinearReg:\n", | |
| " '''\n", | |
| " Performs linear regression using gradient descent\n", | |
| " y = a * x + b\n", | |
| " \n", | |
| " Args:\n", | |
| " learning_rate: Step to take when performing gradient descent\n", | |
| " a: Function parameter\n", | |
| " b: Funcion constant\n", | |
| " '''\n", | |
| " def __init__(self, learning_rate, initial_a=0, initial_b=0):\n", | |
| " self.learning_rate = learning_rate\n", | |
| " self.a = initial_a\n", | |
| " self.b = initial_b \n", | |
| " \n", | |
| " def predict(self, x):\n", | |
| " return self.a * x + self.b\n", | |
| " \n", | |
| " def fit(self, x, y, num_iters, log_freq=10, render=False):\n", | |
| " '''\n", | |
| " Fits data points to a line\n", | |
| " \n", | |
| " Args:\n", | |
| " x: x values to fit\n", | |
| " y: y values to fit\n", | |
| " num_iters: Number of iterations to fit\n", | |
| " log_freq: num_iterations between each log\n", | |
| " render: Whether of not to render\n", | |
| " '''\n", | |
| " if render:\n", | |
| " plt.scatter(x, y)\n", | |
| " plt.xlabel('X data')\n", | |
| " plt.ylabel('Y data')\n", | |
| " for i_step in range(num_iters):\n", | |
| " # Calculate predictions\n", | |
| " pred = self.predict(x)\n", | |
| " loss = 0.5 * np.mean(np.square(y - pred))\n", | |
| " # Calculate gradients\n", | |
| " a_grad = np.mean((-x) * (y - pred))\n", | |
| " b_grad = np.mean(-(y - pred))\n", | |
| " # Adjust a, b\n", | |
| " self.a = self.a - self.learning_rate * a_grad\n", | |
| " self.b = self.b - self.learning_rate * b_grad\n", | |
| " # Display information\n", | |
| " if i_step % log_freq == 0:\n", | |
| " print('[Loss: {}][a: {}][b: {}]'.format(loss, self.a, self.b))\n", | |
| " if render: \n", | |
| " plt.plot(x, pred, '--')\n", | |
| " \n", | |
| " if render:\n", | |
| " plt.plot(x, pred, 'k')" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 5, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "[Loss: 292345.7619047619][a: -8.846333333333334][b: -0.7025714285714286]\n", | |
| "[Loss: 5496.820888817301][a: -64.01998446995914][b: -10.076647635987907]\n", | |
| "[Loss: 5228.907792900452][a: -63.64163330900919][b: -15.237640433931766]\n", | |
| "[Loss: 4974.920735381461][a: -63.27322603786466][b: -20.262708448471336]\n", | |
| "[Loss: 4734.13584513036][a: -62.91452138086968][b: -25.155432994575882]\n", | |
| "[Loss: 4505.866877650001][a: -62.56526380365808][b: -29.91929955614124]\n", | |
| "[Loss: 4289.463259216091][a: -62.225204501775586][b: -34.557701821085665]\n", | |
| "[Loss: 4084.3082327216625][a: -61.894101223444274][b: -39.07394409894915]\n", | |
| "[Loss: 3889.8170998999426][a: -61.571718096987055][b: -43.47124367482067]\n", | |
| "[Loss: 3705.435554915956][a: -61.25782546279713][b: -47.75273310127079]\n" | |
| ] | |
| }, | |
| { | |
| "data": { | |
| "image/png": "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\n", | |
| "text/plain": [ | |
| "<Figure size 432x288 with 1 Axes>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "reg = LinearReg(learning_rate=0.001)\n", | |
| "reg.fit(x=t, y=x, num_iters=1000, log_freq=100, render=True)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 7, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "[<matplotlib.lines.Line2D at 0x7f08e8708780>]" | |
| ] | |
| }, | |
| "execution_count": 7, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| }, | |
| { | |
| "data": { | |
| "image/png": "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\n", | |
| "text/plain": [ | |
| "<Figure size 432x288 with 1 Axes>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "t_new = np.arange(41)\n", | |
| "y_new = reg.predict(t_new)\n", | |
| "plt.plot(t_new, y_new)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 8, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "-2490.0889541183765" | |
| ] | |
| }, | |
| "execution_count": 8, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "# Value at 40\n", | |
| "y_new[-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.6.5" | |
| } | |
| }, | |
| "nbformat": 4, | |
| "nbformat_minor": 2 | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment