{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "350594ae-d3c8-4b6e-b533-ce103056c630",
   "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>Order</th>\n",
       "      <th>PID</th>\n",
       "      <th>MS SubClass</th>\n",
       "      <th>MS Zoning</th>\n",
       "      <th>Lot Frontage</th>\n",
       "      <th>Lot Area</th>\n",
       "      <th>Street</th>\n",
       "      <th>Alley</th>\n",
       "      <th>Lot Shape</th>\n",
       "      <th>Land Contour</th>\n",
       "      <th>...</th>\n",
       "      <th>Pool Area</th>\n",
       "      <th>Pool QC</th>\n",
       "      <th>Fence</th>\n",
       "      <th>Misc Feature</th>\n",
       "      <th>Misc Val</th>\n",
       "      <th>Mo Sold</th>\n",
       "      <th>Yr Sold</th>\n",
       "      <th>Sale Type</th>\n",
       "      <th>Sale Condition</th>\n",
       "      <th>SalePrice</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>526301100</td>\n",
       "      <td>20</td>\n",
       "      <td>RL</td>\n",
       "      <td>141.0</td>\n",
       "      <td>31770</td>\n",
       "      <td>Pave</td>\n",
       "      <td>NaN</td>\n",
       "      <td>IR1</td>\n",
       "      <td>Lvl</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>5</td>\n",
       "      <td>2010</td>\n",
       "      <td>WD</td>\n",
       "      <td>Normal</td>\n",
       "      <td>215000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>526350040</td>\n",
       "      <td>20</td>\n",
       "      <td>RH</td>\n",
       "      <td>80.0</td>\n",
       "      <td>11622</td>\n",
       "      <td>Pave</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Reg</td>\n",
       "      <td>Lvl</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>MnPrv</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>6</td>\n",
       "      <td>2010</td>\n",
       "      <td>WD</td>\n",
       "      <td>Normal</td>\n",
       "      <td>105000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>526351010</td>\n",
       "      <td>20</td>\n",
       "      <td>RL</td>\n",
       "      <td>81.0</td>\n",
       "      <td>14267</td>\n",
       "      <td>Pave</td>\n",
       "      <td>NaN</td>\n",
       "      <td>IR1</td>\n",
       "      <td>Lvl</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Gar2</td>\n",
       "      <td>12500</td>\n",
       "      <td>6</td>\n",
       "      <td>2010</td>\n",
       "      <td>WD</td>\n",
       "      <td>Normal</td>\n",
       "      <td>172000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>3 rows × 82 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   Order        PID  MS SubClass MS Zoning  Lot Frontage  Lot Area Street  \\\n",
       "0      1  526301100           20        RL         141.0     31770   Pave   \n",
       "1      2  526350040           20        RH          80.0     11622   Pave   \n",
       "2      3  526351010           20        RL          81.0     14267   Pave   \n",
       "\n",
       "  Alley Lot Shape Land Contour  ... Pool Area Pool QC  Fence Misc Feature  \\\n",
       "0   NaN       IR1          Lvl  ...         0     NaN    NaN          NaN   \n",
       "1   NaN       Reg          Lvl  ...         0     NaN  MnPrv          NaN   \n",
       "2   NaN       IR1          Lvl  ...         0     NaN    NaN         Gar2   \n",
       "\n",
       "  Misc Val Mo Sold Yr Sold Sale Type  Sale Condition  SalePrice  \n",
       "0        0       5    2010       WD           Normal     215000  \n",
       "1        0       6    2010       WD           Normal     105000  \n",
       "2    12500       6    2010       WD           Normal     172000  \n",
       "\n",
       "[3 rows x 82 columns]"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "from matplotlib.pyplot import subplots\n",
    "\n",
    "house = pd.read_csv('house.csv')\n",
    "house.head(3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "6ca0d6e2-9b21-4c2d-922e-a016882beb62",
   "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>SalePrice</th>\n",
       "      <th>1st Flr SF</th>\n",
       "      <th>2nd Flr SF</th>\n",
       "      <th>Total Bsmt SF</th>\n",
       "      <th>Garage Area</th>\n",
       "      <th>Wood Deck SF</th>\n",
       "      <th>Open Porch SF</th>\n",
       "      <th>Lot Area</th>\n",
       "      <th>Year Built</th>\n",
       "      <th>Yr Sold</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>215000</td>\n",
       "      <td>1656</td>\n",
       "      <td>0</td>\n",
       "      <td>1080.0</td>\n",
       "      <td>528.0</td>\n",
       "      <td>210</td>\n",
       "      <td>62</td>\n",
       "      <td>31770</td>\n",
       "      <td>1960</td>\n",
       "      <td>2010</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>105000</td>\n",
       "      <td>896</td>\n",
       "      <td>0</td>\n",
       "      <td>882.0</td>\n",
       "      <td>730.0</td>\n",
       "      <td>140</td>\n",
       "      <td>0</td>\n",
       "      <td>11622</td>\n",
       "      <td>1961</td>\n",
       "      <td>2010</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>172000</td>\n",
       "      <td>1329</td>\n",
       "      <td>0</td>\n",
       "      <td>1329.0</td>\n",
       "      <td>312.0</td>\n",
       "      <td>393</td>\n",
       "      <td>36</td>\n",
       "      <td>14267</td>\n",
       "      <td>1958</td>\n",
       "      <td>2010</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   SalePrice  1st Flr SF  2nd Flr SF  Total Bsmt SF  Garage Area  \\\n",
       "0     215000        1656           0         1080.0        528.0   \n",
       "1     105000         896           0          882.0        730.0   \n",
       "2     172000        1329           0         1329.0        312.0   \n",
       "\n",
       "   Wood Deck SF  Open Porch SF  Lot Area  Year Built  Yr Sold  \n",
       "0           210             62     31770        1960     2010  \n",
       "1           140              0     11622        1961     2010  \n",
       "2           393             36     14267        1958     2010  "
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "house = house[house['Bldg Type'] == '1Fam']\n",
    "house = house[house['Sale Condition'] == 'Normal']\n",
    "sales = house[['SalePrice', '1st Flr SF', '2nd Flr SF', 'Total Bsmt SF', \n",
    "               'Garage Area', 'Wood Deck SF', 'Open Porch SF', 'Lot Area', \n",
    "               'Year Built', 'Yr Sold']]\n",
    "sales.head(3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "505472fe-d5cd-4263-8a2b-4edc9aab97ba",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.pipeline import Pipeline\n",
    "from sklearn.preprocessing import PolynomialFeatures\n",
    "from sklearn.metrics import r2_score, mean_squared_error\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "from sklearn.linear_model import LinearRegression"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "ab3b918b-8193-4e9f-8806-e75e596ddc71",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model R² Score: 0.7832171768278281\n"
     ]
    }
   ],
   "source": [
    "X = sales[['1st Flr SF', '2nd Flr SF', 'Open Porch SF', 'Year Built']]\n",
    "y = sales['SalePrice']\n",
    "\n",
    "from sklearn.model_selection import train_test_split\n",
    "# Assume X and y are your features and target variable\n",
    "\n",
    "# Split data into training and testing sets (example)\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\n",
    "\n",
    "# Create and fit the model\n",
    "model = LinearRegression()\n",
    "model.fit(X_train, y_train)\n",
    "\n",
    "# Get the R² score\n",
    "score = model.score(X_test, y_test)\n",
    "print(f\"Model R² Score: {score}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "fe49b0aa-d79c-4b58-a8bd-1637ec567032",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "R^2 score on test set with degree 1  :  0.5636673108738282\n",
      "R^2 score on test set with degree 2  :  0.5686254523419286\n",
      "R^2 score on test set with degree 3  :  0.5603163173001231\n",
      "R^2 score on test set with degree 4  :  0.6129129404922433\n",
      "R^2 score on test set with degree 5  :  0.20652947636342744\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x11ffb72b0>]"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 400x400 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Let us save all the predictor variables in X and the response in y\n",
    "X = sales[['1st Flr SF', '2nd Flr SF']]\n",
    "y = sales['SalePrice']\n",
    "\n",
    "# Split data into training and testing sets (example)\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)\n",
    "\n",
    "\n",
    "# Fitting a polynomial of degree d\n",
    "score = []\n",
    "for d in range(1, 6):\n",
    "    model = Pipeline([\n",
    "            (\"poly\", PolynomialFeatures(degree=d, include_bias=False)),\n",
    "            (\"scaler\", StandardScaler()),\n",
    "            (\"linreg\", LinearRegression())\n",
    "        ])\n",
    "    model.fit(X_train, y_train)\n",
    "    y_test_pred = model.predict(X_test)\n",
    "    score.append(mean_squared_error(y_test_pred, y_test))\n",
    "    print('R^2 score on test set with degree', d, ' : ', r2_score(y_test_pred, y_test))\n",
    "\n",
    "fig, ax = subplots(figsize = (4, 4))\n",
    "ax.plot(range(1, 6), score)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "099e4450-0a33-4fb5-9fc2-b6a61bc3ea1b",
   "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>Age</th>\n",
       "      <th>Blood Pressure</th>\n",
       "      <th>Blood Glucose Random</th>\n",
       "      <th>White Blood Cell Count</th>\n",
       "      <th>Red Blood Cell Count</th>\n",
       "      <th>Class</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>48</td>\n",
       "      <td>70</td>\n",
       "      <td>117</td>\n",
       "      <td>6700</td>\n",
       "      <td>3.9</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>53</td>\n",
       "      <td>90</td>\n",
       "      <td>70</td>\n",
       "      <td>12100</td>\n",
       "      <td>3.7</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>63</td>\n",
       "      <td>70</td>\n",
       "      <td>380</td>\n",
       "      <td>4500</td>\n",
       "      <td>3.8</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>68</td>\n",
       "      <td>80</td>\n",
       "      <td>157</td>\n",
       "      <td>11000</td>\n",
       "      <td>2.6</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>61</td>\n",
       "      <td>80</td>\n",
       "      <td>173</td>\n",
       "      <td>9200</td>\n",
       "      <td>3.2</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>153</th>\n",
       "      <td>55</td>\n",
       "      <td>80</td>\n",
       "      <td>140</td>\n",
       "      <td>6700</td>\n",
       "      <td>4.9</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>154</th>\n",
       "      <td>42</td>\n",
       "      <td>70</td>\n",
       "      <td>75</td>\n",
       "      <td>7800</td>\n",
       "      <td>6.2</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>155</th>\n",
       "      <td>12</td>\n",
       "      <td>80</td>\n",
       "      <td>100</td>\n",
       "      <td>6600</td>\n",
       "      <td>5.4</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>156</th>\n",
       "      <td>17</td>\n",
       "      <td>60</td>\n",
       "      <td>114</td>\n",
       "      <td>7200</td>\n",
       "      <td>5.9</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>157</th>\n",
       "      <td>58</td>\n",
       "      <td>80</td>\n",
       "      <td>131</td>\n",
       "      <td>6800</td>\n",
       "      <td>6.1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>158 rows × 6 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "     Age  Blood Pressure  Blood Glucose Random  White Blood Cell Count  \\\n",
       "0     48              70                   117                    6700   \n",
       "1     53              90                    70                   12100   \n",
       "2     63              70                   380                    4500   \n",
       "3     68              80                   157                   11000   \n",
       "4     61              80                   173                    9200   \n",
       "..   ...             ...                   ...                     ...   \n",
       "153   55              80                   140                    6700   \n",
       "154   42              70                    75                    7800   \n",
       "155   12              80                   100                    6600   \n",
       "156   17              60                   114                    7200   \n",
       "157   58              80                   131                    6800   \n",
       "\n",
       "     Red Blood Cell Count  Class  \n",
       "0                     3.9      1  \n",
       "1                     3.7      1  \n",
       "2                     3.8      1  \n",
       "3                     2.6      1  \n",
       "4                     3.2      1  \n",
       "..                    ...    ...  \n",
       "153                   4.9      0  \n",
       "154                   6.2      0  \n",
       "155                   5.4      0  \n",
       "156                   5.9      0  \n",
       "157                   6.1      0  \n",
       "\n",
       "[158 rows x 6 columns]"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ckd = pd.read_csv('ckd.csv')\n",
    "ckd = ckd[['Age', 'Blood Pressure', 'Blood Glucose Random', 'White Blood Cell Count', 'Red Blood Cell Count', 'Class']]\n",
    "ckd"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "e9e3833f-f512-436e-bbf2-7943ddeccd29",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Evaluation of Logistic Regression classification\n",
      "Accuracy: 0.9583333333333334\n",
      "\n",
      "Confusion Matrix:\n",
      "[[34  1]\n",
      " [ 1 12]]\n",
      "\n",
      "Classification Report:\n",
      "              precision    recall  f1-score   support\n",
      "\n",
      "           0       0.97      0.97      0.97        35\n",
      "           1       0.92      0.92      0.92        13\n",
      "\n",
      "    accuracy                           0.96        48\n",
      "   macro avg       0.95      0.95      0.95        48\n",
      "weighted avg       0.96      0.96      0.96        48\n",
      "\n"
     ]
    }
   ],
   "source": [
    "X = ckd[['Age', 'Blood Pressure', 'Blood Glucose Random', 'White Blood Cell Count', 'Red Blood Cell Count']]\n",
    "y = ckd['Class']\n",
    "\n",
    "# Create a train:test split of the data \n",
    "X_train, X_test, y_train, y_test = train_test_split(\n",
    "    X, y, test_size=0.30, random_state=42, stratify=y\n",
    ")\n",
    "\n",
    "# We shall use the StandardScaler to scale the training dataset\n",
    "scaler = StandardScaler()\n",
    "X_train_scaled = scaler.fit_transform(X_train)\n",
    "# The transform method is then used to scale the test data using parameters\n",
    "# obtained from the training data.\n",
    "X_test_scaled = scaler.transform(X_test)\n",
    "\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "logreg = LogisticRegression(max_iter=1000)\n",
    "\n",
    "logreg.fit(X_train, y_train)\n",
    "y_pred = logreg.predict(X_test)\n",
    "\n",
    "from sklearn.metrics import accuracy_score, confusion_matrix, classification_report\n",
    "# Evaluate\n",
    "print('Evaluation of Logistic Regression classification')\n",
    "print(\"Accuracy:\", accuracy_score(y_test, y_pred))\n",
    "print(\"\\nConfusion Matrix:\")\n",
    "print(confusion_matrix(y_test, y_pred))\n",
    "print(\"\\nClassification Report:\")\n",
    "print(classification_report(y_test, y_pred))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "5057b909-38e5-4094-9def-bb589f1de59d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Evaluation of KNN classification\n",
      "Accuracy: 0.8541666666666666\n",
      "\n",
      "Confusion Matrix:\n",
      "[[35  0]\n",
      " [ 7  6]]\n",
      "\n",
      "Classification Report:\n",
      "              precision    recall  f1-score   support\n",
      "\n",
      "           0       0.83      1.00      0.91        35\n",
      "           1       1.00      0.46      0.63        13\n",
      "\n",
      "    accuracy                           0.85        48\n",
      "   macro avg       0.92      0.73      0.77        48\n",
      "weighted avg       0.88      0.85      0.83        48\n",
      "\n"
     ]
    }
   ],
   "source": [
    "from sklearn.neighbors import KNeighborsClassifier\n",
    "knn = KNeighborsClassifier(n_neighbors=13)\n",
    "knn.fit(X_train, y_train)\n",
    "y_pred = knn.predict(X_test)\n",
    "\n",
    "# Evaluate\n",
    "print('Evaluation of KNN classification')\n",
    "print(\"Accuracy:\", accuracy_score(y_test, y_pred))\n",
    "print(\"\\nConfusion Matrix:\")\n",
    "print(confusion_matrix(y_test, y_pred))\n",
    "print(\"\\nClassification Report:\")\n",
    "print(classification_report(y_test, y_pred))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "8e10578e-ea08-436a-9325-ffd08d993aa6",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "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.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
