Saltar al contenido

Archivos de categoría Regresión

Regresión no lineal en Pyton

Importación de los paquetes básicos

import numpy as np              # paquete básico para calculos científicos
import matplotlib.pyplot as plt # para crear graficos
%matplotlib inline              # muestra los graficos en la linea de comandos de Python

Creación de diferentes conjuntos de datos

Función cúbica (y = a x^{3} + b x^{2} + c x + d)

x = np.arange(-5.0, 5.0, 0.1)
##Puede ajustar la pendiente y la intersección para verificar los cambios del gráfico
y = 1*(x**3) + 1*(x**2) + 1*x + 3
y_noise = 20 * np.random.normal(size=x.size)
ydata = y + y_noise
plt.plot(x, ydata,  'bo')
plt.plot(x,y, 'r') 
plt.ylabel('Variable dependiente')
plt.xlabel('Variable indepdendiente')
plt.show()

Función cuadrática (y = x^{2})

x = np.arange(-5.0, 5.0, 0.1)
##Se puede ajustar la pendiente y la intersección para verificar los cambios en el gráfico
y = np.power(x,2)
y_noise = 2 * np.random.normal(size=x.size)
ydata = y + y_noise
plt.plot(x, ydata,  'bo')
plt.plot(x,y, 'r') 
plt.ylabel('Variable dependiente')
plt.xlabel('Variable indepdiendente')
plt.show()

Exponencial (y = a + b c^{x})

X = np.arange(-5.0, 5.0, 0.1)
##Se puede ajustar la pendiente y la intersección para verificar los cambios en el gráfico
Y= np.exp(X)
plt.plot(X,Y) 
plt.ylabel('Variable Dependiente')
plt.xlabel('Variable Independiente')
plt.show()

Logarítmica (y = \log(x))

X = np.arange(-5.0, 5.0, 0.1)
Y = np.log(X)
plt.plot(X,Y) 
plt.ylabel('Variable Dependiente')
plt.xlabel('Variable Independiente')
plt.show()

Sigmoidal/Logística (y = a + \dfrac{b}{1 + c^{(x - d)}})

X = np.arange(-5.0, 5.0, 0.1)
Y = 1-4/(1+np.power(3, X-2))
plt.plot(X,Y) 
plt.ylabel('Variable Dependiente')
plt.xlabel('Variable Independiente')
plt.show()

Ejemplo completo

Descarga del fichero de datos

import numpy as np
import pandas as pd
#downloading dataset
!wget -nv -O china_gdp.csv https://s3-api.us-geo.objectstorage.softlayer.net/cf-courses-data/CognitiveClass/ML0101ENv3/labs/china_gdp.csv
df = pd.read_csv("china_gdp.csv")
df.head(10)  # mostramos los primeros datos 
Year Value
0 1960 5.918412e+10
1 1961 4.955705e+10
2 1962 4.668518e+10
3 1963 5.009730e+10
4 1964 5.906225e+10
5 1965 6.970915e+10
6 1966 7.587943e+10
7 1967 7.205703e+10
8 1968 6.999350e+10
9 1969 7.871882e+10

Mostrado de los datos

plt.figure(figsize=(8,5))
x_data, y_data = (df["Year"].values, df["Value"].values)
plt.plot(x_data, y_data, 'ro')
plt.ylabel('GDP')
plt.xlabel('Year')
plt.show()

Eligiendo un modelo

A primera vista, determinamos que la función lógica podría ser una buena primera aproximación, ya que tiene la propiedad de comenzar con un crecimiento leve, aumentando en el medio y luego descendiendo nuevamente hacia el final; como vimos anteriormente y simplificando, la formula es y = \dfrac{1}{1 + e^{\beta_1(x - \beta_2)}} donde \beta_1 controla lo llano de la curva y \beta_2 lleva la curva sobre el eje x.

#define el modelo
def sigmoid(x, Beta_1, Beta_2):
     y = 1 / (1 + np.exp(-Beta_1*(x-Beta_2)))
     return y

#ejecutamos un primer modelo
beta_1 = 0.10
beta_2 = 1990.0

#función logística
Y_pred = sigmoid(x_data, beta_1 , beta_2)

#predicción de puntos
plt.plot(x_data, Y_pred*15000000000000.)
plt.plot(x_data, y_data, 'ro')


Nuestra tarea aquí es encontrar los mejores parámetros para nuestro modelo. Normalicemos primero nuestro x e y:

xdata =x_data/max(x_data)
ydata =y_data/max(y_data)

Para buscar los mejores parámetros podemos utilizar curve_fit la cual utiliza cuadrados mínimos no lineales para cuadrar con la función sigmoide. popt son nuestros parámetros optimizados.

from scipy.optimize import curve_fit
popt, pcov = curve_fit(sigmoid, xdata, ydata)
#imprimir los parámetros finales
print(" beta_1 = %f, beta_2 = %f" % (popt[0], popt[1]))

beta_1 = 690.447530, beta_2 = 0.997207

Dibujamos el modelo

x = np.linspace(1960, 2015, 55)
x = x/max(x)
plt.figure(figsize=(8,5))
y = sigmoid(x, *popt)
plt.plot(xdata, ydata, 'ro', label='data')
plt.plot(x,y, linewidth=3.0, label='fit')
plt.legend(loc='best')
plt.ylabel('GDP')
plt.xlabel('Year')
plt.show()

