Introducción #
Ejemplo extraído del video Machine Learning episodio 2. Algoritmos de regresión
El ejemplo esta creado el Jupiter Notebool y se irá poniendo el código de las distintas celdas
Código #
Se cargan las librerias
# Regresor de KNN o vecinos cercanos
from sklearn.neighbors import KNeighborsRegressor
# Set de datos de boston
from sklearn.datasets import load_boston
# Divide los datos entre entrenamiento y testing
from sklearn.model_selection import train_test_split
# Algoritmos de regresión linea y ridge
from sklearn.linear_model import LinearRegression, Ridge
Carga del modelo de datos que se van a usar
# A la variable boston se le asigna el set de datos. Que son los precios de las
# casas en boston que depende de varías características
boston = load_boston()
# Visualiza las claves que tiene los datos
boston.keys()
Son sentencias que permite los datos del modo cargado en el paso anterior.
Si se descomenta las sentencia y se ejecuta se van viendo los datos #
# La data son las características
#boston.data
# Respuestas a nuestras características
#boston.target
# Ver los ejemplos que hay en data. Que devuelve 506, 13. Que son 506 casa
# con 13 características
#boston.data.shape
# Si se hace lo mismo pero con el target devuelve 506 respuestas
#boston.target.shape
Variables que se usarán para el entrenamiento y test
# Las que terminan en "_ent" son para entrenar y las que terminan
# en "_test" son para testing.
# Estas variables se inicializan con la data o características y las etiquetas
X_ent, X_test, y_ent, y_test = train_test_split(boston.data, boston.target)
Permite ver que se datos se usan para entrenamiento y para test
# Si hacemos esto se que son los datos que ha usado para entrenar. Que serán 379, 13
print("Datos para entrenar:",X_ent.shape)
# Y para testing devuelve el resto 127, 13
print("Datos para testing:",X_test.shape)
# resto de variables que son los vector pero sin las características.
# Solo devuelve 379 para _ent y 127 para _test
print("Datos y para entrenar:", y_ent.shape)
print("Datos y para testing:", y_test.shape)
Primer algoritmo de regresion líneal.
# Variable que se le asocia con el algoritmo de vecinos cercanos. Pasándole
# que considere 3 vecinos.
knn = KNeighborsRegressor(n_neighbors=3)
Datos de entrenamiento
# Se le pasa al algoritmo los datos de entrenamiento y los valores
# objetivos o guia. Al ejecutar se visualizará los parámetros
# del algoritmo que han sido modificados, como es el número de vecinos.
knn.fit(X_ent,y_ent)
Resultado del entrenamiento
# Para saber como aprendio nuestro algoritmo se le pasan los
# datos de test.
# Si se le pasa 3 vecinos el % de aprendizaje es un 48%. Pero si se le
# sube el valor del parámetro n_neighbors a 5 el % de aprendizaje
# disminuye al 47%.
# Y si ponemos 4 es un poco inferior al 3. Por ello, el más optimo
# es dejarlo en 3 para este set de datos.
knn.score(X_test,y_test)
Borrao de datos para probar otros algoritmos.
# Se borra el contenido de la variable para poder usar la libreria
# "LinearRegressionLinearRegression"
# El objetivo de borrar es evitar que la maquia se sature al procesos varios modelos
del knn
Se repiten los mismos pasos para usar otro algoritmo.
rl = LinearRegression()
# Se alimenta con los mismos datos que para el algoritmo de vecinos cercanos
rl.fit(X_ent,y_ent)
# Vamos a ver cual ha sido su nivel de aprendizaje. Pasandole
# los mismos datos que para el KNN. En este caso ha aprendido un 72%
# mucho mejor que el 48% del KNN
rl.score(X_test,y_test)
# Ahora se va borra el algoritmo usado para utilizar el algoritmo de ridger
del rl
Lo mismo pero para el algoritmo ridge
ridge = Ridge(alpha=1)
# Se vuelve alimentar con los mismo datos de los algoritmos anteriores
ridge.fit(X_ent, y_ent)
# Y ahora a ver cuanto ha aprendido
# Devuelve un 72%(redonde hacia arriba) que es un poco mejor al
# algoritmo de regression lineal. Cambiando el parámetro alpha a 0.5
# devuelve un valor sensible inferior al valor por defecto que es alpha = 1
ridge.score(X_test,y_test)
del ridge