{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "Here is previous post with my multivariable gradient descent implementation: https://nbviewer.jupyter.org/github/lion137/blog/blob/master/gradient_descent_multi.ipynb, but it has a bug and also lacked input features, so I rebuilt it and also updated the old version. This is a code:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import numpy as np\n", "import time\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# helping functions\n", "def split_input_and_to_float(xs):\n", " def helper(ys):\n", " l = list(map(int, ys))\n", " l = list(map(float, ys))\n", " return l\n", " l1 = list(map(helper, xs))\n", " return l1\n", "\n", "def split(x):\n", " \"\"\"simple split string\"\"\"\n", " return x.split(',')\n", "\n", "def Sum(X, y, theta, ind):\n", " \"compute sum under the sigma in g d algorithm\"\n", " i = 0\n", " s = 0\n", " while i < len(X):\n", " s += (theta * X[i,:].transpose() - y[0, i]) * X[i, ind]\n", " i += 1\n", " return float(s)\n", "\n", "def J_m(A, y, theta):\n", " \"\"\"computes cost function \"\"\"\n", " n = len(A)\n", " return (1 / (2 * n)) * float(sum([x * x for x in A * theta.transpose() - y.transpose()]))\n", "\n", "def scaling(X):\n", " \"\"\"mean normalzation\"\"\"\n", " l = []\n", " for k in range(X.shape[1]):\n", " x = X[:,k]\n", " def f(e):\n", " tmp0 = sum(x) / len(x)\n", " tmp1 = max(x) - min(x)\n", " return (e - tmp0) / tmp1\n", " m = list(map(float, (list(map(f, x[:, 0])))))\n", " l.append(m)\n", " return np.matrix(l).transpose()" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "time in secs: 0.02801966667175293\n", "[[17 31]] 0.0 0.625 8\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgkAAAFkCAYAAACq4KjhAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAIABJREFUeJzt3Xl0VdXdxvHvL4wBZBIhoiAoClgRm1jrgAOiIAiKWtFI\nxWGhAjJF+xatQ1WUKrbKoChOCChRHKlDBUSpLaBC4lAVVBxApaCIDTIj7PePfQNJCJDh3uw7PJ+1\n7nLdc889eXIF8mSfc/Y25xwiIiIiJaWFDiAiIiLxSSVBRERESqWSICIiIqVSSRAREZFSqSSIiIhI\nqVQSREREpFQqCSIiIlIqlQQREREplUqCiIiIlEolQUREREpV7pJgZiea2d/N7Dsz225mZxV5rbqZ\n3WVmH5rZusg+k81s/xLHqGVm95vZajP72cyeNbOm0fiGREREJDoqMpJQF3gfGASUXPihDnAUcCvw\na+AcoC0wo8R+Y4AzgfOAk4DmwHMVyCIiIiIxYpVZ4MnMtgO9nXN/38M+RwPvAAc55741s/rAD8CF\nzrkXIvu0BRYDxzrn3q1wIBEREYmaqrgmoSF+xOF/kedZQHVgTuEOzrlPgeXAcVWQR0RERMqgeiwP\nbma1gDuBac65dZHNGcAW59zaEruvirxW2nH2BboBXwObYpNWREQkKdUGWgEznXM/lueNMSsJZlYd\neAY/ijCokofrBjxZ6VAiIiKpqy8wrTxviElJKFIQWgCnFhlFAFgJ1DSz+iVGE5pFXivN1wBPPPEE\n7du3j0HixJKTk8O9994bOkZw+hw8fQ476bPw9DnspM8CFi9ezO9//3uI/Cwtj6iXhCIF4WCgs3Pu\npxK75AG/AF2AohcutgQW7OawmwDat29PZmZmtCMnnAYNGuhzQJ9DIX0OO+mz8PQ57KTPophyn64v\nd0kws7pAG8Aimw42s47AGuC/+FsZjwJ6AjXMrFlkvzXOua3OubVm9ihwj5n9BPwMjAPm6c4GERGR\n+FGRkYSjgTfx1xo44G+R7ZPx8yP0imx/P7LdIs87A29FtuUA24BngVrAa8DVFcgiIiIiMVLukuCc\n+yd7vnVyr7dVOuc2A0MiDxEREYlDWrshAWVnZ4eOEBf0OXj6HHbSZ+Hpc9hJn0XlVGrGxapiZplA\nXl5eni5AERERKYf8/HyysrIAspxz+eV5b0wnUxIRkfJZvnw5q1evDh1DEkyTJk1o2bJl1I+rkiAi\nEieWL19O+/bt2bBhQ+gokmDq1KnD4sWLo14UVBJEROLE6tWr2bBhgyaOk3IpnCxp9erVKgkiIslO\nE8dJvNDdDSIiIlIqlQQREREplUqCiIiIlEolQUREREqlkiAiInHjn//8J2lpabz11lvFtk+dOpX2\n7dtTs2ZNGjduHChd6lFJEBGRuGJmxZ5/+umnXHbZZRx66KE88sgjPPTQQ1WSY+HChQwaNIijjz6a\nmjVrUq1atXIfY+vWrYwaNYr27duTnp5ORkYGPXv2ZMWKFbt9z5NPPklaWhr169evTPyo0C2QIiIS\n1+bOnYtzjrFjx9K6desq+7qvvvoqjz32GEceeSSHHHIIn332Wbne/8svv9CjRw/efvttrrjiCo48\n8kh++ukn3nnnHQoKCmjevPku71m/fj0jRoygXr160fo2KkUlQURE4tqqVasAqvw360GDBnHddddR\nq1YthgwZUu6ScM899/Cvf/2LefPmFa6dsFcjR46kfv36dO7cmRkzZlQkdlTpdIOIiMTc8uXLGTRo\nEO3ataNOnTo0adKEPn36sGzZsl32LbrwYOvWrbnlllsA2G+//UhLS+O2224DYMaMGfTs2ZMDDjiA\n2rVr06ZNG26//Xa2b98elcz77bcftWrVqtB7nXOMGzeOc889l6ysLLZt28bGjRv3+J7PP/+cMWPG\ncM8991C9enz8Dh8fKUREJKktXLiQt99+m+zsbA488EC+/vprJkyYQOfOnfnkk0+oXbv2jn2LXpMw\nduxYJk+ezIsvvsjEiROpW7cuRx55JACTJ09mn3324dprr6VevXq88cYb3Hzzzfz888/cddddO46x\ncePGMq2HUa1aNRo2bBiV7/eTTz5hxYoVdOjQgSuvvJIpU6awZcsWOnTowNixYznllFN2ec/w4cPp\n0qULZ5xxBk8//XRUclSWSoKIiMRcz549Oe+884pt69WrF8ceeyzPPfccffv2LfV9Z511Fu+99x4v\nvvgi5513XrE7G3Jzc4v9pn/llVfSqFEjJkyYwO23306NGjUAGD16NLfeeuteM7Zq1Yovv/yyIt/e\nLj7//HPAn3LYd999efjhh3HOMWrUKLp3787ChQs54ogjduz/yiuv8Prrr/Phhx9G5etHi0qCiEiC\n2rABliyJ7ddo1w7q1Kn8cYr+MP/ll19Yu3YtBx98MA0bNiQ/P3+3JaGsx1y3bh2bN2+mU6dOPPTQ\nQyxZsoQOHToAcMkll3DiiSfu9Xjp6enlzrA769at2/HfDz74YMdFip07d6ZNmzaMHj2aKVOmAP4O\niGuuuYaBAwfStm3bqGWIBpUEEZEEtWQJlPF6uArLy4NorDW1adMmRo0axeOPP853332347oDM6Og\noKBCx/zkk0+44YYbePPNN1m7du2O7SWP2apVK1q1alWp/OVVWDhOOOGEYncxtGjRgk6dOjF//vwd\n2+655x5+/PHHHddexBOVBBGRBNWunf8hHuuvEQ2DBw9m8uTJ5OTkcOyxx9KgQQPMjAsuuKBCFxoW\nFBRw0kkn0bBhQ26//XYOPvhgateuTV5eHtddd12xY65fv37Hb/Z7Uq1aNZo0aVLuLKUpLAbNmjXb\n5bWmTZvy/vvvA7B27VruuOMOrr76agoKCigoKMA5x7p163DOsWzZMurUqcN+++0XlVzlpZIgIpKg\n6tSJzm/5VeG5557j0ksvZfTo0Tu2bd68mf/9738VOt7cuXP56aefmDFjBieccMKO7V988cUu+/71\nr3+t8msSOnToQI0aNfjuu+92eW3FihU7fuj/9NNPrFu3jtGjRxe72LJQ69at6d27N88//3xUcpWX\nSoKIiMRctWrVdhkxGDduHNu2bavw8ZxzxY65ZcsWJkyYsMu+VXFNwqeffkqdOnVo0aIFAPXq1aNH\njx688sorfPbZZxx22GEALF68mPnz5zNw4EDAjyq8+OKLuxxv7NixvP322zz11FNkZGRUOFdlqSSI\niEjM9ezZk6lTp1K/fn0OP/xwFixYwJw5c0od3i86T8LuHH/88TRq1Ih+/foxdOhQAJ544oldpnSG\nil+TsHz5cqZOnQrAokWLALjjjjsAOOigg/j973+/Y9/27dtzyimn8MYbb+zYNmrUKObMmUPnzp0Z\nOnQozjnGjx9PkyZNuP766wFfTM4666xdvvYLL7zAwoUL6dWrV7lzR5NKgoiIxNy4ceOoXr0606ZN\nY9OmTXTq1InXX3+dbt267fKDvbQf9CU1btyYV155hWuvvZabbrqJRo0acfHFF3PqqafSrVu3qGT+\n6quvuOmmm4rlufnmmwE4+eSTi5UEM9sld/v27XnrrbcYMWIEd9xxB2lpaXTp0oXRo0ez//777/Xr\nl+VziDUrS2MLzcwygby8vDwyE+UEnIhIOeXn55OVlYX+rZPy2Nufm8LXgSznXH55jq1pmUVERKRU\n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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 4 ms, sys: 0 ns, total: 4 ms\n", "Wall time: 2.51 ms\n", "[[ 17.5]\n", " [ 33. ]]\n" ] } ], "source": [ "# gradient descent\n", "l_iin = [] # debbuging data arrays\n", "l_cost = []\n", "f = open('data1.txt', 'r') # reading from file added\n", "f1 = list(map(str.rstrip, f.readlines()))\n", "f2 = f1[0].split(',')\n", "f3 = list(map(split, f1))\n", "f4 = split_input_and_to_float(f3)\n", "X = np.matrix([0] * len(f4[0]))\n", "for elem in f4:\n", " X = np.vstack([X, elem])\n", "X = X[1: , :]\n", "y = X[:,X.shape[1] - 1].transpose()\n", "X = X[:,:X.shape[1] - 1]\n", "X = scaling(X)\n", "X = np.c_[[1] * len(X), X]\n", "theta = np.matrix([0] * X.shape[1])\n", "tmp = np.matrix([0] * X.shape[1])\n", "m = X.shape[0]\n", "cnt = 0\n", "alfa = 1.64\n", "precision = 0.001\n", "delta = precision + 1\n", "t_start = time.time()\n", "while delta > precision:\n", " beg = J_m(X, y, theta)\n", " for i in range(X.shape[1]):\n", " tmp[0,i] = theta[0,i] - (alfa / m) * (Sum(X, y, theta, i))\n", " theta = tmp\n", " end = J_m(X, y, theta)\n", " delta = abs(end - beg)\n", " l_iin.append(cnt)\n", " l_cost.append(J_m(X, y, theta))\n", " cnt += 1\n", "t_end = time.time()\n", "print(\"time in secs: \", t_end - t_start)\n", "print(theta, delta, end, cnt)\n", "\n", "\n", "plt.plot(l_iin, l_cost, color=\"blue\", linewidth=1, label=\"alfa=1.64\")\n", "plt.legend(loc=\"upper right\")\n", "plt.show() \n", "\n", "%time theta = ((X.transpose() * X).getI()) * X.transpose() * y.transpose()\n", "print(theta)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "There is also added analytically method for minimizing cost function:" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": true }, "outputs": [], "source": [ "theta = ((X.transpose() * X).getI()) * X.transpose() * y.transpose()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This is Octave's: \n", "pinv(X' * X) * X' y \n", "Doesnt work for singular matrixes though, but is great for testing purposes and after checking lots of datasets, algorithm seems to be OK. There are still, differences beetwen both methods, so I'm going, obviously, to work this out and publish results here!" ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python [default]", "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.5.2" } }, "nbformat": 4, "nbformat_minor": 1 }