Vemos la exactitud de nuestro modelo

# divide los datos en entrenamiento y prueba
msk = np.random.rand(len(df)) < 0.8
train_x = xdata[msk]
test_x = xdata[~msk]
train_y = ydata[msk]
test_y = ydata[~msk]

# construye el modelo utilizando el set de entrenamiento
popt, pcov = curve_fit(sigmoid, train_x, train_y)

# predecir utilizando el set de prueba
y_hat = sigmoid(test_x, *popt)

# evaluation
print("Promedio de error absoluto: %.2f" % np.mean(np.absolute(y_hat - test_y)))
print("Suma residual de cuadrados (MSE): %.2f" % np.mean((y_hat - test_y) ** 2))
from sklearn.metrics import r2_score
print("R2-score: %.2f" % r2_score(y_hat , test_y) )

Promedio de error absoluto: 0.04
Suma residual de cuadrados (MSE): 0.00
R2-score: 0.97

0 Seguir leyendo →

Regresión no lineal

Regresión no lineal.

El gráfico mostrado corresponde al producto bruto interno (PBI) por año para un país. ¿Se puede predecir el PIB en función del tiempo? ¿Podemos usar una regresión lineal simple para modelarlo?Regresion no lineal
Si los datos muestran una tendencia curvada, entonces la regresión lineal no producirá un resultado muy preciso, simplemente porque la regresión lineal presume que los datos son lineales. Se parece a una función logística o exponencial. Por lo tanto, se necesita un método especial de cálculo cuando la regresión es no lineal.

Si asumimos que el modelo para este conjunto de datos son funciones exponenciales, como por ejemplo, y = \theta_0 + \theta_1 {\theta_2}^{x}, nuestro trabajo consiste en estimar los parámetros del modelo, es decir, \theta, y utilizar el modelo ajustado para predecir valores de la variable dependiente para casos desconocidos o futuros. De hecho, existen muchas regresiones diferentes que se pueden utilizar para adaptarse a cualquier aspecto del conjunto de datos.

graficas no linealesEn estos gráficos se pueden ver líneas de regresión cuadrática y cúbica, y se puede continuar hasta el grados infinitos. En esencia, podemos llamar a todos estos casos «regresión polinómica», donde la relación entre la variable independiente x y la variable dependiente y se modelan como un polinomio grado n en x. Con muchos los tipos de regresión para elegir, hay una buena probabilidad de que uno se ajuste bien a su conjunto de datos. Es importante elegir una regresión que se adapte mejor a los datos.

Método de cálculo

La regresión polinómica se ajusta a una línea curvada de sus datos. Un ejemplo simple de polinomial, con el grado 3, se muestra como y = \theta_0 + \theta_1 x + {\theta_2 x}^{2} + {\theta_3 x}^{3} donde \theta son parámetros a estimar que hacen que el modelo se ajuste perfectamente a los datos. A pesar de que la relación entre x y y es no lineal, y la regresión polinómica puede ajustarse a ellas, un modelo de regresión polinomial puede ser expresado como regresión lineal realizando cambios en las variables: Dada la ecuación polinómica de tercer grado, si definimos que x_1 = x y x_2 = x^{2} y x_3 = x^{3}, el modelo se convierte en una regresión lineal simple con nuevas variables y = \theta_0 + \theta_1 x_1 + \theta_2 x_2 + \theta_3 x_3.

Esta regresión polinómica se considera un caso especial de regresión lineal múltiple tradicional. Por lo tanto, puede utilizar el mismo mecanismo que la regresión lineal para resolver el problema y utilizar el modelo de mínimos cuadrados. Los mínimos cuadrados es un método para estimar los parámetros desconocidos en una modelo de regresión lineal, minimizando la suma de los cuadrados de las diferencias entre la variable dependiente observada en el conjunto de datos y las predicciones de la función lineal.

Características

Para decir que una regresión es no lineal, debe cumplir que:

  1. Existe una relación no lineal entre la variable dependiente y el conjunto de variables independientes.
  2. Su modelo debe ser una función no lineal de los parámetros \theta, no necesariamente las características x.ecuaciones no lineales

Cuando se trata de la ecuación no lineal, puede ser de forma de exponencial, logarítmica, logística, o muchos otros tipos. En todas estas ecuaciones, el cambio de y depende de los cambios en los parámetros \theta, no necesariamente en x solamente. En contraste con la regresión lineal, no podemos utilizar el método de «mínimos cuadrados» ordinarios para ajustar los datos.

¿Cómo se puede saber si un problema es lineal o no lineal de una manera fácil? Podemos averiguar visualmente si la relación es lineal o no lineal trazando gráficos bivariados de las variables de salida con cada variable de entrada. Además, se puede calcular el coeficiente de correlación entre variables independientes y dependientes, y si para todas las variables es 0.7 o superior hay una tendencia lineal, y, por lo tanto, no es apropiado ajustar una regresión no lineal. También podemos usar una regresión no lineal cuando no podemos modelar con precisión la relación con los parámetros lineales.
¿Cómo debo modelar mis datos, si se muestran no lineales en un diagrama de dispersión? para hacer frente a esto se tiene que usar una regresión polinómica y un modelo de regresión
no lineal, «transformando» sus datos.(VER EJEMPLO EN PYTHON)

