Ejercicio
Trabajar con el dataset de Diabetes
[1]:
# Imports
from sklearn.datasets import load_diabetes
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
Cargamos el dataset y mostramos su descripción
[2]:
diabetes = load_diabetes(as_frame=True)
df = diabetes.frame
print(diabetes.keys()) # Para saber que obtenemos al descargar el conjunto de datos
print(diabetes.DESCR)
dict_keys(['data', 'target', 'frame', 'DESCR', 'feature_names', 'data_filename', 'target_filename', 'data_module'])
.. _diabetes_dataset:
Diabetes dataset
----------------
Ten baseline variables, age, sex, body mass index, average blood
pressure, and six blood serum measurements were obtained for each of n =
442 diabetes patients, as well as the response of interest, a
quantitative measure of disease progression one year after baseline.
**Data Set Characteristics:**
:Number of Instances: 442
:Number of Attributes: First 10 columns are numeric predictive values
:Target: Column 11 is a quantitative measure of disease progression one year after baseline
:Attribute Information:
- age age in years
- sex
- bmi body mass index
- bp average blood pressure
- s1 tc, total serum cholesterol
- s2 ldl, low-density lipoproteins
- s3 hdl, high-density lipoproteins
- s4 tch, total cholesterol / HDL
- s5 ltg, possibly log of serum triglycerides level
- s6 glu, blood sugar level
Note: Each of these 10 feature variables have been mean centered and scaled by the standard deviation times the square root of `n_samples` (i.e. the sum of squares of each column totals 1).
Source URL:
https://www4.stat.ncsu.edu/~boos/var.select/diabetes.html
For more information see:
Bradley Efron, Trevor Hastie, Iain Johnstone and Robert Tibshirani (2004) "Least Angle Regression," Annals of Statistics (with discussion), 407-499.
(https://web.stanford.edu/~hastie/Papers/LARS/LeastAngle_2002.pdf)
Mostramos la matriz de correlación
[3]:
plt.figure(figsize=(10,10))
cm = np.corrcoef(df[df.columns].values.T)
sns.set(font_scale=1.5)
hm = sns.heatmap(cm, cbar=True,annot=True, square=True, fmt='.2f',
annot_kws={'size': 15}, yticklabels=df.columns, xticklabels=df.columns)
plt.show()
Ejercicio
Realiza una regresión Lasso con todas las características. Debes seleccionar el mejor valor para el hiperparàmetro alpha en el rango \(10^{-6}\), 100.
Muestra por pantalla el mejor alpha y el mejor score
Realiza un plot donde muestres los residuos (la diferencia entre los valores reales y la predicción) frente a los valores predichos. ¿Cómo es esta distribución?
[4]:
from sklearn.linear_model import Lasso
[6]:
X = diabetes.data
y = diabetes.target
alphas = np.linspace(0.000001, 100, 100)
for a in alphas:
lasso = Lasso(alpha= 0)#...TODO
# ...
Ejercicio 2
Vamos a hacer una segunda versión sobre este ejercicio usando una Regresión polinómica:
Crea un polinomio de grado 1 y compara el resultado con el obtenido con la regressión LASSO. Que sucede?
Crea polinómios de grados mayores, que sucede con el score ?
[ ]:
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression
[ ]:
Ejercicio 3
Evidentemente parece que lo que estamos consiguiendo es realizar overfitting sobre el conjunto de datos. Los dividimos en dos conjuntos usando la función train_test_split
y de esta manera obtendremos un conjunto de test. Ver documentación enlace
Trabajaremos con una métrica diferente: MSE enlace
Dividir el conjunto de datos y los valores objetivo en 2 conjuntos. Nos quedaremos el 70% para entrenamiento.
Probar regresiones polinómicas con diferentes grados. Nos quedaremos con la que tenga mejor MSE en el conjunto de test.
Realiza un plot donde se vea la evolución del MSE en el conjunto de test.
Añade el MSE del conjunto de entrenamiento. Que podemos observar?
Nota: Intenta automatizar el proceso realizando un bucle sobre el grado del polinómio
[156]:
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
[ ]:
Isaac Lera and Gabriel Moya Universitat de les Illes Balears isaac.lera@uib.edu, gabriel.moya@uib.edu