Breaking

Post Top Ad

Your Ad Spot

viernes, 14 de junio de 2019

Regresión lineal múltiple con Python

Introducción

La regresión lineal es uno de los algoritmos más utilizados en el aprendizaje automático. Querrá familiarizarse con la regresión lineal porque necesitará usarla si está tratando de medir la relación entre dos o más valores continuos.
Una inmersión profunda en la teoría y la implementación de la regresión lineal lo ayudará a comprender este valioso algoritmo de aprendizaje automático.

Definiendo terminos

Antes de profundizar en la regresión lineal, tomemos un momento para asegurarnos de que tenemos claro qué es la regresión.
En el aprendizaje automático, hay dos tipos diferentes de métodos de aprendizaje supervisado: clasificación y regresión .
En general, la regresión es un método estadístico que estima las relaciones entre variables. La clasificación también intenta encontrar relaciones entre las variables, con la diferencia principal entre la clasificación y la regresión es la salida del modelo.
En una tarea de regresión, la variable de salida es de naturaleza numérica o continua, mientras que para las tareas de clasificación, la variable de salida es de naturaleza categórica o discreta. Si una variable es categórica, significa que hay un número finito / discreto de grupos o categorías en los que la variable puede encajar.
Considere un clasificador que intente predecir qué tipo de mamífero es un animal, basado en diferentes características. Aunque hay muchos mamíferos, no hay infinitos, solo hay tantas categorías posibles en las que se puede clasificar la producción.
En contraste, las variables continuas tendrán un número infinito de valores entre cualquiera de las dos variables. La diferencia entre dos números dados se puede representar como un número infinito de formas, escribiendo decimales cada vez más largos. Esto significa que incluso cosas como las mediciones de fecha y hora pueden considerarse variables continuas si las mediciones no se clasifican en categorías discretas.
Mientras que las tareas de regresión se ocupan de estimar la relación entre alguna variable de entrada con una variable de salida continua, existen diferentes tipos de algoritmos de regresión :
  • Regresión lineal
  • Regresión polinomial
  • Regresión escalonada
  • Regresión de cresta
  • Regresión de lazo
  • Regresión ElasticNet
Estos diferentes tipos de regresión son adecuados para diferentes tareas. La regresión de cresta se usa mejor cuando hay un alto grado de colinealidad o relaciones casi lineales en el conjunto de características. Mientras tanto, la regresión polinomial se utiliza mejor cuando existe una relación no lineal entre las características, ya que es capaz de dibujar líneas de predicción curvas.
La regresión lineal es uno de los tipos de regresión más utilizados, adecuado para trazar una línea recta a través de un gráfico que muestra una relación lineal entre las variables.

Teoría detrás de la regresión lineal múltiple

Una regresión lineal simplemente muestra la relación entre la variable dependiente y la variable independiente .
Si la regresión lineal es solo el trazado de una relación entre una variable independiente (X) y una variable dependiente (Y), puede adivinar que la regresión lineal multivariada / múltiple es solo una regresión lineal realizada en más de una variable independiente .
Echemos un vistazo a la ecuación para la regresión lineal, ya que comprender cómo funciona lo ayudará a saber cuándo aplicarla.
La ecuación para la regresión lineal es: Y = a+b*XEn una tarea de regresión lineal tendremos los parámetros ( ab) estimados por nuestro modelo. Luego tomaremos la constante, o la intercepción a, y agregaremos la pendiente de la línea bmultiplicada por la variable independiente X(nuestra función de entrada), para calcular el valor de la variable dependiente ( Y).
La imagen de arriba es un ejemplo de cómo se ve una relación lineal entre las variables XY.
La ecuación utilizada para calcular los valores de abpara la mejor línea de ajuste es el Método de mínimos cuadrados , que funciona al minimizar la distancia al cuadrado de cada punto de datos a la línea que se dibuja. No necesita saber cómo funciona la ecuación exactamente para implementar Regresión lineal, pero si tiene curiosidad, puede leer más sobre esto en el enlace de arriba.
Si Y = a+b*Xes la ecuación para la regresión lineal singular, entonces se sigue que para la regresión lineal múltiple, el número de variables independientes y pendientes se insertan en la ecuación.
Por ejemplo, aquí está la ecuación para regresión lineal múltiple con dos variables independientes:
Y=una+segundo1X1+segundo2X2
Esto es válido para cualquier número dado de variables.
La regresión lineal multivariable se puede pensar como modelos de regresión lineal regular múltiple , ya que solo está comparando las correlaciones entre las características para el número dado de características.
Para las ecuaciones mencionadas anteriormente, se supone que existe una relación lineal entre la variable dependiente y la variable o variables independientes. Esto también supone que las variables / características son todas valores continuos en lugar de valores discretos.

Implementando MLR

Convertir variables categóricas

Al implementar la regresión lineal en un sistema de aprendizaje automático, las variables deben ser de naturaleza continua , no categóricas . Sin embargo, con frecuencia tendrá datos que contienen variables categóricas y no variables continuas.
Por ejemplo, un conjunto de datos podría contener ocurrencias de algún evento en países específicos. Los países son variables categóricas. Para utilizar correctamente la regresión lineal, estas variables categóricas deben convertirse en variables continuas.
Hay varias maneras diferentes que esto se puede lograr , dependiendo del tipo de variable en cuestión. Las variables pueden ser dicotómicas, nominales u ordinales.