Ir al artículo anterior de la serie: Evaluación del modelo de regresión

Ir al artículo siguiente de la serie: Introducción a la clasificación

0 Seguir leyendo →

Evaluación del modelo de regresión

Evaluación del modelo de regresión

El objetivo al realizar un modelo de regresión es predecir con precisión un caso desconocido. Con este fin, tenemos que realizar una evaluación del modelo de regresión después de crear el modelo. Para realizarlo podemos usar el entrenamiento y la prueba en el mismo conjunto de datos. También podemos realizar una división del conjunto de datos para entrenamiento y otro para prueba.

La primera solución consiste en seleccionar una parte de nuestro conjunto de datos para la realización de pruebas. Usamos todo el conjunto de datos para el entrenamiento, y construimos un modelo usando este conjunto de entrenamiento. Luego seleccionamos una pequeña porción del conjunto de datos, que se utiliza como valores reales del conjunto de pruebas. Pasamos este conjunto por nuestro modelo construido, pronosticando valores. Por último, comparamos los valores pronosticados por nuestro modelo con los valores reales.

Modelo Train/Test Split

Una forma de mejorar la precisión fuera de la muestra consiste en utilizar otro enfoque de evaluación denominado «Train/Test Split» (División entre entrenamiento y prueba). En este enfoque, seleccionamos una parte de nuestro conjunto de datos para entrenamiento y el resto se utiliza para probar. El modelo se basa en el conjunto de formación y luego se pasa para la predicción. Finalmente, los valores pronosticados para el conjunto de pruebas se comparan con los valores reales del conjunto de datos. Este modelo implica la división del conjunto de datos en conjuntos de formación y pruebas, respectivamente, que son mutuamente excluyentes. Esto proporcionará una evaluación más precisa sobre la precisión de fuera de la muestra, ya que la prueba del conjunto de datos NO forma parte del conjunto de datos que se ha utilizado para formar los datos.

Este modelo depende de los conjunto de datos en los que los datos fueron formados y probados. Así que aún tiene algunos problemas debido a esta dependencia. Otro modelo de evaluación, denominado «k-fold cross-validation», soluciona la mayoría de estos problemas. Este modelo se basa en hacer k-veces el modelo «Train/Test Split» y luego promediando la precisión. Supongamos que hemos tomado la decisión de realizar 4 pruebas de tipo «Train/Test Split», para cada una de ellas tomaremos 1/4 de todo el conjunto de datos como datos para las pruebas, y el resto para la formación del modelo. Se evalua la precisión para cada uno de los modelos y finalmente se calcula el promedio de precisón.

Evaluación del modelo

Hay diferentes métricas de la evaluación del modelo de regresión, pero la mayoría de ellos se basan en la similitud de los valores pronosticados y reales. Una de las métricas más simples para calcular la precisión de nuestro modelo
de regresión es el error calculado como la diferencia promedio entre los valores predichos y los reales para todas las filas.

En un sentido general, cuando se prueba con un conjunto de datos en el que se conoce el valor objetivo para cada dato puntual, es capaz de obtener un porcentaje de predicciones exactas para el modelo. Este enfoque de evaluación probablemte tendría una alta «precisión de formación» y una baja «precisión fuera de la muestra», ya que el modelo conoce todos los datos de prueba.
La precisión de la formación es el porcentaje de predicciones correctas que hace el modelo cuando se utiliza el conjunto de datos de prueba. Sin embargo, una alta precisión en la formación no es necesariamente algo bueno, ya que puede dar como resultado un sobreajuste de los datos, un modelo que puede estar mostrando ruido y producir un modelo no generalizado.
La precisión fuera de la muestra es el porcentaje de las predicciones correctas que el modelo realiza sobre datos que NO ha sido formado el modelo. Si hacemos «formación y prueba» en el mismo conjunto de datos probablemente el modelo tendrá una precisión baja fuera de la muestra.

Es importante que nuestros modelos tengan una precisión alta, fuera de la muestra, ya que deben hacer predicciones correctas sobre datos desconocidos.

Metricas de evaluación

Antes de poder definir las diferentes métricas utilizadas para evaluar la regresión, tenemos que definir lo que realmente es un error: el error de un modelo de regresión es la diferencia entre los datos puntuales y la línea de tendencia generada por el algoritmo.
Un error puede ser determinado de multiples maneras:

Formulas de eveluación

  • Error medio absoluto (MAE) es la media del valor absoluto de los errores. Es la medida más fácil de entender, ya que es sólo el error promedio.
  • Error cuadrático medio (MSE) es la media de los errores al cuadrado. Es más popular que el error medio absoluto porque el enfoque se orienta más hacia grandes errores. Esto se debe a que el término al cuadrado aumenta exponencialmente los errores más grandes en comparación con los más pequeños.
  • Raiz cuadrada del error cuadrático medio (RMSE) es la raíz cuadrada de la anterior medida. Esta es una de las métricas más populares de las métricas de evaluación porque es interpretable en las mismas unidades que el vector de respuesta (o unidades y) haciendo fácil de correlacionar con la información.
  • Error absoluto relativo (RAE), también conocido como la suma residual de cuadrado, donde la barra de y es un valor medio de y, toma el error absoluto total y la normaliza dividiendo por el error absoluto total del predictor simple.
  • Error cuadrático relativo (RSE) es muy similar a «Error absoluto relativo», pero se usa para calcular R-cuadrado. R-cuadrado no es un error, si no, una métrica popular para la precisión de su modelo. Representa como de cerca están los valores de los datos de la línea de regresión ajustada. Cuanto más alto sea el R-cuadrado, mejor encaja el modelo a los datos.

 

