{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Machine Learning Homework 1"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Instructions"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This homework is due **before class on Friday, March 7.**"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Important notes:\n",
"- Please submit the notebook with the output.\n",
"- If the answer is not obvious from the printout, please type it.\n",
"- The notebook should be self contained and we should be able to rerun it.\n",
"- Import all the libraries that you find necessary to answer the questions.\n",
"- If the subquestion is worth 1 point, no half points will be given: full point will be given for the correct answer. Similarly, if the question is worth 2, possible points are 0,1,2.\n",
"- Acknowledge the use of outside sources and code assistants."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Question 1 "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Total 20 points**\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Import the California house prices dataset from `sklearn.datasets` using `fetch_california_housing` as follows:\n",
" `from sklearn.datasets import fetch_california_housing` \n",
" `housing = fetch_california_housing()`\n",
"1. Print out the dataset description and read it (1pt)\n",
"2. Convert the dataset to pandas dataframe (all the features and the target) (1pt)\n",
"3. Check the number of data points, data types, and print the first 15 lines of the dataset (1pt)\n",
"4. Check the number of missing values per feature (1pt)\n",
"5. Divide the dataset into train and test, where 30% of the dataset will be used for test, with the `random_state=42` (1pt)\n",
"6. Train a Linear Regression model (1pt)\n",
"7. What value of target is predicted by the model, when all the features have value 0 (1pt)\n",
"8. What is the value of the coefficient associated with the feature HouseAge (1pt)\n",
"9. Predict the target values of the data points from the training set (1pt)\n",
"10. What is the value of the cost function for the obtained coefficients and the training dataset (1pt)\n",
"11. Evaluate the model's performance (1pt)\n",
"12. Generate polynomial features up to degree 2 of the training dataset (1pt)\n",
"13. Scale the polynomial features from the previous step using the standard scaler (1pt)\n",
"14. Train a Ridge regression model with the regularization strength equal to 0.001 on the scaled dataset. What would happen to the feature coefficients and the model if alpha approached infinity? (2pt)\n",
"15. Train Lasso Regression with the regularization strength equal to 0.01 on the scaled dataset and set the maximum number of iterations to 100000 (1pt)\n",
"16. Count how many coefficients (excluding intercept) are calculated (1pt)\n",
"17. Check how many features will not be used to predict the target with this model (1pt)\n",
"18. Plot the coefficients of Lasso and Ridge regression on the same plot, with label, Ridge in red, and Lasso in blue (2pt)"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"from sklearn.datasets import fetch_california_housing\n",
"housing = fetch_california_housing()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 1.1. Print out the dataset description and read it (1pt)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
".. _california_housing_dataset:\n",
"\n",
"California Housing dataset\n",
"--------------------------\n",
"\n",
"**Data Set Characteristics:**\n",
"\n",
":Number of Instances: 20640\n",
"\n",
":Number of Attributes: 8 numeric, predictive attributes and the target\n",
"\n",
":Attribute Information:\n",
" - MedInc median income in block group\n",
" - HouseAge median house age in block group\n",
" - AveRooms average number of rooms per household\n",
" - AveBedrms average number of bedrooms per household\n",
" - Population block group population\n",
" - AveOccup average number of household members\n",
" - Latitude block group latitude\n",
" - Longitude block group longitude\n",
"\n",
":Missing Attribute Values: None\n",
"\n",
"This dataset was obtained from the StatLib repository.\n",
"https://www.dcc.fc.up.pt/~ltorgo/Regression/cal_housing.html\n",
"\n",
"The target variable is the median house value for California districts,\n",
"expressed in hundreds of thousands of dollars ($100,000).\n",
"\n",
"This dataset was derived from the 1990 U.S. census, using one row per census\n",
"block group. A block group is the smallest geographical unit for which the U.S.\n",
"Census Bureau publishes sample data (a block group typically has a population\n",
"of 600 to 3,000 people).\n",
"\n",
"A household is a group of people residing within a home. Since the average\n",
"number of rooms and bedrooms in this dataset are provided per household, these\n",
"columns may take surprisingly large values for block groups with few households\n",
"and many empty houses, such as vacation resorts.\n",
"\n",
"It can be downloaded/loaded using the\n",
":func:`sklearn.datasets.fetch_california_housing` function.\n",
"\n",
".. rubric:: References\n",
"\n",
"- Pace, R. Kelley and Ronald Barry, Sparse Spatial Autoregressions,\n",
" Statistics and Probability Letters, 33 (1997) 291-297\n",
"\n"
]
}
],
"source": [
"print(housing.DESCR)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 1.2. Convert the dataset to pandas dataframe (all the features and the target) (1pt)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
LinearRegression()
"
],
"text/plain": [
"LinearRegression()"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from sklearn.linear_model import LinearRegression\n",
"\n",
"lin_reg = LinearRegression()\n",
"lin_reg.fit(X_train,y_train)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 1.7. What value of target is predicted by the model, when all the features have value 0 (1pt)"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"np.float64(-37.056241331525186)"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"lin_reg.intercept_"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 1.8. What is the value of the coefficient associated with the feature HouseAge? (1pt)"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Index(['MedInc', 'HouseAge', 'AveRooms', 'AveBedrms', 'Population', 'AveOccup',\n",
" 'Latitude', 'Longitude', 'target'],\n",
" dtype='object')"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.columns\n",
"#df.columns.get_loc('HouseAge')"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"np.float64(0.009681867985916507)"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"lin_reg.coef_[1]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 1.9. Predict the target values of the data points from the training set (1pt)"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [],
"source": [
"y_train_pred = lin_reg.predict(X_train)"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
Ridge(alpha=0.001)
"
],
"text/plain": [
"Ridge(alpha=0.001)"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from sklearn.linear_model import Ridge\n",
"\n",
"ridge = Ridge(alpha=0.001)\n",
"ridge.fit(X_train, y_train)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The feature coefficients would shrink toward 0, culminating in the model being underfit as the high penalty would prevent it from properly capturing the relationships between the input features and the target. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 1.15. Train Lasso Regression with the regularization strength equal to 0.01 on the scaled dataset and set the maximum number of iterations to 100000 (1pt)"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
Lasso(alpha=0.01, max_iter=100000)
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
Lasso(alpha=0.01, max_iter=100000)
"
],
"text/plain": [
"Lasso(alpha=0.01, max_iter=100000)"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from sklearn.linear_model import Lasso\n",
"\n",
"lasso = Lasso(alpha = 1e-2, max_iter = int(1e5))\n",
"lasso.fit(X_train, y_train)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 1.16. Count how many coefficients (excluding intercept) are calculated (1pt)"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Total number of coefficients: 44\n"
]
}
],
"source": [
"print(f\"Total number of coefficients: {len(lasso.coef_)}\") "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 1.17. Check how many features will not be used to predict the target with this model (1pt)"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Number of Features with Coefficients equal to 0: 28\n"
]
}
],
"source": [
"print(f\"Number of Features with Coefficients equal to 0: {(lasso.coef_==0).sum()}\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 1.18. Plot the coefficients of Lasso and Ridge regression on the same plot, with label, Ridge in red, and Lasso in blue (2pt)"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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3r2u75wLZGRk6NChQ7rhhhtcap+UlKQ9e/aoevXqzhrCw8OVk5NTqI7mzZvL77wXRlRUlDIyMkrtu7TjcikI8wAAAMU4N1c+P7/w8vx8382d379/v/r166cWLVpoxYoVSkpK0osvvihJzjnbf/3rX/Xrr79q8ODB2rlzp9q3b6/nn39ektS3b1/t379f48ePd4bchx9+WFLpwbyk5U2aNNHevXudz12aC/s4//kcDoeioqK0ffv2Qrfk5GRNnDjRhT1TvMDAQLfaOxwOtWvXrkgdP//8swYNGuRsV61atUKPs9lscjgcpfZd2nG5FIR5AADgnogIKSCg9DYBAQXtLOrcqHyVEpJSlSq+GZ3fsmWLzp49q2eeeUbXXHONmjRpokOHDhVpFxMTo5EjR2rlypWaMGGCXn75Zee6K664QsOGDdMbb7yhBQsWaPHixZKkZs2aafv27c4Rfkn66quvVKVKFTVp0qTYegYNGqQTJ05o4cKFxa4/duyYJKlp06b68ssvC637+uuv1bRpU0lS27ZtlZ6erqpVq6px48aFbhGX8DqqXr26GjRo4PKpKtu2batffvlFtWvXLlJHWFiYy8/r7++v/As/Bar041JWXAEWAAC4JzZWSk6u0FeAzcsruOZVSYOtDod04EBBO2+c1TArK0vbt28vtCw8PFyNGjXS2bNn9fzzz6t///766quv9NJLLxVqN378ePXt21dNmjTR0aNH9dlnnzlD8+OPP6527dqpefPmys3N1fvvv+9cd/fdd2vq1KkaOnSopk2bpt9//11jx47V4MGDVadOnWLr7NixoyZNmqQJEybo4MGD+tOf/qTo6Gjt2bNHL730kq699lo9+OCDmjhxou68807nl1rfe+89rVy50vkF1h49eigxMVEDBgzQ7NmzlZCQoEOHDunDDz/UgAED1L59+zLvy2nTpmnkyJGqXbu2+vbtq+PHj+urr77S2LFji7S9++67NXfuXN1yyy2aMWOG6tWrp9TUVK1cuVITJ05UvXr1XHrOBg0a6PPPP9ddd90lu92uiIiIUo/LpSDMAwAA98XGWjqsX4zdXjCV5vffS25Tu7Z3grwkbdiwQW3atCm0bOjQoVq6dKnmzZun2bNna/LkyerSpYtmzZqlIUOGONvl5+dr9OjR+s9//qPQ0FD16dNH8+fPl1QwYjx58mTt27dPgYGB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TE4m0AMAPMrlMD906FBJUlxcnDp16qRq1ap5rSgAcJsvR8YzM0sP8lLB+sxMwjwAwKPcPs98165d5XA49PPPPysjI0MOh6PQ+i5dunisOABwCSPjAIBKyu0w/+2332rQoEHav3+/LjwRjs1ms/zZbABYECPjAIBKyu0wP3LkSLVv314ffPCBoqKiij2zDQAAAADvczvM//LLL/rXv/6lxo0be6MeAAAAAC5y+zzzHTt21J49e7xRCwAAAAA3uD0yP3bsWE2YMEHp6elq2bJlkbPatGrVymPFAQAAACiZ22H+tttukyQNHz7cucxmszmvDMsXYAFUOhERBWfLudjZdCIiLl9NAIBKwe0wn5KS4o06AMC6YmMLTnvJFWABAJeZ22G+fv363qgDAMquPIyMx8YS1gEAl53bYV6SXn/9db300ktKSUnRN998o/r162vBggWKi4vTLbfc4ukaAaB0jIwDACopt89ms2jRIj300EPq16+fjh075pwjX6NGDS1YsMDT9QGAa2JjpbZtS74R5AEAFZDbYf7555/Xyy+/rClTpsjPz8+5vH379tq5c6dHiwMAAABQMrfDfEpKitq0aVNkud1u18mTJz1SFAAAAICLczvMx8XFafv27UWWf/TRR2rWrJknagIAAADgAre/ADtx4kSNHj1aOTk5Msbou+++09tvv61Zs2bplVde8UaNAAAAAIrhdpi/5557dPbsWU2aNEmnTp3SoEGDVLduXT377LO66667vFEjAAAAgGLYjDGmrA/OzMyUw+FQ7dq1PVmTT2VnZyssLExZWVkKDQ31dTkAAMAFvH+jsirTeebPieDS5AAAAIDPuBTm27Ztq08//VQ1a9ZUmzZtZLPZSmy7detWjxUHAAAAoGQuhflbbrlFdrtdkjRgwABv1gMAAADARZc0Z74iYs4dAADWw/s3Kiu358xv3rxZDodDHTt2LLR806ZN8vPzU/v27T1WHACgkkpNlTIzS14fESHFxl6+egCgnHI7zI8ePVqTJk0qEuYPHjyo2bNna9OmTR4rDgBQCaWmSgkJUk5OyW0CAqTkZAI9gErP7SvA7tq1S23bti2yvE2bNtq1a5dHigIAVGKZmaUHealgfWkj9wBQSbgd5u12u3777bciy9PS0lS16iWd6RIAAACAG9wO8z179tTkyZOVlZXlXHbs2DE9+uij6tmzp0eLAwAAAFAyt4fSn3nmGXXp0kX169dXmzZtJEnbt29XnTp19Prrr3u8QAAAAADFczvM161bVzt27NCbb76p77//XoGBgbrnnnv05z//WdWqVfNGjZUDZ24AAACAm8o0yT04OFgjRozwdC2levLJJ/XBBx9o+/bt8vf317Fjx4q0SU1N1ejRo/XZZ58pMDBQgwYN0tNPPy1/f//LWqvbOHMDAAAAysClML969Wr17dtX1apV0+rVq0tte/PNN3uksAvl5eXpjjvuUGJiol599dUi6/Pz83XjjTfqiiuu0JdffqnDhw9r6NChMsbo+eef90pNHuPOmRsI8wAAAPiDS2F+wIABSk9PV+3atTVgwIAS29lsNuXn53uqtkKmT58uSVq6dGmx69euXatdu3bpwIEDio6OllQwv3/YsGF68sknuRocAFhFRETBXyMv9tfKiIjLVxMAlFMuhXmHw1Hs/8uTb775Ri1atHAGeUnq3bu3cnNzlZSUpO7duxf7uNzcXOXm5jrvZ2dne71WwG18pwKVSWxswbRCXvMAcFEuhfnw8HD9/PPPioiI0PDhw/Xss8+qevXq3q7NLenp6apTp06hZTVr1pS/v7/S09NLfNysWbOco/5AucR3KlAZxcbyegYAF7h0nvm8vDzniPWyZcuUc7H53S6aNm2abDZbqbctW7a43J/NZiuyzBhT7PJzzp0z/9ztwIEDZdoWwGu4GiYAACiBSyPziYmJGjBggNq1aydjjMaNG6fAwMBi2/7zn/90+cnHjBmju+66q9Q2DRo0cKmvyMhIbdq0qdCyo0eP6syZM0VG7M9nt9tlt9tdeg4AAACgPHEpzL/xxhuaP3++9u7dK0nKysryyOh8RESEIjz0BabExEQ9+eSTSktLU1RUlKSCL8Xa7Xa1a9fOI88BAAAAlCcuhfk6deroqaeekiTFxcXp9ddfV61atbxa2IVSU1N15MgRpaamKj8/X9u3b5ckNW7cWCEhIerVq5eaNWumwYMHa+7cuTpy5Igefvhh3XfffeX/TDacuQEAAABl4PYXYLt37+6TizA9/vjjWrZsmfN+mzZtJEnr169Xt27d5Ofnpw8++ECjRo1S586dC100qtzjzA0AAAAoA5sxxlysUUhIiHbs2KGGDRvKz89P6enpuuKKKy5HfZdddna2wsLClJWVVf5H9FE5bN0quTJV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AwcOONft2rVLWVlZatq0qSSpbdu2Sk5OVuPGjYvcqlQp+6+WVq1aafv27Tpy5MhF29apU0d169bVr7/+WqSGuLg4l5/T399f+fn5RZZXrVpVPXr00Jw5c7Rjxw7t27dPn332mVvb46rGjRurWrVqhb6EfPToUefpOyWpTZs2ys/PV0ZGRpHtPf+MQMOHD1eLFi302muvadKkSdq1a5dXagYA+B4j80Als3DhQnXq1ElXX321ZsyYoVatWuns2bNat26dFi1apN27d6tHjx5q1aqV7r77bi1YsMD5BdiuXbuqffv2kqTHH39cN910k2JiYnTHHXeoSpUq2rFjh3bu3KknnniizPX9+c9/1syZMzVgwADNmjVLUVFR2rZtm6KjowtNQTln2rRpGjdunEJDQ9W3b1/l5uZqy5YtOnr0qB566CGXnrNBgwY6ceKEPv30U7Vu3VpBQUH67LPP9Ouvv6pLly6qWbOmPvzwQzkcjkLTXjwpJCRE9957ryZOnKhatWqpTp06mjJlSqEPRk2aNNHdd9+tIUOG6JlnnlGbNm2UmZmpzz77TC1btlS/fv304osv6ptvvtGOHTsUExOjjz76SHfffbc2bdokf39/r9QOAPAdRuaBSiYuLk5bt25V9+7dNWHCBLVo0UI9e/bUp59+qkWLFkn676kia9asqS5duqhHjx5q2LCh3nnnHWc/vXv31vvvv69169apQ4cOuuaaazRv3jzVr1//kurz9/fX2rVrVbt2bfXr108tW7bUU089VWRayTl//etf9corr2jp0qVq2bKlunbtqqVLl7o1Mt+pUyeNHDlSAwcO1BVXXKE5c+aoRo0aWrlypa6//no1bdpUL730kt5++201b978kravNHPnzlWXLl108803q0ePHrr22mvVrl27Qm2WLFmiIUOGaMKECUpISNDNN9+sTZs2KSYmRj/99JMmTpyohQsXOr/v8OKLL+rYsWN67LHHvFY3AMB3bMaViZoAAAAAyh1G5gEAAACLIswDAAAAFkWYBwAAACyKMA8AAABYFGEeAAAAsCjCPAAAAGBRhHkAAADAogjzAAAAgEUR5gEAAACLIswDAAAAFkWYBwAAACzq/wOLDcqepY7cPgAAAABJRU5ErkJggg==",
"text/plain": [
"
"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"#plt.figure(figsize=(5,4))\n",
"plt.plot(ridge.coef_, 's', label = 'Ridge Coefficients', color = 'red')\n",
"plt.plot(lasso.coef_, '^', label = 'Lasso Coefficients', color = 'blue')\n",
"plt.xlabel(\"Coefficients' Index\")\n",
"plt.ylabel(\"Coefficients' Magnitude\")\n",
"plt.legend(loc=(1.01,0.915));"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Question 2"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Total 18 points**"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"For this question we will use a dataset with the medical details of patients for predicting the onset of diabetes within 5 years. The target is the last column of the dataset, where value 1 is interpreted as \"tested positive for diabetes\".\n",
" 1. Import the csv file \"diabetes.csv\" into pandas dataframe (1pt)\n",
" 2. How many duplicate rows do we have? If there are any, remove them. (1pt)\n",
" 3. Generate descriptive statistics for all the numerical columns with one line of code (1pt)\n",
" 4. Plot the distribution of the target value, per class percentages (1pt)\n",
" 5. Split the dataset into training, validation and test set, with the ratio 50:30:20, and use the `random_seed=42` (1pt)\n",
" 6. Train the logistic regression with solver='liblinear' with regularization strength equal to 0.01 with lasso regularization and that stops converging after 700 iterations (2pt) \n",
" 7. Use the validation set to find the value of the threshold that maximizes f1 score (of Class 1). What is that threshold value? (1pt)\n",
" 8. If we use the threshold value found above, how many false negatives do we have on the test dataset? (1pt)\n",
" 9. What is the precision of our model with the value of threshold from step 7? (1pt)\n",
" 10. What proportion (approximately) of patients with diabetes would we reach if we decided to contact 60% of the patients in the test set, ordered by the decreasing model score (1pt)\n",
" 11. Use the data available (except the test set) with a cross validation method that finds the value of regularization strength of l1 penalty of Logistic regression that maximizes recall. Check at least 8 different values of the parameter and verify the best cross validation score (4pt)\n",
" 12. What value of C gives the highest recall (1pt)\n",
" 13. What was the second best mean test value of recall in cross validation (1pt)\n",
" 14. What is f1 score of the best model (1pt)\n"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 2.1. Import the csv file \"diabetes.csv\" into pandas dataframe (1pt)"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {},
"outputs": [],
"source": [
"df = pd.read_csv('diabetes.csv')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 2.2. How many duplicate rows do we have? If there are any, remove them. (1pt)"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"771\n",
"Number of duplicate rows: 3\n",
"768\n"
]
}
],
"source": [
"print(len(df))\n",
"print(f\"Number of duplicate rows: {df.duplicated().sum()}\")\n",
"\n",
"df.drop_duplicates(keep = 'first', inplace=True)\n",
"print(len(df))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 2.3. Generate descriptive statistics for all the numerical columns with one line of code (1pt)"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
"
],
"text/plain": [
"LogisticRegression(C=100.0, max_iter=700, penalty='l1', solver='liblinear')"
]
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#Standardization could be performed but it was not required. \n",
"\n",
"from sklearn.linear_model import LogisticRegression\n",
"\n",
"log_reg = LogisticRegression(solver = 'liblinear', C = (1/0.01), penalty = 'l1', max_iter = 700)\n",
"log_reg.fit(X_train, y_train)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 2.7. Use the validation set to find the value of the threshold that maximizes f1 score (of Class 1). What is that threshold value? (1pt)"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {},
"outputs": [],
"source": [
"from sklearn.metrics import precision_recall_curve\n",
"y_pred_proba_val= log_reg.predict_proba(X_val)\n",
"precision, recall, threshold = precision_recall_curve(y_val, y_pred_proba_val[:,1])"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Best threshold: 0.2626832463017761\n"
]
}
],
"source": [
"import numpy as np\n",
"f1_scores = 2*recall*precision/(recall+precision)\n",
"idx_best=np.nanargmax(f1_scores)\n",
"best_threshold=threshold[idx_best]\n",
"print('Best threshold: ', best_threshold)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 2.8. If we use the threshold value found above, how many false negatives do we have on the test dataset? (1pt)"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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tm/frmnTpik5OVnx8fFas2aNunTpori4OCUlJSkvL08zZ86Uw+HQuHHjVF9fr02bNunYsWOaNWuWJk+erHnz5mnatGn67//+b3355Zf6zW9+49PX27NnTzU1NenJJ5/U+PHj9f777+t3v/tds/1iYmL085//XE888YRiYmJ0991366KLLnIn9gceeEDXXXedMjIy9KMf/UhRUVH69NNPtW3bNv3617/2/T8CgE+YtQ58y2az6fXXX9dll12m2267Tb1799aNN96oL7/80j3L/IYbbtADDzygOXPmaNiwYdq7d69+9rOfnfW8999/v375y1/qgQceUL9+/XTDDTeooqJC0snx5yeeeELLli1Tenq6JkyYIEm6/fbb9fvf/14rV67UwIEDNWrUKK1cudJ9u1q7du305z//WTt27NCQIUM0b948LVy40Kev98ILL9TixYu1cOFCDRgwQM8++6wKCgqa7ZeQkKA5c+Zo8uTJysnJUXx8vJ577jn39quvvlp/+ctfVFJSohEjRuiiiy7S4sWL1a1bN5/iAdAyNiMQg20AACAkqMgBADAxEjkAACZGIgcAwMRI5AAAmBiJHAAAEyORAwBgYiRyAABMjEQOAICJkcgBADAxEjkAACZGIgcAwMT+P0SAuLVMsAmRAAAAAElFTkSuQmCC",
"text/plain": [
"
"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay\n",
"y_pred_proba_test= log_reg.predict_proba(X_test)\n",
"y_pred_new = (y_pred_proba_test[:,1] >= best_threshold).astype(int)\n",
"cm=confusion_matrix(y_test, y_pred_new)\n",
"from sklearn.metrics import ConfusionMatrixDisplay\n",
"ConfusionMatrixDisplay(cm).plot();"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"False negatives: 12\n"
]
}
],
"source": [
"print(f\"False negatives: {cm[1][0]}\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 2.9. What is the precision of our model with the value of threshold from step 7? (1pt)"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.5375"
]
},
"execution_count": 41,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from sklearn.metrics import precision_score\n",
"\n",
"precision_score(y_test, y_pred_new)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 2.10. What proportion (approximately) of patients with diabetes would we reach if we decided to contact 60% of the patients in the test set, ordered by the decreasing model score (1pt)"
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 42,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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fft2Bg8eTK1atTyvd+TIkbhcLn7//fezHr9nz57ExMR4HtepU4fatWuX+pt07tyZhQsX8p///IdNmzbhcDgq/Tp84Zprrimz7rbbbqOoqIjFixd71i1YsACz2cyIESMA2LdvH3v27PGccTv5b9W/f3/S09PZu3evf16EECeR5EaIc5CUlERkZCQHDhzwWRuJiYmlHoeFhZ12fXFxsVfazM/P57LLLuPHH3/kP//5D99++y2bN2/mk08+Adx3I1WF0Wjk5ptvZunSpVitVsBd5khJSaFPnz6e7Y4dO8Znn31WJhlp27YtwBlv427UqBFAmUSvVatWbN68mc2bN3PHHXeUei4tLY3LLruMI0eO8MILL7B+/Xo2b97MK6+8UuHXW6tWrTLrzGZzqX0XL17MLbfcwptvvknXrl1JTExk5MiRZGRknPa4/niPlVdGbNu2LRdffLEnEXW5XLz//vsMGTLE8947duwYAA888ECZv9XYsWOBM/+thPAVueZGiHNgMBi48sor+fzzzzl8+DANGjQ46z5msxmbzVZm/Zmuu6iK8PBwgDJtVeTL5uuvv+bo0aN8++23nrM1gCchORe33norzz77rOe6jOXLlzN+/HgMBoNnm6SkJNq3b8/MmTPLPUa9evVOe/zLL78co9HI8uXLufPOOz3rIyIi6NSpE+A+M3SyZcuWUVBQwCeffELjxo0963fs2FGVl3haSUlJzJ07l7lz55KWlsby5cuZPHkymZmZfPHFF+Xu44/32OnGOLr11lsZO3Ysu3fv5s8//yQ9PZ1bb7211OsBmDJlCldffXW5x2jVqtVZ4xXC2+TMjRDnaMqUKSiluOOOO7Db7WWedzgcfPbZZ57HTZo04eeffy61zddff01+fr5X4yoZaO7UtpYvX37WfUu+7Mxmc6n1r732WpltS7ap6NmcNm3a0KVLFxYsWMCHH36IzWYr9YUJ7lLcr7/+ynnnnUenTp3K/Hem5CYlJYXbbruNlStXsmjRogrFVN7rVUrxxhtvVGj/qmjUqBF33303V111Fdu2bTvjtoF6j914442Eh4ezcOFCFi5cSP369endu7fn+VatWtGiRQt27txZ7t+pU6dOpUp1QviLnLkR4hx17dqV+fPnM3bsWFJTU/n3v/9N27ZtcTgcbN++nddff5127doxaNAgwH3HzKOPPspjjz1Gjx492LVrFy+//DJxcXFejatu3br06tWLWbNmkZCQQOPGjfnqq688paUz6datGwkJCYwZM4Zp06ZhMpn44IMP2LlzZ5ltL7jgAgCefvpp+vXrh8FgoH379p7yWXluu+027rrrLo4ePUq3bt3K/Lp//PHHWbt2Ld26dePee++lVatWFBcXc/DgQVatWsWrr756xjMYc+fO5cCBA9x0000sX77cM4hfYWEhe/bsYdGiRYSHh2MymQC46qqrCAsL48Ybb2TSpEkUFxczf/58LBbLWfuqonJycujZsycjRoygdevWxMTEsHnzZr744ovTnvUoEaj3WHx8PMOGDWPhwoVYrVYeeOCBUne5gTvh7devH3369GHUqFHUr1+f7Oxsdu/ezbZt2/j4448r11FCeEOAL2gWImTs2LFD3XLLLapRo0YqLCxMRUVFqY4dO6rHHntMZWZmeraz2Wxq0qRJqmHDhioiIkL16NFD7dix47R3smzevLlUOyV3Nh0/frzU+ltuuUVFRUWVWpeenq6uvfZalZiYqOLi4tT//d//qS1btlTobqmNGzeqrl27qsjISJWcnKxGjx6ttm3bVmZfm82mRo8erZKTk5VOpzvtODcny8nJUREREQpQb7zxRrn9efz4cXXvvfeqpk2bKpPJpBITE1VqaqqaOnVqqbF2Tsflcql3331XXXXVVSopKUkZjUYVFxenOnfurB599FF1+PDhUtt/9tlnqkOHDio8PFzVr19fPfjgg+rzzz8vc8fZmca5OdXJr7+4uFiNGTNGtW/fXsXGxqqIiAjVqlUrNW3aNFVQUHDW16OU/95jJ1uzZo1n/KLff/+93G127typrr/+elW7dm1lMplU3bp11RVXXKFeffXVCr0uIbxNpl8QQgghREiRa26EEEIIEVIkuRFCCCFESJHkRgghhBAhRZIbIYQQQoQUSW6EEEIIEVIkuRFCCCFESKlxyY1SitzcXOQOeCGEECI01bjkJi8vj7i4OPLy8rx+bJvNxowZM8qd00V4j/Szf0g/+4f0s/9IX/tHdejnGpfcCCGEECK0SXIjhBBCiJAiyY0QQgghQookN0IIIYQIKZLcCCGEECKkSHIjhBBCiJAiyY0QQgghQookN0IIIYQIKZLcCCGEECKkSHIjhBBCiJAiyY0QQgghQookN0IIIYQIKQFNbr777jsGDRpEvXr10Ol0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",
"text/plain": [
"
"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from sklearn_evaluation.plot import cumulative_gain\n",
"cumulative_gain(y_test, y_pred_proba_test)"
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"If we decided to contact 60% of the patients in the test set, we would reach approximately 80% of the patients with diabetes.\n"
]
}
],
"source": [
"print(\"If we decided to contact 60% of the patients in the test set, we would reach approximately 80% of the patients with diabetes.\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 2.11. Use the data available (except the test set) with a cross validation method that finds the value of regularization strength of l1 penalty of Logistic regression that maximizes recall. Check at least 8 different values of the parameter and verify the best cross validation score (4pt)"
]
},
{
"cell_type": "code",
"execution_count": 44,
"metadata": {},
"outputs": [],
"source": [
"from sklearn.model_selection import GridSearchCV, RandomizedSearchCV"
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([0.002, 0.032, 0.062, 0.092, 0.122, 0.152, 0.182, 0.212])"
]
},
"execution_count": 45,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.arange(0.002, 0.22, 0.03)"
]
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {},
"outputs": [],
"source": [
"param_grid = {'C': np.arange(0.002, 0.22, 0.03)}\n",
"\n",
"grid_search = GridSearchCV(LogisticRegression(solver=\"liblinear\", penalty='l1'), param_grid, scoring='recall')"
]
},
{
"cell_type": "code",
"execution_count": 47,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.