{"cells":[{"cell_type":"markdown","metadata":{"id":"DgfZQlZZwlHa"},"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":{"id":"z3aufhK-wlHd","outputId":"28f6b8f4-0716-43d5-9f2c-f0c6d35ae851","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1646967667390,"user_tz":-540,"elapsed":379,"user":{"displayName":"TOMA Naruaki","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"11747312442870110137"}}},"outputs":[{"output_type":"stream","name":"stdout","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","source":["# convert np.ndarray to pd.dataframe for readability\n","\n","import pandas as pd\n","df = pd.DataFrame(orig_X, columns=diabetes.feature_names)\n","df.head()"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":204},"id":"3Wt9wD8q6Mhy","executionInfo":{"status":"ok","timestamp":1646967667892,"user_tz":-540,"elapsed":507,"user":{"displayName":"TOMA Naruaki","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"11747312442870110137"}},"outputId":"ebb56a8d-0647-4e53-80a5-957c708ab78c"},"execution_count":2,"outputs":[{"output_type":"execute_result","data":{"text/html":["\n","  <div id=\"df-89d5ec02-5539-4561-bd51-cd969b72bb44\">\n","    <div class=\"colab-df-container\">\n","      <div>\n","<style scoped>\n","    .dataframe tbody tr th:only-of-type {\n","        vertical-align: middle;\n","    }\n","\n","    .dataframe tbody tr th {\n","        vertical-align: top;\n","    }\n","\n","    .dataframe thead th {\n","        text-align: right;\n","    }\n","</style>\n","<table border=\"1\" class=\"dataframe\">\n","  <thead>\n","    <tr style=\"text-align: right;\">\n","      <th></th>\n","      <th>age</th>\n","      <th>sex</th>\n","      <th>bmi</th>\n","      <th>bp</th>\n","      <th>s1</th>\n","      <th>s2</th>\n","      <th>s3</th>\n","      <th>s4</th>\n","      <th>s5</th>\n","      <th>s6</th>\n","    </tr>\n","  </thead>\n","  <tbody>\n","    <tr>\n","      <th>0</th>\n","      <td>0.038076</td>\n","      <td>0.050680</td>\n","      <td>0.061696</td>\n","      <td>0.021872</td>\n","      <td>-0.044223</td>\n","      <td>-0.034821</td>\n","      <td>-0.043401</td>\n","      <td>-0.002592</td>\n","      <td>0.019908</td>\n","      <td>-0.017646</td>\n","    </tr>\n","    <tr>\n","      <th>1</th>\n","      <td>-0.001882</td>\n","      <td>-0.044642</td>\n","      <td>-0.051474</td>\n","      <td>-0.026328</td>\n","      <td>-0.008449</td>\n","      <td>-0.019163</td>\n","      <td>0.074412</td>\n","      <td>-0.039493</td>\n","      <td>-0.068330</td>\n","      <td>-0.092204</td>\n","    </tr>\n","    <tr>\n","      <th>2</th>\n","      <td>0.085299</td>\n","      <td>0.050680</td>\n","      <td>0.044451</td>\n","      <td>-0.005671</td>\n","      <td>-0.045599</td>\n","      <td>-0.034194</td>\n","      <td>-0.032356</td>\n","      <td>-0.002592</td>\n","      <td>0.002864</td>\n","      <td>-0.025930</td>\n","    </tr>\n","    <tr>\n","      <th>3</th>\n","      <td>-0.089063</td>\n","      <td>-0.044642</td>\n","      <td>-0.011595</td>\n","      <td>-0.036656</td>\n","      <td>0.012191</td>\n","      <td>0.024991</td>\n","      <td>-0.036038</td>\n","      <td>0.034309</td>\n","      <td>0.022692</td>\n","      <td>-0.009362</td>\n","    </tr>\n","    <tr>\n","      <th>4</th>\n","      <td>0.005383</td>\n","      <td>-0.044642</td>\n","      <td>-0.036385</td>\n","      <td>0.021872</td>\n","      <td>0.003935</td>\n","      <td>0.015596</td>\n","      <td>0.008142</td>\n","      <td>-0.002592</td>\n","      <td>-0.031991</td>\n","      <td>-0.046641</td>\n","    </tr>\n","  </tbody>\n","</table>\n","</div>\n","      <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-89d5ec02-5539-4561-bd51-cd969b72bb44')\"\n","              title=\"Convert this dataframe to an interactive table.\"\n","              style=\"display:none;\">\n","        \n","  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n","       width=\"24px\">\n","    <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\n","    <path d=\"M18.56 5.44l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94zm-11 1L8.5 8.5l.94-2.06 2.06-.94-2.06-.94L8.5 2.5l-.94 2.06-2.06.94zm10 10l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94z\"/><path d=\"M17.41 7.96l-1.37-1.37c-.4-.4-.92-.59-1.43-.59-.52 0-1.04.2-1.43.59L10.3 9.45l-7.72 7.72c-.78.78-.78 2.05 0 2.83L4 21.41c.39.39.9.59 1.41.59.51 0 1.02-.2 1.41-.59l7.78-7.78 2.81-2.81c.8-.78.8-2.07 0-2.86zM5.41 20L4 18.59l7.72-7.72 1.47 1.35L5.41 20z\"/>\n","  </svg>\n","      </button>\n","      \n","  <style>\n","    .colab-df-container {\n","      display:flex;\n","      flex-wrap:wrap;\n","      gap: 12px;\n","    }\n","\n","    .colab-df-convert {\n","      background-color: #E8F0FE;\n","      border: none;\n","      border-radius: 50%;\n","      cursor: pointer;\n","      display: none;\n","      fill: #1967D2;\n","      height: 32px;\n","      padding: 0 0 0 0;\n","      width: 32px;\n","    }\n","\n","    .colab-df-convert:hover {\n","      background-color: #E2EBFA;\n","      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n","      fill: #174EA6;\n","    }\n","\n","    [theme=dark] .colab-df-convert {\n","      background-color: #3B4455;\n","      fill: #D2E3FC;\n","    }\n","\n","    [theme=dark] .colab-df-convert:hover {\n","      background-color: #434B5C;\n","      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n","      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n","      fill: #FFFFFF;\n","    }\n","  </style>\n","\n","      <script>\n","        const buttonEl =\n","          document.querySelector('#df-89d5ec02-5539-4561-bd51-cd969b72bb44 button.colab-df-convert');\n","        buttonEl.style.display =\n","          google.colab.kernel.accessAllowed ? 'block' : 'none';\n","\n","        async function convertToInteractive(key) {\n","          const element = document.querySelector('#df-89d5ec02-5539-4561-bd51-cd969b72bb44');\n","          const dataTable =\n","            await google.colab.kernel.invokeFunction('convertToInteractive',\n","                                                     [key], {});\n","          if (!dataTable) return;\n","\n","          const docLinkHtml = 'Like what you see? Visit the ' +\n","            '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n","            + ' to learn more about interactive tables.';\n","          element.innerHTML = '';\n","          dataTable['output_type'] = 'display_data';\n","          await google.colab.output.renderOutput(dataTable, element);\n","          const docLink = document.createElement('div');\n","          docLink.innerHTML = docLinkHtml;\n","          element.appendChild(docLink);\n","        }\n","      </script>\n","    </div>\n","  </div>\n","  "],"text/plain":["        age       sex       bmi        bp        s1        s2        s3  \\\n","0  0.038076  0.050680  0.061696  0.021872 -0.044223 -0.034821 -0.043401   \n","1 -0.001882 -0.044642 -0.051474 -0.026328 -0.008449 -0.019163  0.074412   \n","2  0.085299  0.050680  0.044451 -0.005671 -0.045599 -0.034194 -0.032356   \n","3 -0.089063 -0.044642 -0.011595 -0.036656  0.012191  0.024991 -0.036038   \n","4  0.005383 -0.044642 -0.036385  0.021872  0.003935  0.015596  0.008142   \n","\n","         s4        s5        s6  \n","0 -0.002592  0.019908 -0.017646  \n","1 -0.039493 -0.068330 -0.092204  \n","2 -0.002592  0.002864 -0.025930  \n","3  0.034309  0.022692 -0.009362  \n","4 -0.002592 -0.031991 -0.046641  "]},"metadata":{},"execution_count":2}]},{"cell_type":"code","execution_count":3,"metadata":{"id":"DCEJIfwewlHe","outputId":"d39cdb8c-0e75-432d-aea7-449c91c6bd65","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1646967667893,"user_tz":-540,"elapsed":16,"user":{"displayName":"TOMA Naruaki","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"11747312442870110137"}}},"outputs":[{"output_type":"stream","name":"stdout","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":4,"metadata":{"id":"fN2HbrYQwlHe","outputId":"b4fce0bb-3a0a-41d3-bb96-f2b2d52f9ad0","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1646967667893,"user_tz":-540,"elapsed":11,"user":{"displayName":"TOMA Naruaki","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"11747312442870110137"}}},"outputs":[{"output_type":"stream","name":"stdout","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":5,"metadata":{"id":"E6y7XKmwwlHf","outputId":"d254782d-36f1-4ec4-a01d-b4ecd068569c","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1646967667894,"user_tz":-540,"elapsed":9,"user":{"displayName":"TOMA Naruaki","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"11747312442870110137"}}},"outputs":[{"output_type":"stream","name":"stdout","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":6,"metadata":{"id":"bmu3rUCzwlHf","outputId":"ce6dcd3e-3f4e-49a2-d1b0-50b3f2fb3bda","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1646967668246,"user_tz":-540,"elapsed":358,"user":{"displayName":"TOMA Naruaki","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"11747312442870110137"}}},"outputs":[{"output_type":"stream","name":"stdout","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":7,"metadata":{"id":"nbvDgCwHwlHf","outputId":"4f0d7d78-c8ab-4152-fe3a-f2ab3c20c263","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1646967668246,"user_tz":-540,"elapsed":11,"user":{"displayName":"TOMA Naruaki","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"11747312442870110137"}}},"outputs":[{"output_type":"stream","name":"stdout","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":8,"metadata":{"id":"hluLIWAzwlHg","outputId":"6f40b101-5b5f-4561-e645-77a7a62ed1c6","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1646967668247,"user_tz":-540,"elapsed":8,"user":{"displayName":"TOMA Naruaki","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"11747312442870110137"}}},"outputs":[{"output_type":"stream","name":"stdout","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":9,"metadata":{"id":"wpIYL415wlHg","outputId":"a77c1a01-cbf8-4418-8a20-0187876b7e0d","colab":{"base_uri":"https://localhost:8080/","height":615},"executionInfo":{"status":"ok","timestamp":1646967668664,"user_tz":-540,"elapsed":422,"user":{"displayName":"TOMA Naruaki","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"11747312442870110137"}}},"outputs":[{"output_type":"display_data","data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAAm0AAAJWCAYAAAAKtrDQAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOzdeXycZbn/8c+V0qZNlzQppZQlM7WyLwWMUFqEUkABZRNEIWorakBlKefo7xyMCAXGXRFBDoaDBWFUFIUCStEDZZUiaaEgRaDYJIAt0KYLJd3SXL8/nklImpkkTzuZ9ft+vfKic99PJldDG75cz3Pft7k7IiIiIpLbSrJdgIiIiIj0TaFNREREJA8otImIiIjkAYU2ERERkTyg0CYiIiKSBxTaRERERPLATtkuYKDtvPPOHo1Gs12GiIiISJ8WLly40t3HJpsr+NAWjUZpaGjIdhkiIiIifTKzplRzuj0qIiIikgcU2kRERETygEKbiIiISB5QaBMRERHJAwptIiIiInlAoU1EREQkDyi0iYiIiOQBhTYRERGRPFDwm+uGsWnTJlpaWnj33XfZunVrtsuRIjZo0CBGjhxJZWUlpaWl2S5HRERygEJbwqZNm2hubqaiooJoNMrgwYMxs2yXJUXI3dmyZQvr1q2jubmZqqoqBTcREdHt0Q4tLS1UVFSw8847M2TIEAU2yRozY8iQIey8885UVFTQ0tKS7ZJERCQHKLQlvPvuu4waNSrbZYh0M2rUKN59991slyEiIjlAoS1h69atDB48ONtliHQzePBgPV8pIiKAQls3uiUquUZ/JkVEpINCm4iIiEgeUGgTERERyQMKbZJXotEo0Wi029itt96KmXHrrbdmpaaw8q1eERHJDQptIiQPgyIiIrlEm+tK3jvjjDOYPHky48ePz3YpIiIiA0ahTfJeeXk55eXl2S5DRERkQOn2qHTT2NiImTFz5kz++c9/cvrpp1NZWcnw4cM56qij+Mtf/tLt+q7PZ82bN49p06ZRXl7ebauKtrY2brzxRiZPnsyoUaMoKyvj0EMP5YYbbqC9vb1HDe7ODTfcwAEHHMDQoUPZfffdufDCC1m7dm3Smnt7RuyNN97g4osvZq+99mLYsGFUVlZy+OGHc/XVVwPwyCOPYGY0NTXR1NSEmXV+zJw5s9t7/fOf/2TmzJnsueeeDBkyhHHjxnHuuefy8ssvJ61r6dKlfOpTn6KiooLhw4czZcoU/vSnP/X27RcR2SHxeJxoNEpJSQnRaJR4PJ7tkiSN1GmTpJYtW8aRRx7JQQcdxPnnn8/y5cu58847Oemkk/j1r3/Npz/96W7X33XXXcybN4+TTjqJCy64gKamJgC2bNnCKaecwoMPPsg+++zDueeey9ChQ5k/fz4XXXQRTz/9NLfffnu395o1axY/+9nPGD9+PLW1tQwePJi5c+fy9NNPs3nzZoYMGdKv30NDQwMf+9jHaGlp4eijj+aTn/wkra2tLFmyhCuvvJLLL7+caDTKFVdcwU9/+tPOr93hkEMO6fz1vHnz+OQnP9n5+/ngBz/IG2+8wR//+Ef+9Kc/MX/+fA477LDO61999VWOPPJIVq1axUknncQhhxzC0qVLOf300znppJPC/csQEemHeDxObW0tra2tADQ1NVFbWwtATU1NNkuTdHH3gv740Ic+5P2xZMmSfl1X6JYtW+aAA/71r3+929wzzzzjO+20k48ePdrXrl3r7u5z5sxxwM3MH3jggR7vd8UVVzjgF154obe1tXWOt7W1+XnnneeA33PPPZ3jTz75pAM+ceJEX7VqVef4hg0bfPLkyQ54JBLp9jU6apgzZ07n2KZNmzwajTrg8Xi8R12vv/56t9eRSKTH+3ZoaWnx0aNH+5gxY/zFF1/sNvfCCy/48OHD/dBDD+02fsIJJzjgP/3pT7uN33PPPZ3f36719kZ/NkWkPyKRSOfPl64fqX62SW4CGjxFptHt0X4wy5+PdCkvL+fb3/52t7Hq6mpqampYs2YNd999d7e50047jRNPPLHbWHt7O9dffz277ror1157LYMGDeqcGzRoED/+8Y8xs27t+zlz5gBQV1dHZWVl5/jQoUP57ne/2+/677vvPhobGzn11FM599xze8zvscce/X6vX/3qV6xZs4bZs2ez//77d5s78MAD+fKXv8yzzz7LkiVLgOCW7F//+lcmTJjAhRde2O360047jWOOOabfX1tEpL+am5tDjUv+0e1RSeqwww5j5MiRPcanTZvGbbfdxrPPPsuMGTM6xw8//PAe177yyiu0tLSw1157cc011yT9OsOGDeOll17qfL1o0SKApMHmqKOO6hb8erNgwQKAtNyKfOqppwBYvHgxV155ZY/5V155BYCXXnqJ/fffn2effbbXeqdNm8ajjz66w3WJiHRVVVXV+WjKtuNSGBTaJKlx48YlHd91110BeiwK6BjvatWqVUDwfNfs2bNTfq3169d3/rrjfZN9/Z122omdd965j8oDa9asAWD33Xfv1/W96fh93Hzzzb1e1/H76O33AMm/VyIiOyoWi3V7pg2grKyMWCyWxaoknXR7tB/c8+cjXd56662k4ytWrADoscVGsoPNO64544wzen3ucNmyZT0+J9nXb2trY+XKlf2qf/To0QC8+eab/bq+Nx01LV68uNffR0fnsbffA7z/PRQRSaeamhrq6+uJRCKYGZFIhPr6ei1CKCAKbZLUokWLePfdd3uMP/LIIwAceuihfb7Hvvvuy+jRo1mwYAFbtmzp19ftWIGZ7PbhE088wdatW/v1PpMnTwbggQce6Nf1gwYNSvneHe/1+OOP9+u9Or43qert+B6KiKRbTU0NjY2NtLe309jYqMBWYBTaJKm1a9dy1VVXdRtraGggHo9TXl7OGWec0ed77LTTTlx00UUsX76ciy++mA0bNvS4Zvny5Z0P8AOde6PFYjFaWlo6xzdu3Mhll13W7/pPOeUUotEo9957L7/5zW96zL/xxhvdXo8ZM4Z33nknaY1f+MIXGD16NLNnz+bvf/97j/n29vZuQWyPPfbghBNOYNmyZdxwww3drp07d66eZxMRke2iZ9okqaOPPpr//d//5emnn2bq1Kmd+7S1t7fzi1/8glGjRvXrfS6//HIWL17MTTfdxH333cf06dPZfffdefvtt3n11Vd58sknicVinasyp06dykUXXcT111/PgQceyFlnndW5T1tFRUW/j6oaMmQIv//97/noRz/Kueeeyy9+8QsmT57Mxo0beemll3jooYdoa2vrvP64447jmWee4cQTT+Too4+mtLSUSZMmccoppzBmzBjuuuuuzuOyjjvuOA444ADMjNdff52nnnqKVatWsXHjxs73+/nPf86RRx7JrFmz+Mtf/sKkSZNYunQpd999N6eccgr33XdfiH8bIiIiaJ+2DtoLK9CxT9uMGTN8yZIlfuqpp/ro0aN92LBhPmXKFJ83b16365Ptkbat9vZ2/9WvfuXTp0/3iooKHzx4sO+2224+depUj8Vi3tzc3OP666+/3vfdd18fMmSIjx8/3r/61a/6mjVrku6n1lsNTU1N/pWvfMWj0agPHjzYKysr/fDDD/dYLNbtuvXr1/sFF1zgu+++uw8aNKjze7Dt9+ZrX/uaf/CDH/TS0lIfOXKk77PPPv7Zz37W77777h5f+9VXX/UzzzzTy8vLvayszCdPnuz3339/v75nXenPpohI8aCXfdrM0/n0eg6qrq72hoaGPq976aWX2G+//TJQUW5rbGxkwoQJzJgxI+mxUJJ5+rMpIlI8zGyhu1cnm9MzbSIiIiJ5QKFNREREJA8otImIiIjkAa0elW6i0SiF/pyjiIhIPlKnTURERCQPZDW0mdlQM/u7mS02sxfNbHZifIKZPW1mS83sTjMbkhgvTbxempiPZrN+ERERkUzJdqdtEzDd3ScBhwAnmtlk4PvAte7+QWA18MXE9V8EVifGr01cJyIiIlLwshraEvvIrU+8HJz4cGA6cFdi/Dbg9MSvT0u8JjF/nCU7qVxERESkwGS704aZDTKz54C3gb8CrwFr3L3jjKE3gN0Tv94deB0gMb8WGJPZikVEREQyL+uhzd23uvshwB7A4cC+O/qeZlZrZg1m1vDOO+/scI0iIiIi2Zb10NbB3dcA84EjgdFm1rEdyR7Am4lfvwnsCZCYLwdWJXmvenevdvfqsWPHDnjtIiIiIgMt26tHx5rZ6MSvhwEnAC8RhLezEpfNAOYmfn1v4jWJ+Yddm4qJiIhIEcj25rrjgdvMbBBBgPydu99vZkuA35rZNcCzwC2J628BbjezpUAL8JlsFC0iIiKSaVkNbe7+PHBokvF/ETzftu34RuBTGShNCoSZccwxx/DII49kuxQREZEdkjPPtEn2NTY2YmbMnDkz41/7yiuvxMxyMlxl8/siIiLSQaFNREREJA8otImIiIjkAYU2AYLbkxMmTADgtttuw8w6P2699dZu1z744IOcfPLJ7LzzzpSWljJx4kS+8Y1vsGbNmh7v+/zzz3POOecQjUYpLS1l7NixHHbYYcyaNYstW7YAEI1GmT17NgDHHntst6/dH5s3b+bqq69m4sSJlJaWMmHCBL71rW+xadOmpNf/+9//5qqrrmLq1KnsuuuuDBkyhN12241zzz2XJUuWhP6+bN68mRtuuIGTTz6ZSCRCaWkplZWVHH/88TzwwAP9+j2IiIj0JdurRyVHTJs2jTVr1nDdddcxadIkTj/99M65Qw45pPPXs2fP5sorr6SyspJPfOIT7LLLLjz//PP86Ec/4s9//jNPPfUUo0aNAoLAdsQRR2BmnHrqqUyYMIF169axdOlSbrzxRq655hoGDx7MrFmzuOeee3j00UeZMWMG0Wi033W7O2effTZz585l4sSJXHjhhWzevJlf/vKXvPDCC0k/57HHHuN73/sexx57LGeeeSYjRozg1Vdf5a677uLee+/lySefZNKkSf3+vrS0tHDJJZcwZcoUTjjhBMaOHcvy5cu57777OPnkk7n55pv50pe+1O/fk4iISFLuXtAfH/rQh7w/lixZ0q/rCtmyZcsc8BkzZiSdf/jhhx3wI4880levXt1tbs6cOQ74rFmzOsf+4z/+wwG/5557erxXS0uLb926tfP1FVdc4YDPnz8/VM3xeNwBnzx5sm/YsKFzfNWqVf6BD3zAAT/mmGO6fc5bb73l69at6/Fezz33nA8fPtxPPPHEbuN9fV82btzor7/+eo/xNWvW+AEHHOAVFRXe2toa6vfVlf5sSiG64447PBKJuJl5JBLxO+64I9slieQEoMFTZBrdHs2weDxONBqlpKSEaDRKPB7Pdkn99rOf/QyAm2++mdGjR3ebmzlzJoccckjS38+wYcN6jFVUVFBSsuN//ObMmQPAd77zHYYOHdo5XllZyeWXX570c3bZZRdGjhzZY3zSpElMnz6d+fPnd9667Y/S0lL22GOPHuPl5eWcd955rF69mmeeeabf7ydS6OLxOLW1tTQ1NeHuNDU1UVtbm1c/D0WyQbdHM6jjB1VraytA5w8qgJqammyW1i9PPfUUgwcP5ve//z2///3ve8xv3ryZd955h1WrVjFmzBg+/elPc91113H66adz1llncfzxxzN16lQmTpyYtpoWLVpESUkJRx11VI+5adOmpfy8P/3pT9x00000NDSwcuVK2traus2vXLmS8ePH97uOF198kR/+8Ic89thjLF++nI0bN3abf/PNN1N8pkjxqaur6/w52KG1tZW6urq8+Fkoki0KbRmU7z+oVq1aRVtbW+eigVTWr1/PmDFjOPzww3n88ceJxWLcdddd3H777QDss88+XHHFFZxzzjk7XNPatWuprKxk8ODBPeZ23XXXpJ9z3XXXMWvWLCoqKjjhhBOoqqqirKwMM+Oee+5h8eLFKRcxJLNgwQKmT59OW1sbxx13HKeeeiqjRo2i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\n","text/plain":["<Figure size 720x720 with 1 Axes>"]},"metadata":{"needs_background":"light"}}],"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='test 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":10,"metadata":{"id":"RxoVaCJewlHg","outputId":"8ec2e54f-49b8-4f63-a943-1a2c77180718","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1646967668665,"user_tz":-540,"elapsed":8,"user":{"displayName":"TOMA Naruaki","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"11747312442870110137"}}},"outputs":[{"output_type":"stream","name":"stdout","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":10,"metadata":{"id":"ixkfvef5wlHg","executionInfo":{"status":"ok","timestamp":1646967668665,"user_tz":-540,"elapsed":5,"user":{"displayName":"TOMA Naruaki","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"11747312442870110137"}}},"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"},"colab":{"name":"regression_diabetes.ipynb","provenance":[],"collapsed_sections":[]}},"nbformat":4,"nbformat_minor":0}