Cada una de estas métricas se puede utilizar para cuantificar la predicción. La elección de la métrica depende del tipo de modelo, el tipo de datos y el dominio del conocimiento.

Ir al artículo anterior de la serie: Regresión lineal múltiple

Ir al artículo siguiente de la serie: Regresión no lineal

0 Seguir leyendo →

Regresión lineal múltiple

Regresión lineal múltiple

La regresión lineal múltiple es la extensión de el modelo de regresión lineal simple.
Este tipo de regresión puede utilizarse cuando queremos conocer la fuerza del efecto que las variables independientes tienen en una variable dependiente. Por ejemplo, el tiempo de revisión, la ansiedad de la prueba, la asistencia a clase y el género, ¿tiene algún efecto en el examen de rendimiento de los estudiantes?
También se utiliza para entender cómo cambia la variable dependiente cuando cambiamos las variables independientes. Por ejemplo, puede indicar cuánto aumenta la presión arterial de una persona por cada cambio en el índice de masa corporal (IMC), manteniendo constante otros factores.

La regresión lineal múltiple utiliza múltiples variables, llamadas variables independientes, o predictores, que mejor predicen el valor de la variable objetivo, que es llamada variable dependiente. En la regresión lineal múltiple, el valor objetivo, y, es una combinación lineal de variables independientes, x. Por lo general, el modelo tiene el formato: y = \theta_0 + \theta_1 \cdot x_1 + \theta_2 \cdot x_2 + \dots + \theta_n \cdot x_n. Matemáticamente, podemos mostrarlo como forma de vector. Esto significa que se puede mostrar como un producto de 2 vectores: el vector de parámetros y el vector de conjunto de características.

Generalmente, podemos mostrar la ecuación de un espacio multidimensional como \theta^{T} \cdot x, donde \theta es un vector de n, y x es el vector de los conjuntos de características, como \theta es un vector de coeficientes, y se supone que se multiplica por x, entonces \theta se muestra transpuestos. \theta es también llamado vector de parámetros o vector de peso de la ecuación de regresión. El primer elemento del conjunto de características se establecería en 1, porque convierte el \theta_0 en el parámetro de intercepción.

La idea es encontrar el mejor vector de parámetros para nuestros datos, como en el caso en la regresión lineal. Para lograr este objetivo, tenemos que minimizar el error de la predicción.

Cálculo de los parámetros de regresión

Para encontrar los parámetros optimizados para nuestro modelo, primero debemos entender cuáles son los parámetros optimizados. En resumen, los parámetros optimizados son los que conducen a un modelo con los errores menos graves. Como en el caso en regresión lineal, podemos decir que el error es la distancia desde el dato puntual hasta el modelo de regresión ajustado. La media de todos los errores muestra como ajusta el modelo al conjunto de datos real. Normalmente utilizamos el MSE (mean squared error), pero no es la única forma de mostrar el error de un modelo de regresión lineal múltiple, solo es una de las formas más populares de hacerlo. El objetivo de la regresión lineal múltiple es minimizar la ecuación de MSE, encontrando los mejores parámetros \theta, pero ¿cómo?

Hay muchas maneras de estimar el valor de estos coeficientes. Sin embargo, los métodos más comunes son los mínimos cuadrados ordinarios y el enfoque de optimización:

  • Los mínimos cuadrados ordinarios tratan de estimar los valores de los coeficientes minimizando el «Mean Square Error». Utiliza los datos como una matriz y operaciones de álgebra lineal para estimar los valores óptimos. El problema es el tiempo para calcular las operaciones matriciales, ya que puede tardar mucho tiempo en terminar. Cuando el número de filas del conjunto de datos es menos de 10.000 se puede pensar en esta técnica, sin embargo, para valores mayores, se deberían probar otros métodos más rápidos.
  • La segunda opción es utilizar un algoritmo de optimización para buscar los mejores parámetros. Proceso iterativos de optimización de los valores de los coeficientes, minimizando el error del modelo. Por ejemplo, «Gradient Descent», que inicia la optimización con valores aleatorios para cada coeficiente. A continuación, calcula los errores, e intenta minimizarlo cambiando los coeficientes en múltiples iteraciones. «Gradient Descent» es un enfoque adecuado si se tiene un conjunto de datos grande. Sin embargo, hay otros enfoques para estimar los parámetros de la regresión lineal múltiple que se puede explorar por su cuenta.

Uso del modelo y problemas

Después de que encontramos los parámetros de la ecuación lineal, hacer predicciones es tan simple como resolver la ecuación para un conjunto específico de entradas. Nuestra representación de modelo de regresión lineal para este problema sería: y = \theta^{T} \cdot x.

