{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Example for Linear Regression\n",
    "- story (Procedure of applied ML)\n",
    "    - Preparation\n",
    "        - Make the purpose (goal) clear.\n",
    "        - Make the task concrete.\n",
    "        - Check the possibilities to replace the existing services.\n",
    "    - Prepare the dataset\n",
    "    - Select a model\n",
    "    - Continue learning, evaluation and tuning\n",
    "- ref.\n",
    "    - [Linear Regression Example](https://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html#sphx-glr-auto-examples-linear-model-plot-ols-py)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'numpy.ndarray'>\n",
      "(442, 10)\n",
      "[[ 0.03807591  0.05068012  0.06169621  0.02187235 -0.0442235  -0.03482076\n",
      "  -0.04340085 -0.00259226  0.01990842 -0.01764613]\n",
      " [-0.00188202 -0.04464164 -0.05147406 -0.02632783 -0.00844872 -0.01916334\n",
      "   0.07441156 -0.03949338 -0.06832974 -0.09220405]\n",
      " [ 0.08529891  0.05068012  0.04445121 -0.00567061 -0.04559945 -0.03419447\n",
      "  -0.03235593 -0.00259226  0.00286377 -0.02593034]\n",
      " [-0.08906294 -0.04464164 -0.01159501 -0.03665645  0.01219057  0.02499059\n",
      "  -0.03603757  0.03430886  0.02269202 -0.00936191]\n",
      " [ 0.00538306 -0.04464164 -0.03638469  0.02187235  0.00393485  0.01559614\n",
      "   0.00814208 -0.00259226 -0.03199144 -0.04664087]]\n",
      "['age', 'sex', 'bmi', 'bp', 's1', 's2', 's3', 's4', 's5', 's6']\n"
     ]
    }
   ],
   "source": [
    "# Prepare the dataset\n",
    "# Load the diabetes dataset\n",
    "# ref. https://scikit-learn.org/stable/datasets/index.html#diabetes-dataset\n",
    "\n",
    "from sklearn import datasets\n",
    "diabetes = datasets.load_diabetes()\n",
    "\n",
    "orig_X = diabetes.data # get a feature matrix (input dataset)\n",
    "print(type(orig_X))    # check the type\n",
    "print(orig_X.shape)    # check the size of feature matrix\n",
    "print(orig_X[:5])      # display the first 5 samples\n",
    "print(diabetes.feature_names)    # display the name of each element of feature"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(442, 1)\n",
      "[[ 0.06169621]\n",
      " [-0.05147406]\n",
      " [ 0.04445121]\n",
      " [-0.01159501]\n",
      " [-0.03638469]]\n"
     ]
    }
   ],
   "source": [
    "# Here, use just one feature 'bmi' for simple exercise\n",
    "import numpy as np\n",
    "X = diabetes.data[:, np.newaxis, 2]\n",
    "print(X.shape)\n",
    "print(X[:5])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(442,)\n",
      "[151.  75. 141. 206. 135.]\n"
     ]
    }
   ],
   "source": [
    "y = diabetes.target\n",
    "print(y.shape)\n",
    "print(y[:5])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(400, 1)\n",
      "(42, 1)\n",
      "(400,)\n",
      "(42,)\n"
     ]
    }
   ],
   "source": [
    "# split the dataset into training and testing set\n",
    "num_of_training = 400\n",
    "\n",
    "X_train = X[:num_of_training]\n",
    "X_test = X[num_of_training:]\n",
    "\n",
    "y_train = y[:num_of_training]\n",
    "y_test = y[num_of_training:]\n",
    "\n",
    "print(X_train.shape)\n",
    "print(X_test.shape)\n",
    "print(y_train.shape)\n",
    "print(y_test.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[196.51241167 175.        ]\n",
      " [109.98667708  93.        ]\n",
      " [121.31742804 168.        ]\n",
      " [245.95568858 275.        ]\n",
      " [204.75295782 293.        ]\n",
      " [270.67732703 281.        ]\n",
      " [ 75.99442421  72.        ]\n",
      " [241.8354155  140.        ]\n",
      " [104.83633574 189.        ]\n",
      " [141.91879342 181.        ]\n",
      " [126.46776938 209.        ]\n",
      " [208.8732309  136.        ]\n",
      " [234.62493762 261.        ]\n",
      " [152.21947611 113.        ]\n",
      " [159.42995399 131.        ]\n",
      " [161.49009053 174.        ]\n",
      " [229.47459628 257.        ]\n",
      " [221.23405012  55.        ]\n",
      " [129.55797419  84.        ]\n",
      " [100.71606266  42.        ]\n",
      " [118.22722323 146.        ]\n",
      " [168.70056841 212.        ]\n",
      " [227.41445974 233.        ]\n",
      " [115.13701842  91.        ]\n",
      " [163.55022706 111.        ]\n",
      " [114.10695016 152.        ]\n",
      " [120.28735977 120.        ]\n",
      " [158.39988572  67.        ]\n",
      " [237.71514243 310.        ]\n",
      " [121.31742804  94.        ]\n",
      " [ 98.65592612 183.        ]\n",
      " [123.37756458  66.        ]\n",
      " [205.78302609 173.        ]\n",
      " [ 95.56572131  72.        ]\n",
      " [154.27961264  49.        ]\n",
      " [130.58804246  64.        ]\n",
      " [ 82.17483382  48.        ]\n",
      " [171.79077322 178.        ]\n",
      " [137.79852034 104.        ]\n",
      " [137.79852034 132.        ]\n",
      " [190.33200206 220.        ]\n",
      " [ 83.20490209  57.        ]]\n"
     ]
    }
   ],
   "source": [
    "# Select a model\n",
    "# => Linear Regression\n",
    "\n",
    "from sklearn import linear_model\n",
    "\n",
    "# Create linear regression object\n",
    "regr = linear_model.LinearRegression()\n",
    "\n",
    "# Train the model using the training set\n",
    "regr.fit(X_train, y_train)\n",
    "\n",
    "# Make predictions using the testing set\n",
    "predicted = regr.predict(X_test)\n",
    "\n",
    "# Check the predictions vs true answer\n",
    "print(np.c_[predicted, y_test])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[ -21.51241167  -16.98667708   46.68257196   29.04431142   88.24704218\n",
      "   10.32267297   -3.99442421 -101.8354155    84.16366426   39.08120658\n",
      "   82.53223062  -72.8732309    26.37506238  -39.21947611  -28.42995399\n",
      "   12.50990947   27.52540372 -166.23405012  -45.55797419  -58.71606266\n",
      "   27.77277677   43.29943159    5.58554026  -24.13701842  -52.55022706\n",
      "   37.89304984   -0.28735977  -91.39988572   72.28485757  -27.31742804\n",
      "   84.34407388  -57.37756458  -32.78302609  -23.56572131 -105.27961264\n",
      "  -66.58804246  -34.17483382    6.20922678  -33.79852034   -5.79852034\n",
      "   29.66799794  -26.20490209]\n"
     ]
    }
   ],
   "source": [
    "# Check the differences (errors)\n",
    "print(y_test - predicted)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1890.1633693291935\n",
      "45.00388974593318\n"
     ]
    }
   ],
   "source": [
    "# Check the sum of absolute error\n",
    "print(sum(np.abs(y_test - predicted)))\n",
    "\n",
    "# MAE (Mean Absolute Error)\n",
    "print(sum(np.abs(y_test - predicted)) / len(X_test))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAm0AAAJWCAYAAAAKtrDQAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Il7ecAAAACXBIWXMAAAsTAAALEwEAmpwYAABYNElEQVR4nO3deXycZbn/8e+V0oWUrlBKaZsZTmVHKJBTyyIUOGwqBQQBGbWImqICR9Tzc4nIOnoUj4CgQlBbkBFQkFXZREB2SIGilKWFZtIWSqGlC6SUtrl+fzyTOElmkplk9vm8X6+8krnvJ5PrySTpt/fz3Pdt7i4AAACUtppiFwAAAIC+EdoAAADKAKENAACgDBDaAAAAygChDQAAoAwQ2gAAAMrAFsUuIN+22WYbD4fDxS4DAACgT/PmzXvH3cel6qv40BYOh9Xc3FzsMgAAAPpkZvF0fVweBQAAKAOENgAAgDJAaAMAACgDhDYAAIAyQGgDAAAoA4Q2AACAMkBoAwAAKAOENgAAgDJQ8YvrZmPDhg1atWqV1q1bp82bNxe7HFSxQYMGacSIERo7dqyGDh1a7HIAACWA0JawYcMGtba2asyYMQqHwxo8eLDMrNhloQq5uzZu3Ki1a9eqtbVVdXV1BDcAAJdHO6xatUpjxozRNttsoyFDhhDYUDRmpiFDhmibbbbRmDFjtGrVqmKXBAAoAYS2hHXr1mnkyJHFLgPoYuTIkVq3bl2xywAAlABCW8LmzZs1ePDgYpcBdDF48GDurwQASCK0dcElUZQafiYBAB0IbQAAAGWA0AYAAFAGCG0oK+FwWOFwuEvb3LlzZWaaO3duUWrKVrnVCwAoDYQ2QKnDIAAApYTFdVH2jj/+eE2fPl0TJkwodikAAOQNoQ1lb9SoURo1alSxywAAIK+4PIouWlpaZGY67bTT9PLLL+u4447T2LFjNXz4cB144IG67777uhyffH/WPffcoxkzZmjUqFFdlqrYtGmTfvWrX2n69OkaOXKkamtrtffee+vKK69Ue3t7jxrcXVdeeaV23313DRs2TBMnTtSZZ56pNWvWpKy5t3vEli5dqrPPPls77rijttxyS40dO1bTpk3TRRddJEl66KGHZGaKx+OKx+Mys8630047rctzvfzyyzrttNM0efJkDRkyROPHj9epp56qV155JWVdixYt0mc+8xmNGTNGw4cP1/7776+//OUvvX37AWBAYrGYwuGwampqFA6HFYvFil0ScoiRNqS0ePFi7bfffvroRz+q2bNn680339RNN92ko48+Wn/4wx908skndzn+5ptv1j333KOjjz5aZ5xxhuLxuCRp48aNOuaYY3Tvvfdq55131qmnnqphw4bpwQcf1FlnnaWnnnpKv//977s81ze+8Q394he/0IQJE9TQ0KDBgwfr9ttv11NPPaUPP/xQQ4YMyegcmpubdeSRR2rVqlU66KCD9OlPf1ptbW1asGCBzj//fJ177rkKh8M677zzdNlll3V+7Q5Tp07t/Piee+7Rpz/96c7z+chHPqKlS5fqz3/+s/7yl7/owQcf1D777NN5/MKFC7Xffvtp5cqVOvroozV16lQtWrRIxx13nI4++ugsXgkAyEwsFlNDQ4Pa2tokSfF4XA0NDZKkSCRSzNKQK+5e0W/77ruvZ2LBggUZHVfpFi9e7JJckn/729/u0vfMM8/4Flts4aNHj/Y1a9a4u/ucOXNckpuZ33333T2e77zzznNJfuaZZ/qmTZs62zdt2uSnn366S/Lbbruts/2xxx5zST5lyhRfuXJlZ/v69et9+vTpLslDoVCXr9FRw5w5czrbNmzY4OFw2CV5LBbrUdeSJUu6PA6FQj2et8OqVat89OjRvvXWW/uLL77Ype+f//ynDx8+3Pfee+8u7YcffrhL8ssuu6xL+2233db5/U2utzf8bALIRCgU6vz7kvyW7m8bSpOkZk+Tabg8mgGz8nnLlVGjRumHP/xhl7b6+npFIhGtXr1at956a5e+Y489VkcddVSXtvb2dl1xxRXabrvtdOmll2rQoEGdfYMGDdL//d//ycy6DN/PmTNHktTY2KixY8d2tg8bNkw//vGPM67/zjvvVEtLi2bOnKlTTz21R/+kSZMyfq7rrrtOq1ev1gUXXKDddtutS98ee+yhr3zlK3ruuee0YMECScEl2fvvv1877LCDzjzzzC7HH3vssTr44IMz/toAkKnW1tas2lF+uDyKlPbZZx+NGDGiR/uMGTN07bXX6rnnntOsWbM626dNm9bj2FdffVWrVq3SjjvuqIsvvjjl19lyyy310ksvdT5+9tlnJSllsDnwwAO7BL/ePPnkk5KUk0uRTzzxhCRp/vz5Ov/883v0v/rqq5Kkl156Sbvttpuee+65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1atX92gbNWqUpCB0jRw5st81dTzPW2+9lbJ/+fLlPdpWrFihX/ziF9pjjz30+OOPa8SIEV36b7jhhqzrOPfcczVkyBA1Nzdr11137dI3e/bstBMigGpSV1eX8j9EjEADveOetgJK9wepVP5QDRo0SJK6XB7M1pgxY7RkyZIe7Zs3b9bzzz/fo3369OmSpEceeaTfX1OSRowYoY985CNatmyZXnvttR79HUtyJHv99dfV3t6uI444okdgW7p0qV5//fUen9PX92jRokXabbfdegS29vZ2Pfroo5meDlDRotGoamtru7TV1tYqGo0WqSKgPBDaCqjU/1CNGTNGZjagkb9p06aptbVV9913X5f2iy++OOX/rM8880wNHjxY55xzjl599dUe/R9++GHGge6LX/yi2tvb9Z3vfKfLumyLFy/WL37xix7HdyzT8eijj3YJYe+9956+8pWvpBwx3HrrrSWlHx0Nh8NauHBhl/Xl3F3nn3++FixYkNF5AJUuEomoqalJoVBIZqZQKKSmpqayuk0EKAYujxZQxx+kxsZGtba2qq6uTtFotGT+UG211Vb62Mc+pkceeUSRSEQ77bSTBg0apJkzZ2rPPffM6Dm+/e1v695779Wxxx6rk08+WWPHjtXjjz+uxYsXa8aMGT1GvHbZZRf97ne/0+mnn67dd99dRx11lHbaaSdt3LhRra2teuSRRzRu3Di9/PLLfX7tb33rW7rtttt0yy23aJ999tGRRx6p1atX649//KMOOugg3XHHHV2O32677XTKKafoxhtv1NSpU3XEEUdozZo1uv/++zVs2DBNnTq1x+jgzjvvrIkTJ+rGG2/U4MGDO//R+fznP69QKKRzzjlHZ5xxhvbee2+dcMIJGjx4sB577DEtWLBAxxxzjO68886Mvo9ApYtEIiXztw8oG+nWAqmUN9Zpy87ChQv9U5/6lI8dO9bNzCX5nDlz3L3vNco63H777b7vvvv60KFDfezYsX7yySd7S0tLynXaOrzwwgs+a9Ysr6ur8yFDhviYMWN8991394aGBn/ggQcyrn/NmjV+zjnn+Pbbb+9Dhw71nXfe2X/2s5/5a6+9lnKdtvfff9+///3v+5QpU3zo0KE+adIk/9rXvubvvPOOH3zwwR78inT19NNP+6GHHuojR47s/B49+OCDnf1z5szxvfbay2tra33rrbf2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\n",
      "text/plain": [
       "<Figure size 720x720 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Plot testing set and predictions\n",
    "%matplotlib inline\n",
    "import matplotlib.pyplot as plt\n",
    "fig, ax = plt.subplots(1, 1, figsize=(10, 10))\n",
    "ax.scatter(X_test, y_test,  color='black', label='true data')\n",
    "ax.plot(X_test, predicted, color='blue', linewidth=3, label='predicted')\n",
    "ax.legend(loc='best', fontsize=20)\n",
    "ax.set_xlabel('bmi', fontsize=20)\n",
    "ax.set_ylabel('disease progression', fontsize=20)\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "coefficients:  [955.70303385]\n",
      "intercept:  153.00018395675963\n"
     ]
    }
   ],
   "source": [
    "# Check the model (obtained parameters)\n",
    "print('coefficients: ', regr.coef_)\n",
    "print('intercept: ', regr.intercept_)"
   ]
  },
  {
   "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.9.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