Variables dicotómicas

Las variables dicotómicas son aquellas que existen en solo una de dos categorías. Una variable dicotómica es "sí" o "no", blanca o negra. Las variables dicotómicas son fáciles de convertir en variables continuas, simplemente deben estar etiquetadas 01.

Variables nominales / ordinales

Las variables nominales y ordinales son tipos de variables categóricas, y puede haber cualquier número de categorías a las que puedan pertenecer los valores. En términos de variables ordinales, se supone que hay un cierto orden en las variables, o que las variables deben tener diferentes ponderaciones. Por lo tanto, las variables categóricas se pueden convertir en valores continuos asignándoles números comenzando desde cero y corriendo hasta la longitud de las categorías.
Converting nominal variables into continuous variables is the most challenging task out of all three types of conversion. This is because nominal variables should not have a different weight or order attached to them, it is presumed that all categorical variables have equivalent "values". This means that you cannot simply order them from zero to the number of categories as this would imply that the earlier categories have less "value" than later categories.
Por esta razón, la táctica predeterminada para transformar variables nominales en variables continuas es algo que se denomina codificación instantánea , a veces denominada "creación de variables ficticias". Esencialmente, creas más características o variables que corresponden a las categorías reales en tus datos. El proceso de codificación instantánea significa crear una matriz del tamaño de su número de categorías y completarlas con una "uno" en la posición correspondiente a la categoría relevante y ceros en cualquier otra parte.
Para un ejemplo, aquí hay una tabla con datos categóricos:
Color
rojo
Verde
Azul
Después de pasar esta tabla a través del proceso de codificación en caliente, termina pareciéndose a esto:
rojoVerdeAzul
100
010
001
Cuando esté creando etiquetas continuas para sus variables categóricas, asegúrese de que los valores correspondan realmente al significado de la categoría en cuestión. Si tiene variables ordinales y el rango de valores que le dan, no tenga en cuenta el rango, las relaciones entre las categorías se perderán y su clasificador se verá afectado negativamente.

Línea de aprendizaje de máquina

Antes de ver un ejemplo de implementación de regresión lineal múltiple en un conjunto de datos reales, tomemos un momento para comprender el flujo de trabajo de aprendizaje automático o la tubería .
Cada implementación de algoritmos de aprendizaje automático tiene los mismos componentes básicos. Necesitas:
  • Preparar los datos
  • Crear el modelo
  • Entrenar a la modelo
  • Evaluar el modelo
La preparación de los datos suele ser una de las partes más difíciles del aprendizaje automático, ya que implica no solo recopilar los datos sino también transformarlos en un formato que puede ser utilizado por el algoritmo elegido. Esto implica muchas tareas como tratar con valores perdidos o datos corruptos / mal formados. Por este motivo, utilizaremos un conjunto de datos prefabricados que requiere poco procesamiento previo.
Crear el modelo de aprendizaje automático es bastante sencillo cuando se utiliza una biblioteca como Scikit-Learn . Normalmente, solo son necesarias unas pocas líneas de código para crear una instancia de un algoritmo de aprendizaje automático determinado. Sin embargo, hay diferentes argumentos y parámetros que toman estos algoritmos que afectarán la precisión de su modelo. El arte de elegir los valores de parámetros correctos para el modelo le llegará con el tiempo, pero siempre puede consultar la documentación del algoritmo en la biblioteca elegida para ver con qué parámetros puede experimentar.
La capacitación del modelo también es bastante sencilla cuando se utiliza una biblioteca como Scikit-Learn, ya que, una vez más, generalmente solo se necesitan unas pocas líneas de código para entrenar el algoritmo en el conjunto de datos elegido.
Sin embargo, debe asegurarse de haber dividido sus datos en conjuntos de entrenamiento y pruebas . No puede evaluar el rendimiento de su clasificador en el mismo conjunto de datos en el que lo ha entrenado, ya que su modelo ya ha aprendido los parámetros de este conjunto de datos. La evaluación de los datos en el conjunto de capacitación no le dará ninguna información sobre el rendimiento de su modelo en otro conjunto de datos.

Ejemplo de implementación de MLR