Como se ha visto, se puede utilizar múltiples variables independientes para predecir un valor objetivo en una regresión lineal múltiple. A veces es mejor modelo que la regresión lineal simple, que utiliza sólo una variable independiente para predecir la variable dependiente. Pero ¿Cuántas variables independientes se deberíamos utilizar para la predicción? ¿Deberíamos utilizar todos los campos de nuestro dataset? ¿Agregar variables independientes a un modelo regresión lineal múltiple siempre aumenta la precisión del módelo?
Básicamente, agregar demasiadas variables independientes sin ninguna justificación teórica puede darnos un modelo sobreajustado, demasiado complicado para el conjunto de datos y nada util para la predicción. Por lo tanto, se recomienda evitar el uso de muchas variables para la predicción. Hay diferentes maneras de evitar el sobreajuste de un modelo en regresión, que veremos en otros artículos.
Otra pregunta es si las variables independientes deben ser continuas. Las variables independientes categóricas pueden incorporarse en un modelo de regresión convirtiéndolas en variables numéricas. Por ejemplo, dada una variable binaria como tipo de coche, el código es «0» para «Manual» y 1 para los autos «automáticos».
Como último punto, recuerde que la «regresión lineal múltiple» es un tipo específico de regresión lineal. Por lo tanto, tiene que haber una relación lineal entre la variable dependiente y cada una de las variables independientes. Se pueden utilizar diagramas de dispersión y comprobar visualmente la linealidad. Si la relación mostrada en el diagrama de dispersión no es lineal, entonces, debe utilizar regresión no lineal.

Ir al artículo anterior de la serie: Regresión lineal simple

Ir al artículo siguiente de la serie: Evaluación del modelo de regresión

0 Seguir leyendo →

Regresión lineal en Pyton

Importación de los paquetes básicos

import matplotlib.pyplot as plt # para crear graficos
import pandas as pd             # herramientas para analisis de datos y estructuras de datos
import pylab as pl              # añade numpy+scipy+sympy+pandas+matplotlib+ipython = MatLab
import numpy as np              # paquete básico para calculos científicos
%matplotlib inline              # muestra los graficos en la linea de comandos de Python

Descarga del fichero de datos

!wget -O FuelConsumption.csv https://s3-api.us-geo.objectstorage.softlayer.net/cf-courses-data/CognitiveClass/ML0101ENv3/labs/FuelConsumptionCo2.csv
df = pd.read_csv("FuelConsumption.csv")
df.head() # mostramos los primeros datos 
MODELYEAR MAKE MODEL VEHICLECLASS ENGINESIZE CYLINDERS TRANSMISSION FUELTYPE FUELCONSUMPTION_CITY FUELCONSUMPTION_HWY FUELCONSUMPTION_COMB FUELCONSUMPTION_COMB_MPG CO2EMISSIONS
0 2014 ACURA ILX COMPACT 2.0 4 AS5 Z 9.9 6.7 8.5 33 196
1 2014 ACURA ILX COMPACT 2.4 4 M6 Z 11.2 7.7 9.6 29 221
2 2014 ACURA ILX HYBRID COMPACT 1.5 4 AV7 Z 6.0 5.8 5.9 48 136
3 2014 ACURA MDX 4WD SUV – SMALL 3.5 6 AS6 Z 12.7 9.1 11.1 25 255
4 2014 ACURA RDX AWD SUV – SMALL 3.5 6 AS6 Z 12.1 8.7 10.6 27 244

Listamos los estadísticos principales para cada variable

df.describe()
MODELYEAR ENGINESIZE CYLINDERS FUELCONSUMPTION_CITY FUELCONSUMPTION_HWY FUELCONSUMPTION_COMB FUELCONSUMPTION_COMB_MPG CO2EMISSIONS
count 1067.0 1067.000000 1067.000000 1067.000000 1067.000000 1067.000000 1067.000000 1067.000000
mean 2014.0 3.346298 5.794752 13.296532 9.474602 11.580881 26.441425 256.228679
std 0.0 1.415895 1.797447 4.101253 2.794510 3.485595 7.468702 63.372304
min 2014.0 1.000000 3.000000 4.600000 4.900000 4.700000 11.000000 108.000000
25% 2014.0 2.000000 4.000000 10.250000 7.500000 9.000000 21.000000 207.000000
50% 2014.0 3.400000 6.000000 12.600000 8.800000 10.900000 26.000000 251.000000
75% 2014.0 4.300000 8.000000 15.550000 10.850000 13.350000 31.000000 294.000000
max 2014.0 8.400000 12.000000 30.200000 20.500000 25.800000 60.000000 488.000000

Selecciona algunas variables para verlas con más detalle.

cdf = df[['ENGINESIZE','CYLINDERS','FUELCONSUMPTION_COMB','CO2EMISSIONS']]
cdf.head(9)
ENGINESIZE CYLINDERS FUELCONSUMPTION_COMB CO2EMISSIONS
0 2.0 4 8.5 196
1 2.4 4 9.6 221
2 1.5 4 5.9 136
3 3.5 6 11.1 255
4 3.5 6 10.6 244
5 3.5 6 10.0 230
6 3.5 6 10.1 232
7 3.7 6 11.1 255
8 3.7 6 11.6 267

Para verlas mejor, podemos dibujar cada una de esas verialbes

viz = cdf[['CYLINDERS','ENGINESIZE','CO2EMISSIONS','FUELCONSUMPTION_COMB']]
viz.hist()
plt.show()

Comparamos cada variable con la emisión de carbono, para ver si se pueden relacionar linealmente

plt.scatter(cdf.FUELCONSUMPTION_COMB, cdf.CO2EMISSIONS,  color='blue')
plt.xlabel("FUELCONSUMPTION_COMB")
plt.ylabel("Emission")
plt.show()

plt.scatter(cdf.ENGINESIZE, cdf.CO2EMISSIONS,  color='blue')
plt.xlabel("Engine size")
plt.ylabel("Emission")
plt.show()

plt.scatter(cdf.CYLINDERS, cdf.CO2EMISSIONS,  color='blue')
plt.xlabel("Cylinders")
plt.ylabel("Emission")
plt.show()


Creamos un conjunto de datos de entrenamiento y otro de prueba

Se divide el conjunto de datos en uno de entrenamiento y otro de pruebas, siendo excluyentes. Esto permite una evaluación más exacta, ya que los datos de entrenamiento no son parte de los datos que se usaran para comprobar el modelo.

msk = np.random.rand(len(df)) < 0.8
train = cdf[msk]
test = cdf[~msk]

Modelado de datos usando el paquete sklearn

from sklearn import linear_model #  importación del paquete sklearn
train_x = np.asanyarray(train[['ENGINESIZE']]) # conjunto de datos independientes
train_y = np.asanyarray(train[['CO2EMISSIONS']]) # conjunto de datos dependientes 
regr = linear_model.LinearRegression() # uso del modelo de regresion lineal
regr.fit (train_x, train_y) # ejecución de los calculos
print ('Pendiente: ', regr.coef_) # muestra la pendiente
print ('Ordenada: ',regr.intercept_) # muestra la ordenada en el origen

Pendiente: [[39.071235]]
Ordenada: [126.65808636]

Pintamos el ajuste realizado

plt.scatter(train.ENGINESIZE, train.CO2EMISSIONS,  color='blue')
plt.plot(train_x, regr.coef_[0][0]*train_x + regr.intercept_[0], '-r')
plt.xlabel("Engine size")
plt.ylabel("Emission")

Se comparan los valores actuales con los predichos para calcular la exactitud del modelo de regresión

Existen distintas métricas de evaluación de modelos, utilicemos MSE para calcular la exactitud de nuestro modelo basado en el set de prueba:
– Error medio absoluto: Es una media del valor absoluto de los errores. Es la métrica más fácil de comprender ya que simplemente es el promedio de los errores pero en valor absoluto para que errores negativos no compensen los positivos.
– Error Cuadrado Medio (MSE): Es la media de los errores al cuadrado. Es más popular que el error medio absoluto porque hace que los grandes errores tengan más peso.
– R-cuadráticono es un error, es una medida popular que indica la precisión del modelo. Representa como de cerca están los datos de la linea de regresión. Mientras más alto es el R-cuadrático, mejor ajusta el modelo respecto de los datos. El máximo valor posible es 1 y puede tomar valores negativos.

from sklearn.metrics import r2_score # importación del paquete metrics de sklearn
test_x = np.asanyarray(test[['ENGINESIZE']]) # conjunto de datos independientes
test_y = np.asanyarray(test[['CO2EMISSIONS']]) # conjunto de datos dependientes
test_y_ = regr.predict(test_x) # ejecución de los calculos
print("Error medio absoluto: %.2f" % np.mean(np.absolute(test_y_ - test_y)))
print("Error cuadrado medio (MSE): %.2f" % np.mean((test_y_ - test_y) ** 2))
print("R2-cuadrático: %.2f" % r2_score(test_y_ , test_y) )

Error medio absoluto: 23.04
Error cuadrado medio (MSE): 894.25
R2-score: 0.70

0 Seguir leyendo →

Regresión lineal simple

Regresión lineal simple

La pregunta que trata de responder la regresión linea simple es: Dado un conjunto de datos, ¿Podemos predecir una de las variables, utilizando otro campo?
La respuesta es sí: Podemos utilizar la regresión lineal para predecir un valor continuo utilizando otras variables. La regresión lineal es la aproximación de un modelo lineal que se utiliza para describir la relación entre dos o más variables. En la regresión lineal simple, hay dos variables: una variable dependiente y una variable independiente. El punto clave en la regresión lineal es que nuestro valor dependiente debe ser continuo y no puede ser un valor discreto. Sin embargo, las variables independientes pueden ser medidas en una escala de medida categórica o continua.

Existen dos tipos de modelos de regresión lineal: regresión simple y regresión múltiple.La regresión lineal simple es cuando se utiliza una variable independiente para estimar una variable dependiente. Cuando se utiliza más de una variable independiente, el proceso se denomina regresión lineal múltiple.

La mejor manera de entender la regresión lineal es dibujando nuestras variables. Vamos a usar el tamaño del motor regresión lineal simplecomo una variable independiente, y la Emisión como el valor objetivo que queremos predecir. Un diagrama de dispersión muestra la relación entre estas variables. Además, se ve que estas variables están relacionadas linealmente. Con la regresión lineal, se puede ajustar una línea a través de los datos.

La línea de ajuste se muestra tradicionalmente como un polinomio. En un problema de regresión simple (una sola variable independiente), la forma del modelo sería y = \theta_0 + \theta_1 \cdot x_1. En esta ecuación, «y» es la variable dependiente (valor pronosticado), x_1 es la variable independiente, \theta_1 es conocida como «pendiente» y el valor \theta_0 se conoce como  «ordenada en el origen». \theta_0 y \theta_1 son los coeficientes de la ecuación lineal.

