diff --git a/numpy_matplotlib_scipy_sympy/example.png b/0_numpy_matplotlib_scipy_sympy/example.png similarity index 100% rename from numpy_matplotlib_scipy_sympy/example.png rename to 0_numpy_matplotlib_scipy_sympy/example.png diff --git a/numpy_matplotlib_scipy_sympy/matplotlib_ani1.ipynb b/0_numpy_matplotlib_scipy_sympy/matplotlib_ani1.ipynb similarity index 100% rename from numpy_matplotlib_scipy_sympy/matplotlib_ani1.ipynb rename to 0_numpy_matplotlib_scipy_sympy/matplotlib_ani1.ipynb diff --git a/numpy_matplotlib_scipy_sympy/matplotlib_ani1.py b/0_numpy_matplotlib_scipy_sympy/matplotlib_ani1.py similarity index 100% rename from numpy_matplotlib_scipy_sympy/matplotlib_ani1.py rename to 0_numpy_matplotlib_scipy_sympy/matplotlib_ani1.py diff --git a/numpy_matplotlib_scipy_sympy/matplotlib_ani2.ipynb b/0_numpy_matplotlib_scipy_sympy/matplotlib_ani2.ipynb similarity index 100% rename from numpy_matplotlib_scipy_sympy/matplotlib_ani2.ipynb rename to 0_numpy_matplotlib_scipy_sympy/matplotlib_ani2.ipynb diff --git a/numpy_matplotlib_scipy_sympy/matplotlib_ani2.py b/0_numpy_matplotlib_scipy_sympy/matplotlib_ani2.py similarity index 100% rename from numpy_matplotlib_scipy_sympy/matplotlib_ani2.py rename to 0_numpy_matplotlib_scipy_sympy/matplotlib_ani2.py diff --git a/numpy_matplotlib_scipy_sympy/matplotlib_full.ipynb b/0_numpy_matplotlib_scipy_sympy/matplotlib_full.ipynb similarity index 100% rename from numpy_matplotlib_scipy_sympy/matplotlib_full.ipynb rename to 0_numpy_matplotlib_scipy_sympy/matplotlib_full.ipynb diff --git a/numpy_matplotlib_scipy_sympy/matplotlib_simple_tutorial.ipynb b/0_numpy_matplotlib_scipy_sympy/matplotlib_simple_tutorial.ipynb similarity index 100% rename from numpy_matplotlib_scipy_sympy/matplotlib_simple_tutorial.ipynb rename to 0_numpy_matplotlib_scipy_sympy/matplotlib_simple_tutorial.ipynb diff --git a/numpy_matplotlib_scipy_sympy/numpy.ipynb b/0_numpy_matplotlib_scipy_sympy/numpy.ipynb similarity index 100% rename from numpy_matplotlib_scipy_sympy/numpy.ipynb rename to 0_numpy_matplotlib_scipy_sympy/numpy.ipynb diff --git a/numpy_matplotlib_scipy_sympy/scipy.ipynb b/0_numpy_matplotlib_scipy_sympy/scipy.ipynb similarity index 100% rename from numpy_matplotlib_scipy_sympy/scipy.ipynb rename to 0_numpy_matplotlib_scipy_sympy/scipy.ipynb diff --git a/numpy_matplotlib_scipy_sympy/stockholm_td_adj.dat b/0_numpy_matplotlib_scipy_sympy/stockholm_td_adj.dat similarity index 100% rename from numpy_matplotlib_scipy_sympy/stockholm_td_adj.dat rename to 0_numpy_matplotlib_scipy_sympy/stockholm_td_adj.dat diff --git a/numpy_matplotlib_scipy_sympy/sympy.ipynb b/0_numpy_matplotlib_scipy_sympy/sympy.ipynb similarity index 100% rename from numpy_matplotlib_scipy_sympy/sympy.ipynb rename to 0_numpy_matplotlib_scipy_sympy/sympy.ipynb diff --git a/python/00 Introduction.ipynb b/0_python/00 Introduction.ipynb similarity index 100% rename from python/00 Introduction.ipynb rename to 0_python/00 Introduction.ipynb diff --git a/python/01 Basics.ipynb b/0_python/01 Basics.ipynb similarity index 100% rename from python/01 Basics.ipynb rename to 0_python/01 Basics.ipynb diff --git a/python/02 Print Statement.ipynb b/0_python/02 Print Statement.ipynb similarity index 100% rename from python/02 Print Statement.ipynb rename to 0_python/02 Print Statement.ipynb diff --git a/python/03 Data Structure.ipynb b/0_python/03 Data Structure.ipynb similarity index 100% rename from python/03 Data Structure.ipynb rename to 0_python/03 Data Structure.ipynb diff --git a/python/04 Data Structure 2.ipynb b/0_python/04 Data Structure 2.ipynb similarity index 100% rename from python/04 Data Structure 2.ipynb rename to 0_python/04 Data Structure 2.ipynb diff --git a/python/05 Control Flow.ipynb b/0_python/05 Control Flow.ipynb similarity index 100% rename from python/05 Control Flow.ipynb rename to 0_python/05 Control Flow.ipynb diff --git a/python/06 Function.ipynb b/0_python/06 Function.ipynb similarity index 100% rename from python/06 Function.ipynb rename to 0_python/06 Function.ipynb diff --git a/python/07 Class.ipynb b/0_python/07 Class.ipynb similarity index 100% rename from python/07 Class.ipynb rename to 0_python/07 Class.ipynb diff --git a/python/Python.pdf b/0_python/Python.pdf similarity index 100% rename from python/Python.pdf rename to 0_python/Python.pdf diff --git a/python/README.md b/0_python/README.md similarity index 100% rename from python/README.md rename to 0_python/README.md diff --git a/python/tips/README.md b/0_python/tips/README.md similarity index 100% rename from python/tips/README.md rename to 0_python/tips/README.md diff --git a/python/tips/pip.md b/0_python/tips/pip.md similarity index 100% rename from python/tips/pip.md rename to 0_python/tips/pip.md diff --git a/python/tips/virtualenv.md b/0_python/tips/virtualenv.md similarity index 100% rename from python/tips/virtualenv.md rename to 0_python/tips/virtualenv.md diff --git a/python/tips/virtualenv_wrapper.md b/0_python/tips/virtualenv_wrapper.md similarity index 100% rename from python/tips/virtualenv_wrapper.md rename to 0_python/tips/virtualenv_wrapper.md diff --git a/kmeans/README.md b/1_kmeans/README.md similarity index 100% rename from kmeans/README.md rename to 1_kmeans/README.md diff --git a/kmeans/download_iris.py b/1_kmeans/download_iris.py similarity index 100% rename from kmeans/download_iris.py rename to 1_kmeans/download_iris.py diff --git a/kmeans/iris.csv b/1_kmeans/iris.csv similarity index 100% rename from kmeans/iris.csv rename to 1_kmeans/iris.csv diff --git a/kmeans/k-means.ipynb b/1_kmeans/k-means.ipynb similarity index 100% rename from kmeans/k-means.ipynb rename to 1_kmeans/k-means.ipynb diff --git a/kmeans/k-means.py b/1_kmeans/k-means.py similarity index 100% rename from kmeans/k-means.py rename to 1_kmeans/k-means.py diff --git a/kmeans/kmeans-color-vq.ipynb b/1_kmeans/kmeans-color-vq.ipynb similarity index 100% rename from kmeans/kmeans-color-vq.ipynb rename to 1_kmeans/kmeans-color-vq.ipynb diff --git a/kmeans/pic/01.jpeg b/1_kmeans/pic/01.jpeg similarity index 100% rename from kmeans/pic/01.jpeg rename to 1_kmeans/pic/01.jpeg diff --git a/kmeans/pic/02.jpeg b/1_kmeans/pic/02.jpeg similarity index 100% rename from kmeans/pic/02.jpeg rename to 1_kmeans/pic/02.jpeg diff --git a/kmeans/pic/03.jpeg b/1_kmeans/pic/03.jpeg similarity index 100% rename from kmeans/pic/03.jpeg rename to 1_kmeans/pic/03.jpeg diff --git a/kmeans/pic/04.jpeg b/1_kmeans/pic/04.jpeg similarity index 100% rename from kmeans/pic/04.jpeg rename to 1_kmeans/pic/04.jpeg diff --git a/kmeans/pic/05.jpeg b/1_kmeans/pic/05.jpeg similarity index 100% rename from kmeans/pic/05.jpeg rename to 1_kmeans/pic/05.jpeg diff --git a/kmeans/pic/06.jpeg b/1_kmeans/pic/06.jpeg similarity index 100% rename from kmeans/pic/06.jpeg rename to 1_kmeans/pic/06.jpeg diff --git a/kmeans/pic/07.jpeg b/1_kmeans/pic/07.jpeg similarity index 100% rename from kmeans/pic/07.jpeg rename to 1_kmeans/pic/07.jpeg diff --git a/kmeans/pic/08.jpeg b/1_kmeans/pic/08.jpeg similarity index 100% rename from kmeans/pic/08.jpeg rename to 1_kmeans/pic/08.jpeg diff --git a/kmeans/pic/09.jpeg b/1_kmeans/pic/09.jpeg similarity index 100% rename from kmeans/pic/09.jpeg rename to 1_kmeans/pic/09.jpeg diff --git a/kmeans/pic/10.jpeg b/1_kmeans/pic/10.jpeg similarity index 100% rename from kmeans/pic/10.jpeg rename to 1_kmeans/pic/10.jpeg diff --git a/kmeans/pic/11.jpeg b/1_kmeans/pic/11.jpeg similarity index 100% rename from kmeans/pic/11.jpeg rename to 1_kmeans/pic/11.jpeg diff --git a/kmeans/pic/12.jpeg b/1_kmeans/pic/12.jpeg similarity index 100% rename from kmeans/pic/12.jpeg rename to 1_kmeans/pic/12.jpeg diff --git a/kmeans/pic/13.jpeg b/1_kmeans/pic/13.jpeg similarity index 100% rename from kmeans/pic/13.jpeg rename to 1_kmeans/pic/13.jpeg diff --git a/kmeans/pic/14.jpeg b/1_kmeans/pic/14.jpeg similarity index 100% rename from kmeans/pic/14.jpeg rename to 1_kmeans/pic/14.jpeg diff --git a/kmeans/pic/15.jpeg b/1_kmeans/pic/15.jpeg similarity index 100% rename from kmeans/pic/15.jpeg rename to 1_kmeans/pic/15.jpeg diff --git a/kmeans/pic/16.jpeg b/1_kmeans/pic/16.jpeg similarity index 100% rename from kmeans/pic/16.jpeg rename to 1_kmeans/pic/16.jpeg diff --git a/kmeans/pic/17.png b/1_kmeans/pic/17.png similarity index 100% rename from kmeans/pic/17.png rename to 1_kmeans/pic/17.png diff --git a/kmeans/pic/18.png b/1_kmeans/pic/18.png similarity index 100% rename from kmeans/pic/18.png rename to 1_kmeans/pic/18.png diff --git a/kmeans/pic/19.png b/1_kmeans/pic/19.png similarity index 100% rename from kmeans/pic/19.png rename to 1_kmeans/pic/19.png diff --git a/kmeans/pic/20.png b/1_kmeans/pic/20.png similarity index 100% rename from kmeans/pic/20.png rename to 1_kmeans/pic/20.png diff --git a/kmeans/pic/21.png b/1_kmeans/pic/21.png similarity index 100% rename from kmeans/pic/21.png rename to 1_kmeans/pic/21.png diff --git a/kmeans/pic/22.png b/1_kmeans/pic/22.png similarity index 100% rename from kmeans/pic/22.png rename to 1_kmeans/pic/22.png diff --git a/kmeans/pic/23.png b/1_kmeans/pic/23.png similarity index 100% rename from kmeans/pic/23.png rename to 1_kmeans/pic/23.png diff --git a/kmeans/pic/24.png b/1_kmeans/pic/24.png similarity index 100% rename from kmeans/pic/24.png rename to 1_kmeans/pic/24.png diff --git a/kmeans/pic/25.png b/1_kmeans/pic/25.png similarity index 100% rename from kmeans/pic/25.png rename to 1_kmeans/pic/25.png diff --git a/kmeans/pic/26.png b/1_kmeans/pic/26.png similarity index 100% rename from kmeans/pic/26.png rename to 1_kmeans/pic/26.png diff --git a/kmeans/pic/27.jpg b/1_kmeans/pic/27.jpg similarity index 100% rename from kmeans/pic/27.jpg rename to 1_kmeans/pic/27.jpg diff --git a/kmeans/pic/28.png b/1_kmeans/pic/28.png similarity index 100% rename from kmeans/pic/28.png rename to 1_kmeans/pic/28.png diff --git a/kmeans/pic/29.gif b/1_kmeans/pic/29.gif similarity index 100% rename from kmeans/pic/29.gif rename to 1_kmeans/pic/29.gif diff --git a/kmeans/pic/30.gif b/1_kmeans/pic/30.gif similarity index 100% rename from kmeans/pic/30.gif rename to 1_kmeans/pic/30.gif diff --git a/knn/knn_classification.ipynb b/1_knn/knn_classification.ipynb similarity index 100% rename from knn/knn_classification.ipynb rename to 1_knn/knn_classification.ipynb diff --git a/knn/knn_classification.py b/1_knn/knn_classification.py similarity index 100% rename from knn/knn_classification.py rename to 1_knn/knn_classification.py diff --git a/1_logistic_regression/Least_squares.ipynb b/1_logistic_regression/Least_squares.ipynb new file mode 100644 index 0000000..dbcca07 --- /dev/null +++ b/1_logistic_regression/Least_squares.ipynb @@ -0,0 +1,427 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Least squares\n", + "\n", + "A mathematical procedure for finding the best-fitting curve to a given set of points by minimizing the sum of the squares of the offsets (\"the residuals\") of the points from the curve. The sum of the squares of the offsets is used instead of the offset absolute values because this allows the residuals to be treated as a continuous differentiable quantity. However, because squares of the offsets are used, outlying points can have a disproportionate effect on the fit, a property which may or may not be desirable depending on the problem at hand. \n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Show the data\n" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "%matplotlib inline\n", + "\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "import sklearn\n", + "from sklearn import datasets\n", + "\n", + "# load data\n", + "d = datasets.load_diabetes()\n", + "\n", + "X = d.data[:, 2]\n", + "Y = d.target\n", + "\n", + "# draw original data\n", + "plt.scatter(X, Y)\n", + "plt.xlabel(\"X\")\n", + "plt.ylabel(\"Y\")\n", + "plt.show()\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Theory\n", + "For $N$ observation data:\n", + "$$\n", + "\\mathbf{X} = \\{x_1, x_2, ..., x_N \\} \\\\\n", + "\\mathbf{Y} = \\{y_1, y_2, ..., y_N \\}\n", + "$$\n", + "\n", + "We want to find the model which can predict the data. The simplest model is linear model, which has the form of \n", + "$$\n", + "y = ax + b\n", + "$$\n", + "\n", + "The purpose is to find parameters $a, b$ which best fit the model to the observation data. \n", + "\n", + "We use the sum of squares to measure the differences (loss function) between the model's prediction and observation data:\n", + "$$\n", + "L = \\sum_{i=1}^{N} (y_i - a x_i + b)^2\n", + "$$\n", + "\n", + "To make the loss function minimize, we can find the parameters:\n", + "$$\n", + "\\frac{\\partial L}{\\partial a} = -2 \\sum_{i=1}^{N} (y_i - a x_i - b) x_i \\\\\n", + "\\frac{\\partial L}{\\partial b} = -2 \\sum_{i=1}^{N} (y_i - a x_i - b)\n", + "$$\n", + "When the loss is minimized, therefore the partial difference is zero, then we can get:\n", + "$$\n", + "-2 \\sum_{i=1}^{N} (y_i - a x_i - b) x_i = 0 \\\\\n", + "-2 \\sum_{i=1}^{N} (y_i - a x_i - b) = 0 \\\\\n", + "$$\n", + "\n", + "We reoder the items as:\n", + "$$\n", + "a \\sum x_i^2 + b \\sum x_i = \\sum y_i x_i \\\\\n", + "a \\sum x_i + b N = \\sum y_i\n", + "$$\n", + "By solving the linear equation we can obtain the model parameters." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Program" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "a = 949.435260, b = 152.133484\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAD8CAYAAAB5Pm/hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJztnXl4VNX5xz8nYYAELQGhFMLqBsoikagoioILCgpRW5eigFqxrf1ZrFKCG4soWNzq2mJdUEFRkIiiUhXcUEQwLCJQQEEIiGxBIQEmyfn9ceeGWe4+d5Yk5/M8eTK5c5dz7mS+9z3vec/7CiklCoVCoai9ZKS6AQqFQqFILEroFQqFopajhF6hUChqOUroFQqFopajhF6hUChqOUroFQqFopajhF6hUChqOUroFQqFopajhF6hUChqOfVS3QCAZs2ayfbt26e6GQqFQlGjWLp06U4pZXO7/dJC6Nu3b8+SJUtS3QyFQqGoUQghNjnZT7luFAqFopajhF6hUChqObZCL4RoKIRYLIRYLoRYJYQYF9r+ghDieyHEstBP99B2IYR4TAixXgixQghxcqI7oVAoFApznPjoDwJ9pZT7hBAB4DMhxLuh90ZKKWdG7X8RcFzo5zTg6dBvVwSDQbZs2cKBAwfcHqrwkYYNG9K6dWsCgUCqm6JQKDxiK/RSS1i/L/RnIPRjlcR+EPBi6LhFQogcIURLKeU2Nw3bsmULRx55JO3bt0cI4eZQhU9IKdm1axdbtmyhQ4cOqW6OQqHwiCMfvRAiUwixDPgJeF9K+WXorftC7plHhBANQttygc1hh28JbXPFgQMHOOqoo5TIpxAhBEcddZQaVSnqPEXFJfSaNJ8OhXPpNWk+RcUlqW6SKxwJvZSyUkrZHWgNnCqE6AKMBjoBpwBNgVFuLiyEGC6EWCKEWLJjxw6zfdycUpEA1GegqOsUFZcw+o2VlJSWI4GS0nJGv7GyRom9q6gbKWUpsAC4UEq5TWocBJ4HTg3tVgK0CTusdWhb9LmmSCnzpZT5zZvbxvsrFApFSpg8by3lwcqIbeXBSibPW5uiFrnHSdRNcyFETuh1FnA+sEYI0TK0TQAFwDehQ+YAQ0LRNz2BvW7987WR9u3bs3Pnzrj3UShqM+noItlaWu5qezriJOqmJTBVCJGJ9mB4TUr5thBivhCiOSCAZcAfQ/u/A/QH1gNlwHX+N1uhUNQ2dBeJbj3rLhKAgjzX03y+0SonixIDUW+Vk5WC1njD1qKXUq6QUuZJKbtJKbtIKceHtveVUnYNbbtGSrkvtF1KKW+WUh4Ter/G5jbYuHEjnTp1YtiwYRx//PEMHjyYDz74gF69enHcccexePFidu/eTUFBAd26daNnz56sWLECgF27dnHBBRfQuXNn/vCHP6AFIWm8/PLLnHrqqXTv3p2bbrqJyspKsyYoFHWGdHWRjOzXkaxAZsS2rEAmI/t1TFGL3JMWuW5sGTECli3z95zdu8Ojj9rutn79el5//XWee+45TjnlFKZPn85nn33GnDlzuP/++2nTpg15eXkUFRUxf/58hgwZwrJlyxg3bhxnnnkm99xzD3PnzuXZZ58FYPXq1cyYMYOFCxcSCAT485//zLRp0xgyZIi//VMoUkBRcQmT561la2k5rXKyGNmvo2NrPF1dJHr7vfYrHagZQp9COnToQNeuXQHo3Lkz5557LkIIunbtysaNG9m0aROzZs0CoG/fvuzatYuff/6ZTz75hDfeeAOAAQMG0KRJEwA+/PBDli5dyimnnAJAeXk5v/71r1PQM4XCX+J1vaSzi6QgL7dGCXs0NUPoHVjeiaJBgwbVrzMyMqr/zsjIoKKiwvWKUSklQ4cOZeLEib62U6FINVauFyciObJfx4gHBdQ8F0m6opKaxclZZ53FtGnTAPjoo49o1qwZv/rVr+jduzfTp08H4N1332XPnj0AnHvuucycOZOffvoJgN27d7Npk6NMowpFBOkWoRKv66UgL5eJl3UlNycLAeTmZDHxsq412pJOF2qGRZ/GjB07luuvv55u3bqRnZ3N1KlTARgzZgxXX301nTt35owzzqBt27YAnHjiiUyYMIELLriAqqoqAoEATz75JO3atUtlNxQ1jHSMUPHD9VLTXSTpigiPBkkV+fn5MrrwyOrVqznhhBNS1CJFOOqzSD96TZpvKKq5OVksLOybghbFPnxAc70oqzxxCCGWSinz7fZTFr1CUQNJxwiV2hCdUltRQq9Q1EDSNUJFuV7SEzUZq1DUQGrDIh5F8lAWvUJRA1FuEoUblNArFDWUVLlJ4ln9qkgNSugVCoVj0jGsU2GP8tH7QP/+/SktLbXc55577uGDDz7wdP6PPvqIiy++2Ha/c845h+gw1WgeffRRysrKPLVDEUm6LVhKBumaeExhjbLo40BKiZSSd955x3bf8ePHJ6FF9jz66KNcc801ZGdnp7opNZq6atmmY1inwp5aY9Enwrp6+OGH6dKlC126dOHRUL6djRs30rFjR4YMGUKXLl3YvHlzRMGQe++9l44dO3LmmWdy9dVX8+CDDwIwbNgwZs6cCWgFRsaMGcPJJ59M165dWbNmDQCLFy/m9NNPJy8vjzPOOIO1a62tpPLycq666ipOOOEELr30UsrLD3/Z/vSnP5Gfn0/nzp0ZM2YMAI899hhbt26lT58+9OnTx3Q/hT111bI1C99MdVinwppaYdEnwrpaunQpzz//PF9++SVSSk477TTOPvtsmjRpwrp165g6dSo9e/aMOOarr75i1qxZLF++nGAwyMknn0yPHj0Mz9+sWTO+/vprnnrqKR588EH+85//0KlTJz799FPq1avHBx98wB133FGdGdOIp59+muzsbFavXs2KFSs4+eSTq9+77777aNq0KZWVlZx77rmsWLGCW265hYcffpgFCxbQrFkz0/26devm6Z7VJeqqZasSj7mgshIyM+33SwK1QujjzZpnxGeffcall15Ko0aNALjsssv49NNPGThwIO3atYsReYCFCxcyaNAgGjZsSMOGDbnkkktMz3/ZZZcB0KNHj+p0xnv37mXo0KGsW7cOIQTBYNCyjZ988gm33HILAN26dYsQ6Ndee40pU6ZQUVHBtm3b+Pbbbw0F3Ol+iSTdojictMfpgqWa2DcrVFinA9auhTvvhCOPhOefT3VrgFoi9Mm2rnTxjwc93XFmZiYVFRUA3H333fTp04fZs2ezceNGzjnnHE/n/v7773nwwQf56quvaNKkCcOGDePAgQOe90sk6ebrdtoeJ5ZtTe2bHWr1qwklJTBuHDz3HGRlwahRICUIkeqW1Q4ffSL8hmeddRZFRUWUlZWxf/9+Zs+ezVlnnWV5TK9evXjrrbc4cOAA+/bt4+2333Z1zb1795Kbq32BXnjhBdv9w1Mhf/PNN9VlDH/++WcaNWpE48aN2b59O++++271MUceeSS//PKL7X7JIt183U7b4ySlbk3tWzpQoyKa9uyBwkI47jh44QW4+WbYsAHuuistRB5qiUWfCL/hySefzLBhwzj11FMB+MMf/kBeXh4bN240PeaUU05h4MCBdOvW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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "N = X.shape[0]\n", + "\n", + "S_X2 = np.sum(X*X)\n", + "S_X = np.sum(X)\n", + "S_XY = np.sum(X*Y)\n", + "S_Y = np.sum(Y)\n", + "\n", + "A1 = np.array([[S_X2, S_X], \n", + " [S_X, N]])\n", + "B1 = np.array([S_XY, S_Y])\n", + "\n", + "coeff = np.linalg.inv(A1).dot(B1)\n", + "\n", + "print('a = %f, b = %f' % (coeff[0], coeff[1]))\n", + "\n", + "x_min = np.min(X)\n", + "x_max = np.max(X)\n", + "y_min = coeff[0] * x_min + coeff[1]\n", + "y_max = coeff[0] * x_max + coeff[1]\n", + "\n", + "plt.scatter(X, Y, label='original data')\n", + "plt.plot([x_min, x_max], [y_min, y_max], 'r', label='model')\n", + "plt.legend()\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## How to fit polynomial function?\n", + "\n", + "If we observe a missle at some time, then how to estimate the trajectory? Acoording the physical theory, the trajectory can be formulated as:\n", + "$$\n", + "y = at^2 + bt + c\n", + "$$\n", + "The we need at least three data to compute the parameters $a, b, c$.\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAD8CAYAAAB5Pm/hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAEo1JREFUeJzt3X+MndV95/H3pzYkA9tlCJlaMCZrqiB3V4mC6YglSxvt4qaENAoWSiOq3Y2FrLp/oDYpklvY/yqtlESuljb/oLWwus5uQkIJP6wsCkFAVu0foTvGFBOIG4eG4OGHpxSTTXB3gX73jzlOBheYOzN3fD2H90u6uuc5z3nu8z2y/Jlnzn3u3FQVkqR+/dyoC5AkrSyDXpI6Z9BLUucMeknqnEEvSZ0z6CWpcwa9JHXOoJekzhn0ktS5taMuAODd7353bdiwYdRlSNKqsm/fvr+rqomFxp0SQb9hwwamp6dHXYYkrSpJnhpknEs3ktQ5g16SOmfQS1LnDHpJ6pxBL0mdGyjok3w6yWNJvpPkM63vXUnuS/K99nx260+SLyQ5lOTRJBevVPF37Z/hss89wAU3/E8u+9wD3LV/ZqVOJUmr1oJBn+R9wG8DlwAfAD6W5L3ADcD9VXUhcH/bBrgSuLA9tgM3r0Dd3LV/hhvvOMDM0WMUMHP0GDfeccCwl6QTDHJF/y+Bh6rq5ap6FfhfwNXAVcCeNmYPsKW1rwK+WHO+DYwnOXfIdbPz3oMce+W11/Ude+U1dt57cNinkqRVbZCgfwz41STnJDkD+ChwPrCuqp5tY54D1rX2JPD0vOMPt77XSbI9yXSS6dnZ2UUX/szRY4vql6S3qwWDvqqeAD4PfBP4BvAI8NoJYwpY1LeMV9WuqpqqqqmJiQU/wftPnDc+tqh+SXq7GujN2KraXVW/XFUfAl4E/gZ4/viSTHs+0obPMHfFf9z61jdUO67YyNhpa17XN3baGnZcsXHYp5KkVW3Qu25+oT2/h7n1+S8De4GtbchW4O7W3gt8qt19cynw0rwlnqHZsmmSz179fibHxwgwOT7GZ69+P1s2/ZNVIkl6Wxv0j5p9Lck5wCvAdVV1NMnngNuSbAOeAj7Zxt7D3Dr+IeBl4Noh1/xTWzZNGuyStICBgr6qfvUN+l4ANr9BfwHXLb80SdIw+MlYSeqcQS9JnTPoJalzBr0kdc6gl6TOGfSS1DmDXpI6Z9BLUucMeknq3KB/AkEayF37Z9h570GeOXqM88bH2HHFRv9MhTRiBr2G5vi3fh3/Qpjj3/oFGPbSCLl0o6HxW7+kU5NBr6HxW7+kU5NBr6HxW7+kU5NBr6HxW7+kU5Nvxmpojr/h6l030qnFoNdQ+a1f0qnHpRtJ6pxBL0mdM+glqXMGvSR1bqCgT/L7Sb6T5LEktyZ5Z5ILkjyU5FCSryY5vY19R9s+1PZvWMkJSJLe2oJBn2QS+D1gqqreB6wBrgE+D9xUVe8FXgS2tUO2AS+2/pvaOEnSiAy6dLMWGEuyFjgDeBa4HLi97d8DbGntq9o2bf/mJBlOuZKkxVow6KtqBvhj4IfMBfxLwD7gaFW92oYdBo7fPD0JPN2OfbWNP+fE102yPcl0kunZ2dnlzkOS9CYGWbo5m7mr9AuA84AzgY8s98RVtauqpqpqamJiYrkvJ0l6E4Ms3fwa8LdVNVtVrwB3AJcB420pB2A9MNPaM8D5AG3/WcALQ61akjSwQYL+h8ClSc5oa+2bgceBB4FPtDFbgbtbe2/bpu1/oKpqeCVLkhZjkDX6h5h7U/Vh4EA7Zhfwh8D1SQ4xtwa/ux2yGzin9V8P3LACdUuSBpRT4WJ7amqqpqenR12GJK0qSfZV1dRC4/xkrCR1zqCXpM4Z9JLUOYNekjpn0EtS5wx6SeqcQS9JnTPoJalzBr0kdc6gl6TOGfSS1DmDXpI6Z9BLUucMeknqnEEvSZ0z6CWpcwa9JHXOoJekzhn0ktQ5g16SOrdg0CfZmOSReY8fJflMkncluS/J99rz2W18knwhyaEkjya5eOWnIUl6MwsGfVUdrKqLquoi4JeBl4E7gRuA+6vqQuD+tg1wJXBhe2wHbl6JwiVJg1ns0s1m4PtV9RRwFbCn9e8BtrT2VcAXa863gfEk5w6lWknSoi026K8Bbm3tdVX1bGs/B6xr7Ung6XnHHG59kqQRGDjok5wOfBz48xP3VVUBtZgTJ9meZDrJ9Ozs7GIOlSQtwmKu6K8EHq6q59v288eXZNrzkdY/A5w/77j1re91qmpXVU1V1dTExMTiK5ckDWQxQf9b/GzZBmAvsLW1twJ3z+v/VLv75lLgpXlLPJKkk2ztIIOSnAl8GPided2fA25Lsg14Cvhk678H+ChwiLk7dK4dWrWSpEUbKOir6ifAOSf0vcDcXTgnji3guqFUJ0laNj8ZK0mdM+glqXMGvSR1zqCXpM4Z9JLUOYNekjpn0EtS5wx6SeqcQS9JnTPoJalzBr0kdc6gl6TOGfSS1DmDXpI6Z9BLUucMeknq3EBfPCJp9bpr/ww77z3IM0ePcd74GDuu2MiWTZOjLksnkUEvdeyu/TPceMcBjr3yGgAzR49x4x0HAAz7txGXbqSO7bz34E9D/rhjr7zGznsPjqgijYJBL3XsmaPHFtWvPhn0UsfOGx9bVL/6NFDQJxlPcnuS7yZ5IskHk7wryX1Jvteez25jk+QLSQ4leTTJxSs7BUlvZscVGxk7bc3r+sZOW8OOKzaOqCKNwqBX9H8KfKOqfgn4APAEcANwf1VdCNzftgGuBC5sj+3AzUOtWNLAtmya5LNXv5/J8TECTI6P8dmr3+8bsW8zqaq3HpCcBTwC/GLNG5zkIPBvq+rZJOcC36qqjUn+a2vfeuK4NzvH1NRUTU9PD2E6kvT2kWRfVU0tNG6QK/oLgFngz5LsT3JLkjOBdfPC+zlgXWtPAk/PO/5w65MkjcAgQb8WuBi4uao2AT/hZ8s0ALQr/bf+1eAESbYnmU4yPTs7u5hDJUmLMEjQHwYOV9VDbft25oL/+bZkQ3s+0vbPAOfPO35963udqtpVVVNVNTUxMbHU+iVJC1gw6KvqOeDpJMffpt8MPA7sBba2vq3A3a29F/hUu/vmUuClt1qflyStrEH/BMLvAl9KcjrwJHAtcz8kbkuyDXgK+GQbew/wUeAQ8HIbK0kakYGCvqoeAd7ond3NbzC2gOuWWZckaUj8ZKwkdc6gl6TOGfSS1DmDXpI6Z9BLUucMeknqnEEvSZ0z6CWpcwa9JHXOoJekzhn0ktQ5g16SOmfQS1LnDHpJ6pxBL0mdM+glqXMGvSR1zqCXpM4Z9JLUOYNekjpn0EtS5wYK+iQ/SHIgySNJplvfu5Lcl+R77fns1p8kX0hyKMmjSS5eyQlIkt7aYq7o/11VXVRVU237BuD+qroQuL9tA1wJXNge24Gbh1WsJGnxlrN0cxWwp7X3AFvm9X+x5nwbGE9y7jLOI0lahkGDvoBvJtmXZHvrW1dVz7b2c8C61p4Enp537OHWJ0kagbUDjvuVqppJ8gvAfUm+O39nVVWSWsyJ2w+M7QDvec97FnOoJGkRBrqir6qZ9nwEuBO4BHj++JJMez7Shs8A5887fH3rO/E1d1XVVFVNTUxMLH0GkqS3tGDQJzkzyc8fbwO/DjwG7AW2tmFbgbtbey/wqXb3zaXAS/OWeCRJJ9kgSzfrgDuTHB//5ar6RpL/DdyWZBvwFPDJNv4e4KPAIeBl4NqhVy1JGtiCQV9VTwIfeIP+F4DNb9BfwHVDqU6StGx+MlaSOmfQS1LnDHpJ6pxBL0mdM+glqXMGvSR1zqCXpM4Z9JLUOYNekjpn0EtS5wx6SeqcQS9JnTPoJalzBr0kdc6gl6TOGfSS1DmDXpI6Z9BLUucMeknqnEEvSZ0z6CWpcwMHfZI1SfYn+XrbviDJQ0kOJflqktNb/zva9qG2f8PKlC5JGsRirug/DTwxb/vzwE1V9V7gRWBb698GvNj6b2rjJEkjMlDQJ1kP/AZwS9sOcDlwexuyB9jS2le1bdr+zW28JGkEBr2i/xPgD4B/bNvnAEer6tW2fRiYbO1J4GmAtv+lNl6SNAILBn2SjwFHqmrfME+cZHuS6STTs7Ozw3xpSdI8g1zRXwZ8PMkPgK8wt2Tzp8B4krVtzHpgprVngPMB2v6zgBdOfNGq2lVVU1U1NTExsaxJSJLe3IJBX1U3VtX6qtoAXAM8UFX/HngQ+EQbthW4u7X3tm3a/geqqoZatSRpYMu5j/4PgeuTHGJuDX53698NnNP6rwduWF6JkqTlWLvwkJ+pqm8B32rtJ4FL3mDMPwC/OYTaJElD4CdjJalzBr0kdc6gl6TOGfSS1DmDXpI6Z9BLUucMeknqnEEvSZ0z6CWpcwa9JHXOoJekzhn0ktQ5g16SOmfQS1LnDHpJ6pxBL0mdM+glqXMGvSR1zqCXpM4Z9JLUOYNekjq3YNAneWeSv0ry10m+k+SPWv8FSR5KcijJV5Oc3vrf0bYPtf0bVnYKkqS3MsgV/f8FLq+qDwAXAR9JcinweeCmqnov8CKwrY3fBrzY+m9q4yRJI7Jg0NecH7fN09qjgMuB21v/HmBLa1/Vtmn7NyfJ0CqWJC3KQGv0SdYkeQQ4AtwHfB84WlWvtiGHgcnWngSeBmj7XwLOGWbRkqTBDRT0VfVaVV0ErAcuAX5puSdOsj3JdJLp2dnZ5b6cJOlNLOqum6o6CjwIfBAYT7K27VoPzLT2DHA+QNt/FvDCG7zWrqqaqqqpiYmJJZYvSVrIIHfdTCQZb+0x4MPAE8wF/ifasK3A3a29t23T9j9QVTXMoiVJg1u78BDOBfYkWcPcD4bbqurrSR4HvpLkPwP7gd1t/G7gvyc5BPw9cM0K1C1JGtCCQV9VjwKb3qD/SebW60/s/wfgN4dSnSRp2fxkrCR1zqCXpM4Z9JLUOYNekjpn0EtS5wx6SeqcQS9JnTPoJalzBr0kdc6gl6TODfK3biRJQ3TX/hl23nuQZ44e47zxMXZcsZEtmyYXPnCJDHpJOonu2j/DjXcc4NgrrwEwc/QYN95xAGDFwt6lG0k6iXbee/CnIX/csVdeY+e9B1fsnAa9JJ1Ezxw9tqj+YTDoJekkOm98bFH9w2DQS9JJtOOKjYydtuZ1fWOnrWHHFRtX7Jy+GStJJ9HxN1y960aSOrZl0+SKBvuJXLqRpM4Z9JLUOYNekjpn0EtS5wx6SepcqmrUNZBkFnhqGS/xbuDvhlTOKPUyD+hnLr3MA5zLqWi58/gXVTWx0KBTIuiXK8l0VU2Nuo7l6mUe0M9cepkHOJdT0cmah0s3ktQ5g16SOtdL0O8adQFD0ss8oJ+59DIPcC6nopMyjy7W6CVJb66XK3pJ0ptYtUGf5PwkDyZ5PMl3knx61DUtVZJ3JvmrJH/d5vJHo65pOZKsSbI/yddHXctyJPlBkgNJHkkyPep6liPJeJLbk3w3yRNJPjjqmhYrycb2b3H88aMknxl1XUuV5Pfb//fHktya5J0rdq7VunST5Fzg3Kp6OMnPA/uALVX1+IhLW7QkAc6sqh8nOQ34S+DTVfXtEZe2JEmuB6aAf15VHxt1PUuV5AfAVFWt+vu1k+wB/qKqbklyOnBGVR0ddV1LlWQNMAP866pazmdwRiLJJHP/z/9VVR1LchtwT1X9t5U436q9oq+qZ6vq4db+P8ATwMn7u59DVHN+3DZPa49V+RM4yXrgN4BbRl2L5iQ5C/gQsBugqv7fag75ZjPw/dUY8vOsBcaSrAXOAJ5ZqROt2qCfL8kGYBPw0GgrWbq23PEIcAS4r6pW61z+BPgD4B9HXcgQFPDNJPuSbB91MctwATAL/FlbUrslyZmjLmqZrgFuHXURS1VVM8AfAz8EngVeqqpvrtT5Vn3QJ/lnwNeAz1TVj0Zdz1JV1WtVdRGwHrgkyftGXdNiJfkYcKSq9o26liH5laq6GLgSuC7Jh0Zd0BKtBS4Gbq6qTcBPgBtGW9LStaWnjwN/PupalirJ2cBVzP0QPg84M8l/WKnzreqgb+vZXwO+VFV3jLqeYWi/Uj8IfGTUtSzBZcDH29r2V4DLk/yP0Za0dO2qi6o6AtwJXDLaipbsMHB43m+JtzMX/KvVlcDDVfX8qAtZhl8D/raqZqvqFeAO4N+s1MlWbdC3NzB3A09U1X8ZdT3LkWQiyXhrjwEfBr472qoWr6purKr1VbWBuV+tH6iqFbtKWUlJzmxv8tOWOX4deGy0VS1NVT0HPJ3k+LdPbwZW3U0L8/wWq3jZpvkhcGmSM1qWbWbufcYVsZq/M/Yy4D8CB9raNsB/qqp7RljTUp0L7Gl3EvwccFtVrepbEzuwDrhz7v8ga4EvV9U3RlvSsvwu8KW27PEkcO2I61mS9kP3w8DvjLqW5aiqh5LcDjwMvArsZwU/Jbtqb6+UJA1m1S7dSJIGY9BLUucMeknqnEEvSZ0z6CWpcwa9JHXOoJekzhn0ktS5/w+JUTkl5rwGCgAAAABJRU5ErkJggg==\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "t = np.array([2, 4, 6, 8])\n", + "#t = np.linspace(0, 10)\n", + "\n", + "pa = -20\n", + "pb = 90\n", + "pc = 800\n", + "\n", + "y = pa*t**2 + pb*t + pc\n", + "\n", + "\n", + "plt.scatter(t, y)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## How to use sklearn to solve linear problem?\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "a = 949.435260, b = 152.133484\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "from sklearn import linear_model\n", + "\n", + "# load data\n", + "d = datasets.load_diabetes()\n", + "\n", + "X = d.data[:, np.newaxis, 2]\n", + "Y = d.target\n", + "\n", + "# create regression model\n", + "regr = linear_model.LinearRegression()\n", + "regr.fit(X, Y)\n", + "\n", + "a, b = regr.coef_, regr.intercept_\n", + "print(\"a = %f, b = %f\" % (a, b))\n", + "\n", + "x_min = np.min(X)\n", + "x_max = np.max(X)\n", + "y_min = a * x_min + b\n", + "y_max = a * x_max + b\n", + "\n", + "plt.scatter(X, Y)\n", + "plt.plot([x_min, x_max], [y_min, y_max], 'r')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## How to use sklearn to fit polynomial function?" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([800., 90., -20.])" + ] + }, + "execution_count": 42, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Fitting polynomial functions\n", + "\n", + "from sklearn.preprocessing import PolynomialFeatures\n", + "from sklearn.linear_model import LinearRegression\n", + "from sklearn.pipeline import Pipeline\n", + "\n", + "t = np.array([2, 4, 6, 8])\n", + "\n", + "pa = -20\n", + "pb = 90\n", + "pc = 800\n", + "\n", + "y = pa*t**2 + pb*t + pc\n", + "\n", + "model = Pipeline([('poly', PolynomialFeatures(degree=2)),\n", + " ('linear', LinearRegression(fit_intercept=False))])\n", + "model = model.fit(t[:, np.newaxis], y)\n", + "model.named_steps['linear'].coef_\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## How to estimate some missing value by the model?\n" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Y_est = [148.6844971 167.17376752 174.36403934 195.93485483 109.65159289\n", + " 120.95059148 245.23957594 204.15230835 269.89193649 75.75459712\n", + " 241.13084918 104.51568444 141.49422527 126.08649992 208.26103511\n", + " 233.94057735 151.76604217 158.956314 161.01067738 228.8046689\n", + " 220.58721538 129.16804499 100.40695768 117.86904641 168.2009492\n", + " 226.75030552 114.78750134 163.06504076 113.76031965 119.92340979\n", + " 157.92913231 237.02212242 120.95059148 98.3525943 123.00495485\n", + " 205.17949004 95.27104923 153.82040555 130.19522668 81.91768726\n", + " 171.28249427 137.38549851 137.38549851 189.77176469 82.94486895]\n", + "Y_test = [198. 242. 232. 175. 93. 168. 275. 293. 281. 72. 140. 189. 181. 209.\n", + " 136. 261. 113. 131. 174. 257. 55. 84. 42. 146. 212. 233. 91. 111.\n", + " 152. 120. 67. 310. 94. 183. 66. 173. 72. 49. 64. 48. 178. 104.\n", + " 132. 220. 57.]\n", + "err = 8.437628, score = 0.422889\n", + "a = 953.024850, b = 152.544562\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAD8CAYAAAB5Pm/hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJzsnXt4FOX1xz/vhg0kYgkCCgQQ6g1FMFGgIFAFKqgopqJQL1V/VbHWqlgLBEohIkqUKkq9It5FDQpEFLyDWqgUuQQUAREFIYBcA0JCskne3x+zs9nLzOzs7mx2k7yf5+EhmZ2ZfWc2e+a85z3ne4SUEoVCoVDUX1yJHoBCoVAo4osy9AqFQlHPUYZeoVAo6jnK0CsUCkU9Rxl6hUKhqOcoQ69QKBT1HGXoFQqFop6jDL1CoVDUc5ShVygUinpOo0QPAKBly5ayY8eOiR6GQqFQ1ClWrVq1T0rZKtx+SWHoO3bsyMqVKxM9DIVCoahTCCG22dlPhW4UCoWinqMMvUKhUNRzwhp6IUQTIcQKIcRaIcR6IcR93u0vCSF+FEIUef9lebcLIcQMIcT3Qoh1Qohz430RCoVCoTDHToy+HBggpTwihHADS4UQ73tfGy2lfDto/0uA07z/fgM87f0/IjweDzt27ODYsWORHqowoEmTJrRr1w63253ooSgUilomrKGXmmD9Ee+vbu8/KxH7K4BXvMctF0JkCCHaSCl3RTKwHTt2cPzxx9OxY0eEEJEcqghCSsn+/fvZsWMHnTp1SvRwFApFLWMrRi+ESBFCFAF7gI+llP/zvvSANzwzXQjR2LstE9jud/gO77aIOHbsGC1atFBG3gGEELRo0ULNjhSKKClcU0yf/MV0yl1In/zFFK4pTvSQIsKWoZdSVkkps4B2QE8hxNnAOKAz0AM4ARgbyRsLIUYKIVYKIVbu3bvXbJ9ITqmwQN1LhSI6CtcUM27e1xSXlCGB4pIyxs37uk4Z+4iybqSUJcAS4GIp5S6pUQ68CPT07lYMtPc7rJ13W/C5Zkopu0spu7dqFTbfX6FQKBLCtA83UeapCthW5qli2oebEjSiyLGTddNKCJHh/TkNuAjYKIRo490mgBzgG+8hC4AbvNk3vYBDkcbn6yMdO3Zk3759Me+jUNRnkjFEsrOkLKLtyYidrJs2wMtCiBS0B8McKeV7QojFQohWgACKgD97918EXAp8D5QC/+f8sBUKRX1DD5Ho3rMeIgHIyY54mc8x2makUWxg1NtmpCVgNNER1qOXUq6TUmZLKbtJKc+WUk72bh8gpezq3Xa9lPKId7uUUt4hpTzF+3qd1TbYunUrnTt35qabbuL000/nuuuu45NPPqFPnz6cdtpprFixggMHDpCTk0O3bt3o1asX69atA2D//v0MGjSILl26cMstt6AlIWm89tpr9OzZk6ysLG677TaqqqrMhqBQNBiSNUQyevAZpLlTAraluVMYPfiMBI0ocpJC6yYso0ZBUZGz58zKgsceC7vb999/z1tvvcULL7xAjx49eP3111m6dCkLFizgwQcfpH379mRnZ1NYWMjixYu54YYbKCoq4r777qNv375MnDiRhQsX8vzzzwOwYcMGCgoKWLZsGW63m7/85S/Mnj2bG264wdnrUygSQOGaYqZ9uImdJWW0zUhj9OAzbHvjyRoi0ccf7XUlA3XD0CeQTp060bVrVwC6dOnCwIEDEULQtWtXtm7dyrZt25g7dy4AAwYMYP/+/Rw+fJgvvviCefPmATBkyBCaN28OwKeffsqqVavo0aMHAGVlZZx44okJuDKFwlliDb0kc4gkJzuzThn2YOqGobfheceLxo0b+352uVy+310uF5WVlRFXmkopufHGG5k6daqj41QoEo1V6MWOkRw9+IyABwXUvRBJsqJEzWKkX79+zJ49G4DPPvuMli1b8qtf/Yrf/va3vP766wC8//77HDx4EICBAwfy9ttvs2fPHgAOHDjAtm22lEYVigCSLUMl1tBLTnYmU6/sSmZGGgLIzEhj6pVd67QnnSzUDY8+icnLy+NPf/oT3bp1Iz09nZdffhmASZMmcc0119ClSxfOP/98OnToAMBZZ53FlClTGDRoENXV1bjdbp588klOPvnkRF6Goo6RjBkqToRe6nqIJFkR/tkgiaJ79+4yuPHIhg0bOPPMMxM0ovqJuqf1hz75iw2NamZGGstyByRgRKEPH9BCL8orjx9CiFVSyu7h9lMevUJRB0nGDJX6kJ1SX1GGXqGogyRrhooKvSQnajFWoaiD1IciHkXtoTx6haIOosIkikhQhl6hqKMkKkwSS/WrIjEoQ69QKGyTjGmdivCoGL0JJSUlPPXUU1Ede+mll1JSUhL1ezdt2tTy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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# load data\n", + "d = datasets.load_diabetes()\n", + "\n", + "N = d.target.shape[0]\n", + "N_train = int(N*0.9)\n", + "N_test = N - N_train\n", + "\n", + "X = d.data[:N_train, np.newaxis, 2]\n", + "Y = d.target[:N_train]\n", + "\n", + "X_test = d.data[N_train:, np.newaxis, 2]\n", + "Y_test = d.target[N_train:]\n", + "\n", + "# create regression model\n", + "regr = linear_model.LinearRegression()\n", + "regr.fit(X, Y)\n", + "\n", + "Y_est = regr.predict(X_test)\n", + "print(\"Y_est = \", Y_est)\n", + "print(\"Y_test = \", Y_test)\n", + "err = (Y_est - Y_test)**2\n", + "score = regr.score(X_test, Y_test)\n", + "print(\"err = %f, score = %f\" % (np.sqrt(np.sum(err))/N_test, score))\n", + "\n", + "\n", + "# plot data\n", + "a, b = regr.coef_, regr.intercept_\n", + "print(\"a = %f, b = %f\" % (a, b))\n", + "\n", + "x_min = np.min(X)\n", + "x_max = np.max(X)\n", + "y_min = a * x_min + b\n", + "y_max = a * x_max + b\n", + "\n", + "\n", + "plt.scatter(X, Y, label='train data')\n", + "plt.scatter(X_test, Y_test, label='test data')\n", + "plt.plot([x_min, x_max], [y_min, y_max], 'r', label='model')\n", + "plt.legend()\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "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.5.2" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/logistic_regression/Least_squares.py b/1_logistic_regression/Least_squares.py similarity index 53% rename from logistic_regression/Least_squares.py rename to 1_logistic_regression/Least_squares.py index bb99f64..70bb2fb 100644 --- a/logistic_regression/Least_squares.py +++ b/1_logistic_regression/Least_squares.py @@ -17,11 +17,7 @@ # version: 3.5.2 # --- -# # Linear regression -# -# - -# ## Least squares +# # Least squares # # A mathematical procedure for finding the best-fitting curve to a given set of points by minimizing the sum of the squares of the offsets ("the residuals") of the points from the curve. The sum of the squares of the offsets is used instead of the offset absolute values because this allows the residuals to be treated as a continuous differentiable quantity. However, because squares of the offsets are used, outlying points can have a disproportionate effect on the fit, a property which may or may not be desirable depending on the problem at hand. # @@ -45,7 +41,10 @@ Y = d.target # draw original data plt.scatter(X, Y) +plt.xlabel("X") +plt.ylabel("Y") plt.show() + # - # ### Theory @@ -108,6 +107,135 @@ x_max = np.max(X) y_min = coeff[0] * x_min + coeff[1] y_max = coeff[0] * x_max + coeff[1] +plt.scatter(X, Y, label='original data') +plt.plot([x_min, x_max], [y_min, y_max], 'r', label='model') +plt.legend() +plt.show() +# - + +# ## How to fit polynomial function? +# +# If we observe a missle at some time, then how to estimate the trajectory? Acoording the physical theory, the trajectory can be formulated as: +# $$ +# y = at^2 + bt + c +# $$ +# The we need at least three data to compute the parameters $a, b, c$. +# +# + +# + +t = np.array([2, 4, 6, 8]) +#t = np.linspace(0, 10) + +pa = -20 +pb = 90 +pc = 800 + +y = pa*t**2 + pb*t + pc + + +plt.scatter(t, y) +plt.show() +# - + +# ## How to use sklearn to solve linear problem? +# +# + +# + +from sklearn import linear_model + +# load data +d = datasets.load_diabetes() + +X = d.data[:, np.newaxis, 2] +Y = d.target + +# create regression model +regr = linear_model.LinearRegression() +regr.fit(X, Y) + +a, b = regr.coef_, regr.intercept_ +print("a = %f, b = %f" % (a, b)) + +x_min = np.min(X) +x_max = np.max(X) +y_min = a * x_min + b +y_max = a * x_max + b + plt.scatter(X, Y) plt.plot([x_min, x_max], [y_min, y_max], 'r') plt.show() +# - + +# ## How to use sklearn to fit polynomial function? + +# + +# Fitting polynomial functions + +from sklearn.preprocessing import PolynomialFeatures +from sklearn.linear_model import LinearRegression +from sklearn.pipeline import Pipeline + +t = np.array([2, 4, 6, 8]) + +pa = -20 +pb = 90 +pc = 800 + +y = pa*t**2 + pb*t + pc + +model = Pipeline([('poly', PolynomialFeatures(degree=2)), + ('linear', LinearRegression(fit_intercept=False))]) +model = model.fit(t[:, np.newaxis], y) +model.named_steps['linear'].coef_ + +# - + +# ## How to estimate some missing value by the model? +# + +# + +# load data +d = datasets.load_diabetes() + +N = d.target.shape[0] +N_train = int(N*0.9) +N_test = N - N_train + +X = d.data[:N_train, np.newaxis, 2] +Y = d.target[:N_train] + +X_test = d.data[N_train:, np.newaxis, 2] +Y_test = d.target[N_train:] + +# create regression model +regr = linear_model.LinearRegression() +regr.fit(X, Y) + +Y_est = regr.predict(X_test) +print("Y_est = ", Y_est) +print("Y_test = ", Y_test) +err = (Y_est - Y_test)**2 +score = regr.score(X_test, Y_test) +print("err = %f, score = %f" % (np.sqrt(np.sum(err))/N_test, score)) + + +# plot data +a, b = regr.coef_, regr.intercept_ +print("a = %f, b = %f" % (a, b)) + +x_min = np.min(X) +x_max = np.max(X) +y_min = a * x_min + b +y_max = a * x_max + b + + +plt.scatter(X, Y, label='train data') +plt.scatter(X_test, Y_test, label='test data') +plt.plot([x_min, x_max], [y_min, y_max], 'r', label='model') +plt.legend() +plt.show() +# - + + diff --git a/logistic_regression/Logistic_regression.ipynb b/1_logistic_regression/Logistic_regression.ipynb similarity index 100% rename from logistic_regression/Logistic_regression.ipynb rename to 1_logistic_regression/Logistic_regression.ipynb diff --git a/logistic_regression/demo1/3a - Linear regression 1D.ipynb b/1_logistic_regression/demo1/3a - Linear regression 1D.ipynb similarity index 100% rename from logistic_regression/demo1/3a - Linear regression 1D.ipynb rename to 1_logistic_regression/demo1/3a - Linear regression 1D.ipynb diff --git a/logistic_regression/demo1/3b - Linear regression 2D.ipynb b/1_logistic_regression/demo1/3b - Linear regression 2D.ipynb similarity index 100% rename from logistic_regression/demo1/3b - Linear regression 2D.ipynb rename to 1_logistic_regression/demo1/3b - Linear regression 2D.ipynb diff --git a/logistic_regression/demo1/4 - Logistic Regression.ipynb b/1_logistic_regression/demo1/4 - Logistic Regression.ipynb similarity index 100% rename from logistic_regression/demo1/4 - Logistic Regression.ipynb rename to 1_logistic_regression/demo1/4 - Logistic Regression.ipynb diff --git a/logistic_regression/demo1/data/artifical_lin.txt b/1_logistic_regression/demo1/data/artifical_lin.txt similarity index 100% rename from logistic_regression/demo1/data/artifical_lin.txt rename to 1_logistic_regression/demo1/data/artifical_lin.txt diff --git a/logistic_regression/demo1/data/artifical_lin_2.txt b/1_logistic_regression/demo1/data/artifical_lin_2.txt similarity index 100% rename from logistic_regression/demo1/data/artifical_lin_2.txt rename to 1_logistic_regression/demo1/data/artifical_lin_2.txt diff --git a/logistic_regression/demo1/data/breast-cancer-wisconsin.data b/1_logistic_regression/demo1/data/breast-cancer-wisconsin.data similarity index 100% rename from logistic_regression/demo1/data/breast-cancer-wisconsin.data rename to 1_logistic_regression/demo1/data/breast-cancer-wisconsin.data diff --git a/logistic_regression/demo1/ipython_notebook_config.py b/1_logistic_regression/demo1/ipython_notebook_config.py similarity index 100% rename from logistic_regression/demo1/ipython_notebook_config.py rename to 1_logistic_regression/demo1/ipython_notebook_config.py diff --git a/logistic_regression/demo1/utility.py b/1_logistic_regression/demo1/utility.py similarity index 100% rename from logistic_regression/demo1/utility.py rename to 1_logistic_regression/demo1/utility.py diff --git a/logistic_regression/linear models.ipynb b/1_logistic_regression/linear models.ipynb similarity index 100% rename from logistic_regression/linear models.ipynb rename to 1_logistic_regression/linear models.ipynb diff --git a/logistic_regression/linear_regression.py b/1_logistic_regression/linear_regression.py similarity index 100% rename from logistic_regression/linear_regression.py rename to 1_logistic_regression/linear_regression.py diff --git a/logistic_regression/logistic3.py b/1_logistic_regression/logistic3.py similarity index 100% rename from logistic_regression/logistic3.py rename to 1_logistic_regression/logistic3.py diff --git a/logistic_regression/logistic_demo.py b/1_logistic_regression/logistic_demo.py similarity index 100% rename from logistic_regression/logistic_demo.py rename to 1_logistic_regression/logistic_demo.py diff --git a/logistic_regression/Least_squares.ipynb b/logistic_regression/Least_squares.ipynb deleted file mode 100644 index 7cba3ac..0000000 --- a/logistic_regression/Least_squares.ipynb +++ /dev/null @@ -1,186 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Linear regression\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Least squares\n", - "\n", - "A mathematical procedure for finding the best-fitting curve to a given set of points by minimizing the sum of the squares of the offsets (\"the residuals\") of the points from the curve. The sum of the squares of the offsets is used instead of the offset absolute values because this allows the residuals to be treated as a continuous differentiable quantity. However, because squares of the offsets are used, outlying points can have a disproportionate effect on the fit, a property which may or may not be desirable depending on the problem at hand. \n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Show the data\n" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "%matplotlib inline\n", - "\n", - "import matplotlib.pyplot as plt\n", - "import numpy as np\n", - "import sklearn\n", - "from sklearn import datasets\n", - "\n", - "# load data\n", - "d = datasets.load_diabetes()\n", - "\n", - "X = d.data[:, 2]\n", - "Y = d.target\n", - "\n", - "# draw original data\n", - "plt.scatter(X, Y)\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Theory\n", - "For $N$ observation data:\n", - "$$\n", - "\\mathbf{X} = \\{x_1, x_2, ..., x_N \\} \\\\\n", - "\\mathbf{Y} = \\{y_1, y_2, ..., y_N \\}\n", - "$$\n", - "\n", - "We want to find the model which can predict the data. The simplest model is linear model, which has the form of \n", - "$$\n", - "y = ax + b\n", - "$$\n", - "\n", - "The purpose is to find parameters $a, b$ which best fit the model to the observation data. \n", - "\n", - "We use the sum of squares to measure the differences (loss function) between the model's prediction and observation data:\n", - "$$\n", - "L = \\sum_{i=1}^{N} (y_i - a x_i + b)^2\n", - "$$\n", - "\n", - "To make the loss function minimize, we can find the parameters:\n", - "$$\n", - "\\frac{\\partial L}{\\partial a} = -2 \\sum_{i=1}^{N} (y_i - a x_i - b) x_i \\\\\n", - "\\frac{\\partial L}{\\partial b} = -2 \\sum_{i=1}^{N} (y_i - a x_i - b)\n", - "$$\n", - "When the loss is minimized, therefore the partial difference is zero, then we can get:\n", - "$$\n", - "-2 \\sum_{i=1}^{N} (y_i - a x_i - b) x_i = 0 \\\\\n", - "-2 \\sum_{i=1}^{N} (y_i - a x_i - b) = 0 \\\\\n", - "$$\n", - "\n", - "We reoder the items as:\n", - "$$\n", - "a \\sum x_i^2 + b \\sum x_i = \\sum y_i x_i \\\\\n", - "a \\sum x_i + b N = \\sum y_i\n", - "$$\n", - "By solving the linear equation we can obtain the model parameters." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Program" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "a = 949.435260, b = 152.133484\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "N = X.shape[0]\n", - "\n", - "S_X2 = np.sum(X*X)\n", - "S_X = np.sum(X)\n", - "S_XY = np.sum(X*Y)\n", - "S_Y = np.sum(Y)\n", - "\n", - "A1 = np.array([[S_X2, S_X], \n", - " [S_X, N]])\n", - "B1 = np.array([S_XY, S_Y])\n", - "\n", - "coeff = np.linalg.inv(A1).dot(B1)\n", - "\n", - "print('a = %f, b = %f' % (coeff[0], coeff[1]))\n", - "\n", - "x_min = np.min(X)\n", - "x_max = np.max(X)\n", - "y_min = coeff[0] * x_min + coeff[1]\n", - "y_max = coeff[0] * x_max + coeff[1]\n", - "\n", - "plt.scatter(X, Y)\n", - "plt.plot([x_min, x_max], [y_min, y_max], 'r')\n", - "plt.show()" - ] - } - ], - "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.5.2" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -}