{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "d44b9f37",
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "\n",
    "df = pd.read_csv('co2.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "cde9d5bb",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<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>engine</th>\n",
       "      <th>cylandr</th>\n",
       "      <th>fuelcomb</th>\n",
       "      <th>co2</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2.0</td>\n",
       "      <td>4</td>\n",
       "      <td>8.5</td>\n",
       "      <td>196</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2.4</td>\n",
       "      <td>4</td>\n",
       "      <td>9.6</td>\n",
       "      <td>221</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.5</td>\n",
       "      <td>4</td>\n",
       "      <td>5.9</td>\n",
       "      <td>136</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3.5</td>\n",
       "      <td>6</td>\n",
       "      <td>11.1</td>\n",
       "      <td>255</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>3.5</td>\n",
       "      <td>6</td>\n",
       "      <td>10.6</td>\n",
       "      <td>244</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   engine  cylandr  fuelcomb  co2\n",
       "0     2.0        4       8.5  196\n",
       "1     2.4        4       9.6  221\n",
       "2     1.5        4       5.9  136\n",
       "3     3.5        6      11.1  255\n",
       "4     3.5        6      10.6  244"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "968432ca",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "engine      0\n",
       "cylandr     0\n",
       "fuelcomb    0\n",
       "co2         0\n",
       "dtype: int64"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.isna().sum()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "0fa0588c",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.DataFrame'>\n",
      "RangeIndex: 500 entries, 0 to 499\n",
      "Data columns (total 4 columns):\n",
      " #   Column    Non-Null Count  Dtype  \n",
      "---  ------    --------------  -----  \n",
      " 0   engine    500 non-null    float64\n",
      " 1   cylandr   500 non-null    int64  \n",
      " 2   fuelcomb  500 non-null    float64\n",
      " 3   co2       500 non-null    int64  \n",
      "dtypes: float64(2), int64(2)\n",
      "memory usage: 15.8 KB\n"
     ]
    }
   ],
   "source": [
    "df.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "502ff17e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<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>engine</th>\n",
       "      <th>cylandr</th>\n",
       "      <th>fuelcomb</th>\n",
       "      <th>co2</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>500.000000</td>\n",
       "      <td>500.000000</td>\n",
       "      <td>500.000000</td>\n",
       "      <td>500.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>3.600400</td>\n",
       "      <td>6.132000</td>\n",
       "      <td>12.476600</td>\n",
       "      <td>268.026000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>1.478191</td>\n",
       "      <td>1.832291</td>\n",
       "      <td>3.943025</td>\n",
       "      <td>67.099673</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>4.000000</td>\n",
       "      <td>4.800000</td>\n",
       "      <td>110.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>2.000000</td>\n",
       "      <td>4.000000</td>\n",
       "      <td>9.500000</td>\n",
       "      <td>217.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>3.600000</td>\n",
       "      <td>6.000000</td>\n",
       "      <td>11.650000</td>\n",
       "      <td>260.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>5.000000</td>\n",
       "      <td>8.000000</td>\n",
       "      <td>14.800000</td>\n",
       "      <td>317.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>6.800000</td>\n",
       "      <td>12.000000</td>\n",
       "      <td>25.800000</td>\n",
       "      <td>488.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           engine     cylandr    fuelcomb         co2\n",
       "count  500.000000  500.000000  500.000000  500.000000\n",
       "mean     3.600400    6.132000   12.476600  268.026000\n",
       "std      1.478191    1.832291    3.943025   67.099673\n",
       "min      1.000000    4.000000    4.800000  110.000000\n",
       "25%      2.000000    4.000000    9.500000  217.000000\n",
       "50%      3.600000    6.000000   11.650000  260.000000\n",
       "75%      5.000000    8.000000   14.800000  317.000000\n",
       "max      6.800000   12.000000   25.800000  488.000000"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "da06616e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 800x800 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "\n",
    "\n",
    "plt.figure(1, (8,8))\n",
    "sns.heatmap(df.corr(), annot=True, cmap='hot')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "2ca29e1d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<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>engine</th>\n",
       "      <th>cylandr</th>\n",
       "      <th>fuelcomb</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2.0</td>\n",
       "      <td>4</td>\n",
       "      <td>8.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2.4</td>\n",
       "      <td>4</td>\n",
       "      <td>9.6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.5</td>\n",
       "      <td>4</td>\n",
       "      <td>5.9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3.5</td>\n",
       "      <td>6</td>\n",
       "      <td>11.1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>3.5</td>\n",
       "      <td>6</td>\n",
       "      <td>10.6</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   engine  cylandr  fuelcomb\n",
       "0     2.0        4       8.5\n",
       "1     2.4        4       9.6\n",
       "2     1.5        4       5.9\n",
       "3     3.5        6      11.1\n",
       "4     3.5        6      10.6"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X = df.drop('co2', axis=1)\n",
    "\n",
    "X.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "8e9d1146",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0      196\n",
       "1      221\n",
       "2      136\n",
       "3      255\n",
       "4      244\n",
       "      ... \n",
       "495    159\n",
       "496    172\n",
       "497    177\n",
       "498    244\n",
       "499    246\n",
       "Name: co2, Length: 500, dtype: int64"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y = df.co2\n",
    "\n",
    "y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "3c90402e",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.model_selection import train_test_split\n",
    "\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "5ee33481",
   "metadata": {},
   "outputs": [],
   "source": [
    "# from sklearn import linear_model\n",
    "\n",
    "# model = linear_model.LinearRegression()\n",
    "\n",
    "\n",
    "from sklearn.linear_model import LinearRegression\n",
    "\n",
    "model = LinearRegression()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "80b4b731",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style>#sk-container-id-1 {\n",
       "  /* Definition of color scheme common for light and dark mode */\n",
       "  --sklearn-color-text: #000;\n",
       "  --sklearn-color-text-muted: #666;\n",
       "  --sklearn-color-line: gray;\n",
       "  /* Definition of color scheme for unfitted estimators */\n",
       "  --sklearn-color-unfitted-level-0: #fff5e6;\n",
       "  --sklearn-color-unfitted-level-1: #f6e4d2;\n",
       "  --sklearn-color-unfitted-level-2: #ffe0b3;\n",
       "  --sklearn-color-unfitted-level-3: chocolate;\n",
       "  /* Definition of color scheme for fitted estimators */\n",
       "  --sklearn-color-fitted-level-0: #f0f8ff;\n",
       "  --sklearn-color-fitted-level-1: #d4ebff;\n",
       "  --sklearn-color-fitted-level-2: #b3dbfd;\n",
       "  --sklearn-color-fitted-level-3: cornflowerblue;\n",
       "}\n",
       "\n",
       "#sk-container-id-1.light {\n",
       "  /* Specific color for light theme */\n",
       "  --sklearn-color-text-on-default-background: black;\n",
       "  --sklearn-color-background: white;\n",
       "  --sklearn-color-border-box: black;\n",
       "  --sklearn-color-icon: #696969;\n",
       "}\n",
       "\n",
       "#sk-container-id-1.dark {\n",
       "  --sklearn-color-text-on-default-background: white;\n",
       "  --sklearn-color-background: #111;\n",
       "  --sklearn-color-border-box: white;\n",
       "  --sklearn-color-icon: #878787;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 pre {\n",
       "  padding: 0;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 input.sk-hidden--visually {\n",
       "  border: 0;\n",
       "  clip: rect(1px 1px 1px 1px);\n",
       "  clip: rect(1px, 1px, 1px, 1px);\n",
       "  height: 1px;\n",
       "  margin: -1px;\n",
       "  overflow: hidden;\n",
       "  padding: 0;\n",
       "  position: absolute;\n",
       "  width: 1px;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-dashed-wrapped {\n",
       "  border: 1px dashed var(--sklearn-color-line);\n",
       "  margin: 0 0.4em 0.5em 0.4em;\n",
       "  box-sizing: border-box;\n",
       "  padding-bottom: 0.4em;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-container {\n",
       "  /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
       "     but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
       "     so we also need the `!important` here to be able to override the\n",
       "     default hidden behavior on the sphinx rendered scikit-learn.org.\n",
       "     See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
       "  display: inline-block !important;\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-text-repr-fallback {\n",
       "  display: none;\n",
       "}\n",
       "\n",
       "div.sk-parallel-item,\n",
       "div.sk-serial,\n",
       "div.sk-item {\n",
       "  /* draw centered vertical line to link estimators */\n",
       "  background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
       "  background-size: 2px 100%;\n",
       "  background-repeat: no-repeat;\n",
       "  background-position: center center;\n",
       "}\n",
       "\n",
       "/* Parallel-specific style estimator block */\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item::after {\n",
       "  content: \"\";\n",
       "  width: 100%;\n",
       "  border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
       "  flex-grow: 1;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel {\n",
       "  display: flex;\n",
       "  align-items: stretch;\n",
       "  justify-content: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item:first-child::after {\n",
       "  align-self: flex-end;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item:last-child::after {\n",
       "  align-self: flex-start;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item:only-child::after {\n",
       "  width: 0;\n",
       "}\n",
       "\n",
       "/* Serial-specific style estimator block */\n",
       "\n",
       "#sk-container-id-1 div.sk-serial {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "  align-items: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  padding-right: 1em;\n",
       "  padding-left: 1em;\n",
       "}\n",
       "\n",
       "\n",
       "/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
       "clickable and can be expanded/collapsed.\n",
       "- Pipeline and ColumnTransformer use this feature and define the default style\n",
       "- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
       "*/\n",
       "\n",
       "/* Pipeline and ColumnTransformer style (default) */\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable {\n",
       "  /* Default theme specific background. It is overwritten whether we have a\n",
       "  specific estimator or a Pipeline/ColumnTransformer */\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "/* Toggleable label */\n",
       "#sk-container-id-1 label.sk-toggleable__label {\n",
       "  cursor: pointer;\n",
       "  display: flex;\n",
       "  width: 100%;\n",
       "  margin-bottom: 0;\n",
       "  padding: 0.5em;\n",
       "  box-sizing: border-box;\n",
       "  text-align: center;\n",
       "  align-items: center;\n",
       "  justify-content: center;\n",
       "  gap: 0.5em;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 label.sk-toggleable__label .caption {\n",
       "  font-size: 0.6rem;\n",
       "  font-weight: lighter;\n",
       "  color: var(--sklearn-color-text-muted);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 label.sk-toggleable__label-arrow:before {\n",
       "  /* Arrow on the left of the label */\n",
       "  content: \"▸\";\n",
       "  float: left;\n",
       "  margin-right: 0.25em;\n",
       "  color: var(--sklearn-color-icon);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 label.sk-toggleable__label-arrow:hover:before {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "/* Toggleable content - dropdown */\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable__content {\n",
       "  display: none;\n",
       "  text-align: left;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable__content.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable__content pre {\n",
       "  margin: 0.2em;\n",
       "  border-radius: 0.25em;\n",
       "  color: var(--sklearn-color-text);\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable__content.fitted pre {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
       "  /* Expand drop-down */\n",
       "  display: block;\n",
       "  width: 100%;\n",
       "  overflow: visible;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
       "  content: \"▾\";\n",
       "}\n",
       "\n",
       "/* Pipeline/ColumnTransformer-specific style */\n",
       "\n",
       "#sk-container-id-1 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator-specific style */\n",
       "\n",
       "/* Colorize estimator box */\n",
       "#sk-container-id-1 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-label label.sk-toggleable__label,\n",
       "#sk-container-id-1 div.sk-label label {\n",
       "  /* The background is the default theme color */\n",
       "  color: var(--sklearn-color-text-on-default-background);\n",
       "}\n",
       "\n",
       "/* On hover, darken the color of the background */\n",
       "#sk-container-id-1 div.sk-label:hover label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "/* Label box, darken color on hover, fitted */\n",
       "#sk-container-id-1 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator label */\n",
       "\n",
       "#sk-container-id-1 div.sk-label label {\n",
       "  font-family: monospace;\n",
       "  font-weight: bold;\n",
       "  line-height: 1.2em;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-label-container {\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "/* Estimator-specific */\n",
       "#sk-container-id-1 div.sk-estimator {\n",
       "  font-family: monospace;\n",
       "  border: 1px dotted var(--sklearn-color-border-box);\n",
       "  border-radius: 0.25em;\n",
       "  box-sizing: border-box;\n",
       "  margin-bottom: 0.5em;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-estimator.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "/* on hover */\n",
       "#sk-container-id-1 div.sk-estimator:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-estimator.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
       "\n",
       "/* Common style for \"i\" and \"?\" */\n",
       "\n",
       ".sk-estimator-doc-link,\n",
       "a:link.sk-estimator-doc-link,\n",
       "a:visited.sk-estimator-doc-link {\n",
       "  float: right;\n",
       "  font-size: smaller;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "  border-radius: 1em;\n",
       "  height: 1em;\n",
       "  width: 1em;\n",
       "  text-decoration: none !important;\n",
       "  margin-left: 0.5em;\n",
       "  text-align: center;\n",
       "  /* unfitted */\n",
       "  border: var(--sklearn-color-unfitted-level-3) 1pt solid;\n",
       "  color: var(--sklearn-color-unfitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted,\n",
       "a:link.sk-estimator-doc-link.fitted,\n",
       "a:visited.sk-estimator-doc-link.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "  border: var(--sklearn-color-fitted-level-3) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  border: var(--sklearn-color-fitted-level-0) 1pt solid;\n",
       "  color: var(--sklearn-color-unfitted-level-0);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "  border: var(--sklearn-color-fitted-level-0) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-0);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "/* Span, style for the box shown on hovering the info icon */\n",
       ".sk-estimator-doc-link span {\n",
       "  display: none;\n",
       "  z-index: 9999;\n",
       "  position: relative;\n",
       "  font-weight: normal;\n",
       "  right: .2ex;\n",
       "  padding: .5ex;\n",
       "  margin: .5ex;\n",
       "  width: min-content;\n",
       "  min-width: 20ex;\n",
       "  max-width: 50ex;\n",
       "  color: var(--sklearn-color-text);\n",
       "  box-shadow: 2pt 2pt 4pt #999;\n",
       "  /* unfitted */\n",
       "  background: var(--sklearn-color-unfitted-level-0);\n",
       "  border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted span {\n",
       "  /* fitted */\n",
       "  background: var(--sklearn-color-fitted-level-0);\n",
       "  border: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link:hover span {\n",
       "  display: block;\n",
       "}\n",
       "\n",
       "/* \"?\"-specific style due to the `<a>` HTML tag */\n",
       "\n",
       "#sk-container-id-1 a.estimator_doc_link {\n",
       "  float: right;\n",
       "  font-size: 1rem;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "  border-radius: 1rem;\n",
       "  height: 1rem;\n",
       "  width: 1rem;\n",
       "  text-decoration: none;\n",
       "  /* unfitted */\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 a.estimator_doc_link.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "#sk-container-id-1 a.estimator_doc_link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 a.estimator_doc_link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "\n",
       ".estimator-table {\n",
       "    font-family: monospace;\n",
       "}\n",
       "\n",
       ".estimator-table summary {\n",
       "    padding: .5rem;\n",
       "    cursor: pointer;\n",
       "}\n",
       "\n",
       ".estimator-table summary::marker {\n",
       "    font-size: 0.7rem;\n",
       "}\n",
       "\n",
       ".estimator-table details[open] {\n",
       "    padding-left: 0.1rem;\n",
       "    padding-right: 0.1rem;\n",
       "    padding-bottom: 0.3rem;\n",
       "}\n",
       "\n",
       ".estimator-table .parameters-table {\n",
       "    margin-left: auto !important;\n",
       "    margin-right: auto !important;\n",
       "    margin-top: 0;\n",
       "}\n",
       "\n",
       ".estimator-table .parameters-table tr:nth-child(odd) {\n",
       "    background-color: #fff;\n",
       "}\n",
       "\n",
       ".estimator-table .parameters-table tr:nth-child(even) {\n",
       "    background-color: #f6f6f6;\n",
       "}\n",
       "\n",
       ".estimator-table .parameters-table tr:hover {\n",
       "    background-color: #e0e0e0;\n",
       "}\n",
       "\n",
       ".estimator-table table td {\n",
       "    border: 1px solid rgba(106, 105, 104, 0.232);\n",
       "}\n",
       "\n",
       "/*\n",
       "    `table td`is set in notebook with right text-align.\n",
       "    We need to overwrite it.\n",
       "*/\n",
       ".estimator-table table td.param {\n",
       "    text-align: left;\n",
       "    position: relative;\n",
       "    padding: 0;\n",
       "}\n",
       "\n",
       ".user-set td {\n",
       "    color:rgb(255, 94, 0);\n",
       "    text-align: left !important;\n",
       "}\n",
       "\n",
       ".user-set td.value {\n",
       "    color:rgb(255, 94, 0);\n",
       "    background-color: transparent;\n",
       "}\n",
       "\n",
       ".default td {\n",
       "    color: black;\n",
       "    text-align: left !important;\n",
       "}\n",
       "\n",
       ".user-set td i,\n",
       ".default td i {\n",
       "    color: black;\n",
       "}\n",
       "\n",
       "/*\n",
       "    Styles for parameter documentation links\n",
       "    We need styling for visited so jupyter doesn't overwrite it\n",
       "*/\n",
       "a.param-doc-link,\n",
       "a.param-doc-link:link,\n",
       "a.param-doc-link:visited {\n",
       "    text-decoration: underline dashed;\n",
       "    text-underline-offset: .3em;\n",
       "    color: inherit;\n",
       "    display: block;\n",
       "    padding: .5em;\n",
       "}\n",
       "\n",
       "/* \"hack\" to make the entire area of the cell containing the link clickable */\n",
       "a.param-doc-link::before {\n",
       "    position: absolute;\n",
       "    content: \"\";\n",
       "    inset: 0;\n",
       "}\n",
       "\n",
       ".param-doc-description {\n",
       "    display: none;\n",
       "    position: absolute;\n",
       "    z-index: 9999;\n",
       "    left: 0;\n",
       "    padding: .5ex;\n",
       "    margin-left: 1.5em;\n",
       "    color: var(--sklearn-color-text);\n",
       "    box-shadow: .3em .3em .4em #999;\n",
       "    width: max-content;\n",
       "    text-align: left;\n",
       "    max-height: 10em;\n",
       "    overflow-y: auto;\n",
       "\n",
       "    /* unfitted */\n",
       "    background: var(--sklearn-color-unfitted-level-0);\n",
       "    border: thin solid var(--sklearn-color-unfitted-level-3);\n",
       "}\n",
       "\n",
       "/* Fitted state for parameter tooltips */\n",
       ".fitted .param-doc-description {\n",
       "    /* fitted */\n",
       "    background: var(--sklearn-color-fitted-level-0);\n",
       "    border: thin solid var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "\n",
       ".param-doc-link:hover .param-doc-description {\n",
       "    display: block;\n",
       "}\n",
       "\n",
       ".copy-paste-icon {\n",
       "    background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDggNTEyIj48IS0tIUZvbnQgQXdlc29tZSBGcmVlIDYuNy4yIGJ5IEBmb250YXdlc29tZSAtIGh0dHBzOi8vZm9udGF3ZXNvbWUuY29tIExpY2Vuc2UgLSBodHRwczovL2ZvbnRhd2Vzb21lLmNvbS9saWNlbnNlL2ZyZWUgQ29weXJpZ2h0IDIwMjUgRm9udGljb25zLCBJbmMuLS0+PHBhdGggZD0iTTIwOCAwTDMzMi4xIDBjMTIuNyAwIDI0LjkgNS4xIDMzLjkgMTQuMWw2Ny45IDY3LjljOSA5IDE0LjEgMjEuMiAxNC4xIDMzLjlMNDQ4IDMzNmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMTkyIDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtMjg4YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4ek00OCAxMjhsODAgMCAwIDY0LTY0IDAgMCAyNTYgMTkyIDAgMC0zMiA2NCAwIDAgNDhjMCAyNi41LTIxLjUgNDgtNDggNDhMNDggNTEyYy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDE3NmMwLTI2LjUgMjEuNS00OCA0OC00OHoiLz48L3N2Zz4=);\n",
       "    background-repeat: no-repeat;\n",
       "    background-size: 14px 14px;\n",
       "    background-position: 0;\n",
       "    display: inline-block;\n",
       "    width: 14px;\n",
       "    height: 14px;\n",
       "    cursor: pointer;\n",
       "}\n",
       "</style><body><div id=\"sk-container-id-1\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>LinearRegression()</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-1\" type=\"checkbox\" checked><label for=\"sk-estimator-id-1\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow\"><div><div>LinearRegression</div></div><div><a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.8/modules/generated/sklearn.linear_model.LinearRegression.html\">?<span>Documentation for LinearRegression</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></div></label><div class=\"sk-toggleable__content fitted\" data-param-prefix=\"\">\n",
       "        <div class=\"estimator-table\">\n",
       "            <details>\n",
       "                <summary>Parameters</summary>\n",
       "                <table class=\"parameters-table\">\n",
       "                  <tbody>\n",
       "                    \n",
       "        <tr class=\"default\">\n",
       "            <td><i class=\"copy-paste-icon\"\n",
       "                 onclick=\"copyToClipboard('fit_intercept',\n",
       "                          this.parentElement.nextElementSibling)\"\n",
       "            ></i></td>\n",
       "            <td class=\"param\">\n",
       "        <a class=\"param-doc-link\"\n",
       "            rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.8/modules/generated/sklearn.linear_model.LinearRegression.html#:~:text=fit_intercept,-bool%2C%20default%3DTrue\">\n",
       "            fit_intercept\n",
       "            <span class=\"param-doc-description\">fit_intercept: bool, default=True<br><br>Whether to calculate the intercept for this model. If set<br>to False, no intercept will be used in calculations<br>(i.e. data is expected to be centered).</span>\n",
       "        </a>\n",
       "    </td>\n",
       "            <td class=\"value\">True</td>\n",
       "        </tr>\n",
       "    \n",
       "\n",
       "        <tr class=\"default\">\n",
       "            <td><i class=\"copy-paste-icon\"\n",
       "                 onclick=\"copyToClipboard('copy_X',\n",
       "                          this.parentElement.nextElementSibling)\"\n",
       "            ></i></td>\n",
       "            <td class=\"param\">\n",
       "        <a class=\"param-doc-link\"\n",
       "            rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.8/modules/generated/sklearn.linear_model.LinearRegression.html#:~:text=copy_X,-bool%2C%20default%3DTrue\">\n",
       "            copy_X\n",
       "            <span class=\"param-doc-description\">copy_X: bool, default=True<br><br>If True, X will be copied; else, it may be overwritten.</span>\n",
       "        </a>\n",
       "    </td>\n",
       "            <td class=\"value\">True</td>\n",
       "        </tr>\n",
       "    \n",
       "\n",
       "        <tr class=\"default\">\n",
       "            <td><i class=\"copy-paste-icon\"\n",
       "                 onclick=\"copyToClipboard('tol',\n",
       "                          this.parentElement.nextElementSibling)\"\n",
       "            ></i></td>\n",
       "            <td class=\"param\">\n",
       "        <a class=\"param-doc-link\"\n",
       "            rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.8/modules/generated/sklearn.linear_model.LinearRegression.html#:~:text=tol,-float%2C%20default%3D1e-6\">\n",
       "            tol\n",
       "            <span class=\"param-doc-description\">tol: float, default=1e-6<br><br>The precision of the solution (`coef_`) is determined by `tol` which<br>specifies a different convergence criterion for the `lsqr` solver.<br>`tol` is set as `atol` and `btol` of :func:`scipy.sparse.linalg.lsqr` when<br>fitting on sparse training data. This parameter has no effect when fitting<br>on dense data.<br><br>.. versionadded:: 1.7</span>\n",
       "        </a>\n",
       "    </td>\n",
       "            <td class=\"value\">1e-06</td>\n",
       "        </tr>\n",
       "    \n",
       "\n",
       "        <tr class=\"default\">\n",
       "            <td><i class=\"copy-paste-icon\"\n",
       "                 onclick=\"copyToClipboard('n_jobs',\n",
       "                          this.parentElement.nextElementSibling)\"\n",
       "            ></i></td>\n",
       "            <td class=\"param\">\n",
       "        <a class=\"param-doc-link\"\n",
       "            rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.8/modules/generated/sklearn.linear_model.LinearRegression.html#:~:text=n_jobs,-int%2C%20default%3DNone\">\n",
       "            n_jobs\n",
       "            <span class=\"param-doc-description\">n_jobs: int, default=None<br><br>The number of jobs to use for the computation. This will only provide<br>speedup in case of sufficiently large problems, that is if firstly<br>`n_targets > 1` and secondly `X` is sparse or if `positive` is set<br>to `True`. ``None`` means 1 unless in a<br>:obj:`joblib.parallel_backend` context. ``-1`` means using all<br>processors. See :term:`Glossary <n_jobs>` for more details.</span>\n",
       "        </a>\n",
       "    </td>\n",
       "            <td class=\"value\">None</td>\n",
       "        </tr>\n",
       "    \n",
       "\n",
       "        <tr class=\"default\">\n",
       "            <td><i class=\"copy-paste-icon\"\n",
       "                 onclick=\"copyToClipboard('positive',\n",
       "                          this.parentElement.nextElementSibling)\"\n",
       "            ></i></td>\n",
       "            <td class=\"param\">\n",
       "        <a class=\"param-doc-link\"\n",
       "            rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.8/modules/generated/sklearn.linear_model.LinearRegression.html#:~:text=positive,-bool%2C%20default%3DFalse\">\n",
       "            positive\n",
       "            <span class=\"param-doc-description\">positive: bool, default=False<br><br>When set to ``True``, forces the coefficients to be positive. This<br>option is only supported for dense arrays.<br><br>For a comparison between a linear regression model with positive constraints<br>on the regression coefficients and a linear regression without such constraints,<br>see :ref:`sphx_glr_auto_examples_linear_model_plot_nnls.py`.<br><br>.. versionadded:: 0.24</span>\n",
       "        </a>\n",
       "    </td>\n",
       "            <td class=\"value\">False</td>\n",
       "        </tr>\n",
       "    \n",
       "                  </tbody>\n",
       "                </table>\n",
       "            </details>\n",
       "        </div>\n",
       "    </div></div></div></div></div><script>function copyToClipboard(text, element) {\n",
       "    // Get the parameter prefix from the closest toggleable content\n",
       "    const toggleableContent = element.closest('.sk-toggleable__content');\n",
       "    const paramPrefix = toggleableContent ? toggleableContent.dataset.paramPrefix : '';\n",
       "    const fullParamName = paramPrefix ? `${paramPrefix}${text}` : text;\n",
       "\n",
       "    const originalStyle = element.style;\n",
       "    const computedStyle = window.getComputedStyle(element);\n",
       "    const originalWidth = computedStyle.width;\n",
       "    const originalHTML = element.innerHTML.replace('Copied!', '');\n",
       "\n",
       "    navigator.clipboard.writeText(fullParamName)\n",
       "        .then(() => {\n",
       "            element.style.width = originalWidth;\n",
       "            element.style.color = 'green';\n",
       "            element.innerHTML = \"Copied!\";\n",
       "\n",
       "            setTimeout(() => {\n",
       "                element.innerHTML = originalHTML;\n",
       "                element.style = originalStyle;\n",
       "            }, 2000);\n",
       "        })\n",
       "        .catch(err => {\n",
       "            console.error('Failed to copy:', err);\n",
       "            element.style.color = 'red';\n",
       "            element.innerHTML = \"Failed!\";\n",
       "            setTimeout(() => {\n",
       "                element.innerHTML = originalHTML;\n",
       "                element.style = originalStyle;\n",
       "            }, 2000);\n",
       "        });\n",
       "    return false;\n",
       "}\n",
       "\n",
       "document.querySelectorAll('.copy-paste-icon').forEach(function(element) {\n",
       "    const toggleableContent = element.closest('.sk-toggleable__content');\n",
       "    const paramPrefix = toggleableContent ? toggleableContent.dataset.paramPrefix : '';\n",
       "    const paramName = element.parentElement.nextElementSibling\n",
       "        .textContent.trim().split(' ')[0];\n",
       "    const fullParamName = paramPrefix ? `${paramPrefix}${paramName}` : paramName;\n",
       "\n",
       "    element.setAttribute('title', fullParamName);\n",
       "});\n",
       "\n",
       "\n",
       "/**\n",
       " * Adapted from Skrub\n",
       " * https://github.com/skrub-data/skrub/blob/403466d1d5d4dc76a7ef569b3f8228db59a31dc3/skrub/_reporting/_data/templates/report.js#L789\n",
       " * @returns \"light\" or \"dark\"\n",
       " */\n",
       "function detectTheme(element) {\n",
       "    const body = document.querySelector('body');\n",
       "\n",
       "    // Check VSCode theme\n",
       "    const themeKindAttr = body.getAttribute('data-vscode-theme-kind');\n",
       "    const themeNameAttr = body.getAttribute('data-vscode-theme-name');\n",
       "\n",
       "    if (themeKindAttr && themeNameAttr) {\n",
       "        const themeKind = themeKindAttr.toLowerCase();\n",
       "        const themeName = themeNameAttr.toLowerCase();\n",
       "\n",
       "        if (themeKind.includes(\"dark\") || themeName.includes(\"dark\")) {\n",
       "            return \"dark\";\n",
       "        }\n",
       "        if (themeKind.includes(\"light\") || themeName.includes(\"light\")) {\n",
       "            return \"light\";\n",
       "        }\n",
       "    }\n",
       "\n",
       "    // Check Jupyter theme\n",
       "    if (body.getAttribute('data-jp-theme-light') === 'false') {\n",
       "        return 'dark';\n",
       "    } else if (body.getAttribute('data-jp-theme-light') === 'true') {\n",
       "        return 'light';\n",
       "    }\n",
       "\n",
       "    // Guess based on a parent element's color\n",
       "    const color = window.getComputedStyle(element.parentNode, null).getPropertyValue('color');\n",
       "    const match = color.match(/^rgb\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)\\s*$/i);\n",
       "    if (match) {\n",
       "        const [r, g, b] = [\n",
       "            parseFloat(match[1]),\n",
       "            parseFloat(match[2]),\n",
       "            parseFloat(match[3])\n",
       "        ];\n",
       "\n",
       "        // https://en.wikipedia.org/wiki/HSL_and_HSV#Lightness\n",
       "        const luma = 0.299 * r + 0.587 * g + 0.114 * b;\n",
       "\n",
       "        if (luma > 180) {\n",
       "            // If the text is very bright we have a dark theme\n",
       "            return 'dark';\n",
       "        }\n",
       "        if (luma < 75) {\n",
       "            // If the text is very dark we have a light theme\n",
       "            return 'light';\n",
       "        }\n",
       "        // Otherwise fall back to the next heuristic.\n",
       "    }\n",
       "\n",
       "    // Fallback to system preference\n",
       "    return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n",
       "}\n",
       "\n",
       "\n",
       "function forceTheme(elementId) {\n",
       "    const estimatorElement = document.querySelector(`#${elementId}`);\n",
       "    if (estimatorElement === null) {\n",
       "        console.error(`Element with id ${elementId} not found.`);\n",
       "    } else {\n",
       "        const theme = detectTheme(estimatorElement);\n",
       "        estimatorElement.classList.add(theme);\n",
       "    }\n",
       "}\n",
       "\n",
       "forceTheme('sk-container-id-1');</script></body>"
      ],
      "text/plain": [
       "LinearRegression()"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "7f54ddd3",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "score model: 85%\n"
     ]
    }
   ],
   "source": [
    "print(f'score model: {int(model.score(X_test, y_test)*100)}%')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "id": "d8f0f803",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "score model: 85.31%\n"
     ]
    }
   ],
   "source": [
    "score = model.score(X_test, y_test)\n",
    "\n",
    "print(f'score model: {score*100:1.2f}%')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "id": "7ec302f1",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "c:\\Users\\Khalilavi\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\sklearn\\utils\\validation.py:2691: UserWarning: X does not have valid feature names, but LinearRegression was fitted with feature names\n",
      "  warnings.warn(\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([175.74794742])"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model.predict([[1.3, 4, 6.4]])"
   ]
  }
 ],
 "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.11.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