Calculo de los coeficientes

Ahora la preguntas es ¿Cómo se determina cuál de las líneas «encaja mejor»? ¿Cómo calcular \theta_0 y \theta_1 para encontrar la mejor línea para «ajustar» los datos?.
Supongamos que ya hemos encontrado la mejor línea de ajuste para nuestros datos. Solo nos faltaría comprobar lo bien que se ajustan los datos reales con esta línea. Esto significa que si para un elemento de la muestra tenemos un valor de la variable independiente, la variabe dependiente calculada debe aproximarse muy cerca del valor real. Esto no suele ser así, ya que siempre suele existir un error, y esto significa que nuestra línea de predicción no es precisa. Este error se denomina error residual.

Podemos decir que el error es la distancia desde el punto de datos hasta la línea de regresión ajustada y que la media de todos los errores residuales muestra lo mal que encaja la línea con todo el conjunto de datos. Matemáticamente, es calculado por la ecuación del error de cuadrado medio (ECM), o en inglés «mean squared error» (MSE). El objetivo es encontrar una línea en la que se minimice la media de todos estos errores.

    \[ MSE=\frac{1}{n}\sum_{i=1}^{n}{(y_i-y'_i)^2} \]

Podemos utilizar unas fórmulas matemáticas para calcular \theta_0 y \theta_1:

\theta_1 = \frac{\sum_{i=1}^{s}{(x_i -\overline{x}) \cdot (y_i -\overline{y})}}{\sum_{i=1}^{s}{(x_i -\overline{x})^2}}

\theta_0 = \overline{y} - \theta_1 \cdot \overline{x}

Se requiere que calculemos la media de las columnas independientes y dependientes de todo el conjunto de datos, por lo que todos los datos deben estar disponibles. Una vez calculada la media, se estima el valor de \theta_1 y luego con ese valor calcular \theta_0.

Realmente no necesitas recordar la fórmula para el cálculo de estos parámetros, la mayoría de las librerias usadas para el aprendizaje automático en Python, R, y Scala pueden encontrar fácilmente estos parámetros. Pero siempre es bueno entender cómo funciona. (VER EJEMPLO EN PYTHON)

Después de que encontramos los parámetros de la ecuación lineal, hacer predicciones es tan simple como solucionar la ecuación para un conjunto específico de entradas.

Utilidad de la regresión lineal simple

La regresión lineal es la más básica que hay que utilizar y entender. Es muy útil, ya que es rápida y no requiere ajuste de parámetros como ocurre en otros cálculos de predicción donde hay que ajustar el parámetro K en los K-Vecinos mas cercanos o la tasa de aprendizaje en las Redes Neuronales. La regresión lineal también es fácil de entender y altamente interpretables.

Ir al artículo anterior de la serie: Introducción al Modelo de Regresión

Ir al artículo siguiente de la serie: Regresión lineal múltiple

0 Seguir leyendo →

Introducción al Modelo de Regresión

Introducción al modelo de regresión.

Tabla de datos de cochesPara la introducción al modelo de regresión, vamos a utilizar el conjunto de datos que se muestra. Estos estan relacionados con las emisiones de Co2 de los diferentes coches. Incluye el tamaño del motor, el número de cilíndros, el consumo de combustible y las emisiones de Co2 de varios modelos. La pregunta es, «Dado este conjunto de datos, podemos predecir la emisión Co2 de un coche utilizando otros campos como, por ejemplo, EngineSize o Cylinders?»

Supongamos que tenemos algunos datos históricos de diferentes coches, y suponemos que uno de ellos aún no se ha fabricado, pero estamos interesados en la estimación de su emisión de Co2, después de la producción. ¿Es posible? Podemos utilizar métodos de regresión para predecir un valor continuo, como por ejemplo Emisión de CO2, algunas otras variables.

La regresión es el proceso de predicción de un valor continuo. En la regresión hay dos tipos de variables: una variable dependiente y una o más independientes. La variable dependiente se puede ver como el «estado», el «objetivo» o «el objetivo final» que estudiamos y tratamos de predecir, y las variables independientes, también conocidas como variables explicativas, pueden ser la «causa» de los «estados». Las variables independientes se muestran convencionalmente por x; y la variable dependiente es denotada por y. Un modelo de regresión se refiere a y, o a la variable dependiente, a una función de x, es decir, a las variables independientes.

El punto clave de la regresión es que nuestro valor dependiente debe ser continuo, y no puede ser un valor discreto. Sin embargo, la variable independiente o las variables se pueden medir en categóricas o escala de medición continua. Por lo tanto, lo que queremos hacer aquí es usar los datos históricos de algunos coches, usando uno o más de sus características, y a partir de esos datos, hacer un modelo. Utilizamos la regresión para construir un modelo de regresión/estimación. A continuación, el modelo se utiliza para predecir la emisión de Co2 esperada para un coche nuevo o desconocido.

Básicamente, hay 2 tipos de modelos de regresión: regresión simple y regresión múltiple.

La regresión simple es cuando se utiliza una variable independiente para estimar una variable dependiente. Puede ser lineal en no lineales. Por ejemplo, pronosticar la emisión de Co2emisiones utilizando la variable EngineSize. La linealidad de la regresión se basa en la naturaleza de la relación entre la independencia y la dependencia variables. Cuando hay más de una variable independiente presente, el proceso se llama regresión múltiple lineal. Por ejemplo, predicando Co2emisiones utilizando EngineSize y el número de Cylinders en cualquier coche dado. De nuevo, en función de la relación entre las variables dependientes e independientes, puede ser regresión lineal o no lineal.

Examinemos algunas aplicaciones de muestra de regresión. Esencialmente, utilizamos la regresión cuando queremos estimar un valor continuo. Por ejemplo, una de las aplicaciones del análisis de regresión podría estar en el área de la previsión de ventas. Puede intentar predecir las ventas anuales totales de un vendedor de variables independientes como, por ejemplo, como la edad, la educación y los años de experiencia. También se puede utilizar en el campo de la psicología, por ejemplo, para determinar la satisfacción individual basado en factores demográficos y psicológicos. Podemos utilizar el análisis de regresión para predecir el precio de una casa en un área, basada en su tamaño, número de habitaciones, y así sucesivamente. Incluso podemos usarlo para predecir el ingreso de empleo para las variables independientes, como las horas de trabajo, educación, ocupación, sexo, edad, años de experiencia, etc.

Se pueden encontrar muchos ejemplos de la utilidad del análisis de regresión en estos y muchos otros campos o dominios, como las finanzas, la salud, las ventas, y más. Tenemos muchos algoritmos de regresión. Cada uno de ellos tiene su propia importancia y una condición específica a la que su aplicación es las más adecuado:

  • Ordinal regression
  • Poisson regression
  • Fast forest quantile regression
  • Linear, Polynomial, Lasso, Stepwise, Ridge regression
  • Bayesian linear regression
  • Neural network regression
  • Decision forest regression
  • Boosted decision tree regression
  • KNN (K-nearest neighbors)

 

Ir al artículo anterior de la serie: Aprendizaje Supervisado y No Supervisado

Ir al artículo siguiente de la serie:Regresión lineal simple

0 Seguir leyendo →

Aprendizaje Supervisado y No Supervisado

Aprendizaje supervisado

Una manera fácil de empezar a entender el concepto de aprendizaje supervisado es observando directamente a las palabras que lo componen: Supervisado significa observar y dirigir la ejecución de una tarea, proyecto o actividad. Obviamente, no nos referimos a supervisar una persona, supervisamos un modelo de machine learning que podría ser capaz de producir regiones de clasificación.

Pero, ¿cómo supervisamos un modelo de machine learning? Lo hacemos «educando» el modelo, es decir, cargamos el modelo con conocimiento para que pueda predecir las instancias futuras. Y esto nos lleva a otra pregunta, «¿Cómo se educa exactamente un modelo?» La educación del modelo se raliza entrenándolo con algunos datos de un conjunto de datos con etiquetas. Así, es importante tener en cuenta que los datos están etiquetados.

Unos datos etiquetados se muestran como un conjunto de filas y columnas donde cada fila son los datos de una sola observación de un objeto de estudio y la columnas son características observadas. Por ejemplo, para una célula podemos tener características como su espesor, tamaño de la celda, adhesión marginal, etc..

Los datos pueden ser de dos clases: numérica (los más frecuentes) o categórica (usados como clasificadores)

Para este aprendizaje existen dos

técnicas:

  • La clasificación es el proceso de predecir una categoría o etiqueta de clase discreta.
  • La regresión es el proceso de predicción de un valor continuo en contraposición a la predicción un valor categórico en Clasificación.

Aprendizaje no supervisado

En el aprendizaje no supervisado dejamos que el modelo trabaje por su cuenta para descubrir información que puede que no ser visible para el ojo humano. Esto significa que el algoritmo no supervisado entrena con el conjunto de datos, y extrae conclusiones sobre datos sin etiquetar. En términos generales, tiene algoritmos más difíciles que el aprendizaje supervisado, ya que sabemos poco a nada sobre los datos o los resultados que se esperan.

Las técnicas más utilizadas son:

  • La reducción de dimensiones y/o la selección de características desempeñan un gran papel reduciendo las características haciendo que la clasificación sea más fácil.
  • El análisis de carritos de la compra es una técnica de modelado basada en la teoría de que si se compra un cierto grupo de artículos, es más probable que compres otro grupo de artículos.
  • La estimación de densidad es un concepto muy simple que se utiliza principalmente para explorar los datos y encontrar alguna estructura interna.
  • El agrupamiento o clustering es considerado como una de las técnicas más populares en machine learning no supervisado utilizada para agrupar los puntos de datos u objetos similares de algún modo. El análisis de clústeres tiene muchas aplicaciones en diferentes dominios, ya sea pare que un banco quiera segmentar a sus clientes en función de determinadas características, o de ayudar a un individuo a organizar y agrupar sus tipos de música favoritos

 

Por lo tanto, la mayor diferencia entre el Aprendizaje supervisado y no supervisado es que el aprendizaje supervisado se ocupa de los datos etiquetados mientras que el aprendizaje no supervisado se ocupa de datos no etiquetados. En el aprendizaje supervisado, tenemos algoritmos de machine learning para Clasificación y Regresión.

Ir al artículo anterior de la serie: Python para Machine Learning. Paquetes más usados.

Ir al artículo siguiente de la serie: Introducción al Modelo de Regresión

0 Seguir leyendo →