Regresi贸n lineal m煤ltiple con Python

    Introducci贸n

    La regresi贸n lineal es uno de los algoritmos m谩s utilizados en el Machine Learning. Querr谩 familiarizarse con la regresi贸n lineal porque deber谩 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 Machine Learning.

    Definici贸n de t茅rminos

    Antes de profundizar en la regresi贸n lineal, tomemos un momento para asegurarnos de tener claro qu茅 es la regresi贸n.

    En el Machine Learning, existen 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 relaciones entre variables. La clasificaci贸n tambi茅n intenta encontrar relaciones entre variables, siendo la principal diferencia entre clasificaci贸n y regresi贸n el resultado 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 intenta predecir qu茅 tipo de mam铆fero es un animal, bas谩ndose en diferentes caracter铆sticas. Aunque hay muchos mam铆feros, no hay infinitos mam铆feros, solo hay un n煤mero limitado de categor铆as posibles en las que se puede clasificar la salida.

    Por el contrario, las variables continuas tendr谩n un n煤mero infinito de valores entre 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.

    Si bien las tareas de regresi贸n se preocupan por 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 crestas
    • Regresi贸n de lazo
    • Regresi贸n de ElasticNet

    Estos diferentes tipos de regresi贸n son adecuados para diferentes tareas. La regresi贸n de crestas se usa mejor cuando hay altos grados 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 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 com煤nmente utilizados, adecuado para dibujar una l铆nea recta a trav茅s de un gr谩fico que muestra una relaci贸n lineal entre 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), es posible que pueda 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 le ayudar谩 a saber cu谩ndo aplicarla.

    Cr茅dito: commons.wikimedia.org

    La ecuaci贸n para la regresi贸n lineal es: Y = a+b*X. En una tarea de regresi贸n lineal tendremos los par谩metros ( ay b) estimados por nuestro modelo. Luego tomaremos la constante, o intersecci贸n a, y sumaremos la pendiente de la l铆nea bmultiplicada por la variable independiente X(nuestra caracter铆stica 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 Y.

    La ecuaci贸n utilizada para calcular los valores de ay bpara la l铆nea de mejor ajuste es el m茅todo de m铆nimos cuadrados , que funciona minimizando la distancia al cuadrado desde cada punto de datos hasta la l铆nea que se est谩 dibujando. No necesita saber c贸mo funciona exactamente la ecuaci贸n para implementar la regresi贸n lineal, pero si tiene curiosidad, puede leer m谩s sobre ella en el enlace de arriba.

    Si Y = a+b*Xes la ecuaci贸n para la regresi贸n lineal singular, entonces se deduce que para la regresi贸n lineal m煤ltiple, el n煤mero de variables independientes y pendientes se inserta en la ecuaci贸n.

    Por ejemplo, aqu铆 est谩 la ecuaci贸n para la regresi贸n lineal m煤ltiple con dos variables independientes:

    Y
    =
    a
    +
    b
    1

    X
    1
    +
    b
    2

    x
    2

    Esto es v谩lido para cualquier n煤mero de variables.

    La regresi贸n lineal multivariante se puede considerar como m煤ltiples modelos de regresi贸n lineal regular, ya que solo est谩 comparando las correlaciones entre caracter铆sticas para un n煤mero determinado 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 valores continuos en lugar de valores discretos.

    Implementing MLR

    Conversi贸n de variables categ贸ricas

    Cr茅dito: commons.wikimedia.org

    Al implementar la regresi贸n lineal en un sistema de Machine Learning, las variables deben ser de naturaleza continua, no categ贸rica. 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”, blanco o negro. Las variables dicot贸micas son f谩ciles de convertir en variables continuas, simplemente deben etiquetarse 0o 1.

    Nominal/Ordinal Variables

    Las variables nominales y ordinales son tipos de variables categ贸ricas y puede haber cualquier n煤mero de categor铆as a las que pueden pertenecer los valores. En t茅rminos de variables ordinales, se asume que hay alg煤n orden en las variables, o que las variables deben tener pesos diferentes. Por lo tanto, las variables categ贸ricas se pueden convertir en valores continuos asign谩ndoles n煤meros que comienzan en cero y van hasta la longitud de las categor铆as.

    Convertir variables nominales en variables continuas es la tarea m谩s desafiante de los tres tipos de conversi贸n. Esto se debe a que las variables nominales no deben tener un peso u orden diferente, se presume que todas las variables categ贸ricas tienen “valores” equivalentes. Esto significa que no puede simplemente ordenarlos desde cero hasta el n煤mero de categor铆as, ya que esto implicar铆a que las categor铆as anteriores tienen menos “valor” que las categor铆as posteriores.

    Por esta raz贸n, la t谩ctica predeterminada para transformar variables nominales en variables continuas es algo llamado codificaci贸n one-hot , a veces denominado “creaci贸n de variables ficticias”. B谩sicamente, crea m谩s funciones o variables que representan las categor铆as reales en sus datos. El proceso de codificaci贸n one-hot significa crear una matriz del tama帽o de su n煤mero de categor铆as y completarlas con un “uno” en la posici贸n correspondiente a la categor铆a relevante y ceros en el resto.

    Por ejemplo, aqu铆 hay una tabla con datos categ贸ricos:

    Color

    Red
    Verde
    Azul

    Despu茅s de pasar esta tabla por el proceso de codificaci贸n en caliente, termina luciendo as铆:

    Rojo verde azul

    100
    010
    001

    Cuando cree etiquetas continuas para sus variables categ贸ricas, aseg煤rese de que los valores correspondan genuinamente 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.

    Canalizaci贸n de Machine Learning

    Antes de ver un ejemplo de implementaci贸n de regresi贸n lineal m煤ltiple en un conjunto de datos real, tomemos un momento para comprender el flujo de trabajo o canalizaci贸n de Machine Learning .

    Cada implementaci贸n de algoritmos de Machine Learning tiene los mismos componentes b谩sicos. Necesitas:

    • Prepara los datos
    • Crea el modelo
    • Entrena el modelo
    • Evaluar el modelo

    La preparaci贸n de los datos es con frecuencia una de las partes m谩s desafiantes del Machine Learning, ya que implica no solo recopilar los datos, sino tambi茅n transformarlos en un formato que pueda ser utilizado por el algoritmo elegido. Esto implica muchas tareas, como tratar con valores perdidos o datos da帽ados o mal formados. Por esta raz贸n, utilizaremos un conjunto de datos prefabricados que requiere poco procesamiento previo.

    Crear el modelo de Machine Learning es bastante sencillo cuando se usa una biblioteca como Scikit-Learn . Por lo general, solo se necesitan unas pocas l铆neas de c贸digo para crear una instancia de un algoritmo de Machine Learning 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.

    El entrenamiento del modelo tambi茅n es bastante sencillo cuando se usa 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 prueba. 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 entrenamiento no le dar谩 ninguna idea sobre el rendimiento de su modelo en otro conjunto de datos.

    Sample MLR Implementation

    Sin m谩s demora, examinemos c贸mo realizar regresiones lineales m煤ltiples usando el m贸dulo Scikit-Learn para Python.

    Cr茅dito: commons.wikimedia.org

    Primero, necesitamos cargar nuestro conjunto de datos. Estamos usando la biblioteca Scikit-Learn y viene empaquetada con algunos conjuntos de datos de muestra. El conjunto de datos que usaremos es el conjunto de datos de vivienda 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 criminalidad, la antig眉edad del edificio, etc. El objetivo es predecir el precio de la casa en funci贸n de 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 obtenemos:

    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, as铆 que creemos un objeto de marco de datos a partir de los datos usando Pandas.

    Tambi茅n pasamos los nombres de las funciones 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)
    

    Estas son 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 creemos una nueva columna en el marco de datos y carguemos 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 usar esas variables para la regresi贸n. Sin embargo, podr铆a ser un art铆culo en s铆 mismo, as铆 que en este caso, solo te dir茅 que las caracter铆sticas con las correlaciones m谩s fuertes son la proporci贸n de “estatus m谩s bajo” en la poblaci贸n (‘LSTAT’) y la cantidad de habitaciones en la casa (‘RM’).

    Entonces, 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 de variables en una sola columna con el comando de la biblioteca Numpy np.c_. Tambi茅n crearemos una nueva variable para almacenar los valores objetivo 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 ajustamos el modelo a 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 compararemos las predicciones con 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
    

    Puede intentar utilizar m谩s funciones para mejorar la precisi贸n del modelo.

    Conclusi贸n

    La regresi贸n lineal multivariante / m煤ltiple es un algoritmo extremadamente 煤til para rastrear las relaciones de variables continuas. Tambi茅n es uno de los algoritmos m谩s utilizados en el Machine Learning, por lo que vale la pena familiarizarse con 茅l.

    Ahora que comprende la teor铆a detr谩s de la regresi贸n lineal y ha visto un ejemplo de su uso en un conjunto de datos real, deber铆a intentar implementarlo en diferentes conjuntos de datos para familiarizarse con 茅l. Tambi茅n es posible que desee examinar los otros algoritmos de regresi贸n .

    Si desea echar un vistazo al c贸digo fuente, 隆lo tenemos en GitHub !

    Etiquetas:

    Deja una respuesta

    Tu direcci贸n de correo electr贸nico no ser谩 publicada. Los campos obligatorios est谩n marcados con *