Sin más demora, examinemos cómo realizar una regresión lineal múltiple utilizando el módulo Scikit-Learn para Python.
Primero, necesitamos cargar en nuestro conjunto de datos. Estamos usando la biblioteca Scikit-Learn y viene empaquetado con algunos conjuntos de datos de muestra. El conjunto de datos que usaremos es el conjunto de datos de viviendas de Boston . El conjunto de datos tiene muchas características diferentes sobre las casas en el área de Boston, como el tamaño de la casa, la tasa de delincuencia, la edad de construcción, etc. El objetivo es predecir el precio de la casa según estas características.
Aquí están todas las importaciones que necesitamos:
import numpy as np  
import pandas as pd  
from sklearn.model_selection import train_test_split  
from sklearn.datasets import load_boston  
from sklearn.metrics import mean_squared_error, r2_Score  
Ahora necesitamos crear una instancia del conjunto de datos, llamando a la load_boston()función:
bh_data = load_boston()  
Imprimamos el valor de la variable de datos para ver qué tipo de datos contiene:
print(bh_data.keys())  
Esto es lo que recuperamos:
dict_keys(['data', 'target', 'feature_names', 'DESCR'])  
El dataes toda la información real en relación con las casas, mientras que el targetes el precio de la casa, el feature namesson los nombres de las categorías de los datos cae en, y DESCRes un comando para describir las características del conjunto de datos.
Estamos tratando de obtener los datos y los nombres de las características en un marco de datos que nuestro modelo puede usar, por lo que vamos a crear un objeto de marco de datos a partir de los datos utilizando Pandas .
También pasamos los nombres de las características como encabezados de columna:
boston = pd.Dataframe(bh_data.data, columns=bh_data.feature_names)  
Si queremos tener una idea de los tipos de características en el conjunto de datos, podemos imprimir algunas de las filas, junto con una descripción de cuáles son las características:
print(data.DESCR)  
Aquí hay algunas de las descripciones que se devuelven:
CRIM: Per capita crime rate by town  
ZN: Proportion of residential land zoned for lots over 25,000 sq. ft  
INDUS: Proportion of non-retail business acres per town  
...
LSTAT: Percentage of lower status of the population  
MEDV: Median value of owner-occupied homes in $1000s  
Queremos predecir el valor mediano de una casa, pero nuestro conjunto de datos actual no tiene esa información para entrenar / probar, así que creamos una nueva columna en el marco de datos y cargamos los valores objetivo del conjunto de datos.
Esto se hace simplemente especificando el marco de datos y el nombre de la columna que queremos crear en la variable, luego seleccionando los targetvalores:
boston['MEDV'] = bh_data.target  
Normalmente, haría un análisis de datos para averiguar cuáles son las características más importantes y utilizar esas variables para la regresión. Sin embargo, ese podría ser un artículo por sí solo, por lo que en este caso, solo le diré que las características con las correlaciones más fuertes son la proporción de "estado más bajo" en la población ('LSTAT') y el número de habitaciones en la casa ('RM').
Así que usemos 'RM' y 'LSTAT' como nuestras variables para la regresión lineal. Estos valores ya son continuos en nuestro conjunto de datos, por lo que no necesitamos codificarlos en absoluto.
Sin embargo, concatenemos las dos columnas variables en una sola columna con el comando de labiblioteca Numpynp.c_ . También crearemos una nueva variable para almacenar los valores de destino especificando el bostonmarco de datos y la columna que queremos:
X = pd.DataFrame(np.c_[boston['LSTAT'], boston['RM']], columns=['LSTAT','RM']  
Y = boston['MEDV']  
Ahora dividamos el marco de datos en conjuntos de entrenamiento y prueba:
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state=9)  
Ahora necesitamos crear una instancia del modelo, lo que hacemos simplemente llamando a la LinearRegressionfunción desde Scikit-Learn:
lin_reg_mod = LinearRegression()  
Ahora encajamos el modelo en los datos de entrenamiento:
lin_reg_mod.fit(X_train, y_train)  
Ahora que el modelo se ha ajustado, podemos hacer predicciones llamando al predictcomando. Estamos haciendo predicciones sobre el conjunto de pruebas:
pred = lin_reg_mod.predict(X_test)  
Ahora verificaremos las predicciones contra los valores reales mediante el uso de las métricas RMSE y R-2, dos métricas que se usan comúnmente para evaluar las tareas de regresión:
test_set_rmse = (np.sqrt(mean_squared_error(y_test, pred)))

test_set_r2 = r2_score(y_test, pred)  
Excelente. Nuestras variables almacenan la evaluación del modelo y tenemos una implementación completa de regresión lineal múltiple en un conjunto de datos de muestra.
Imprimamos las métricas de precisión y veamos qué resultados obtenemos:
print(test_set_rmse)  
print(test_set_r2)  
Aquí están nuestros resultados:
# Note that for rmse, the lower that value is, the better the fit
6.035041736063677  
# The closer towards 1, the better the fit
0.6400551238836978  
Podría intentar usar más funciones para mejorar la precisión del modelo.

Conclusión

La regresión lineal multivariada / múltiple es un algoritmo extremadamente útil para rastrear las relaciones de las variables continuas. También es uno de los algoritmos más utilizados en el aprendizaje automático, por lo que vale la pena familiarizarse con él.
Ahora que entiende la teoría detrás de la regresión lineal y ha visto un ejemplo de su uso en un conjunto de datos real, debe intentar implementarlo en diferentes conjuntos de datos para tener una idea de ello. También es posible que desee ver en los otros algoritmos de regresión .
Si desea consultar el código fuente, ¡lo tenemos en GitHub !

No hay comentarios.:

Publicar un comentario

Dejanos tu comentario para seguir mejorando!

Post Top Ad

Your Ad Spot

Páginas