Te dejamos 3 ejemplos explicados de Machine Learning en Python usando Regresión Lineal.
El Machine Learning es una rama de la Inteligencia Artificial que aplica modelos matemáticos para dotar a un computador de cierta capacidad de aprendizaje, utilizando datos históricos.
La Regresión Lineal es un método estadístico que estudia la relación entre variables continuas y es utilizada para predecir el valor de una variable dependiente con base en el valor de otras variables independientes.
En la figura anterior suponga que en el eje horizontal representa el salario de una persona, y el eje vertical representa el valor de su casa. Vemos una correlación, entre más gana una persona, mayor es el valor de su casa. Claro, no siempre es así. Vemos que siempre hay personas que tienen un menor salario, pero cuentan con casas cuyo valor es superior a la casa de algunos que ganan más que él.
En el ejemplo anterior, la idea de la Regresión Lineal es darle a la computadora un valor X (salario) y que nos prediga qué valor y (costo de la casa) tendrá.
Python es un lenguaje de programación que nos ahorra realizar todos los cálculos y operaciones manuales que se realizan con los datos. Al utilizar Python para hacer Machine Learning aprovechamos la capacidad de la computadora para analizar muchos datos.
Python utiliza la librería Scikit-Learn. Scikit-Learn o sklearn es, entonces, una biblioteca para realizar Machine Learning en Python.
Si aun no instalas sklear, puedes hacerlo usando pip
pip install sklearn
Vamos a necesitar datos, para entrenar un modelo, que nos sirva para realizar predicciones que utilizan regresión lineal. ¿Cómo obtener esos datos? Bueno, para nuestro primer ejemplo, podemos utilizar los datos que ya trae sklearn.
from sklearn import datasets from sklearn.linear_model import LinearRegression import pandas as pd
La primera linea la necesitamos para obtener un dataset de ejemplo.
La segunda línea la utilizaremos para realizar la Regresión Lineal.
La tercera línea importa pandas, una librería de Python para el tratamiento de datos.
dataset = datasets.load_boston()
En ésta linea cargamos un dataset de ejemplo que ya viene con sklearn. Contiene una cantidad de datos sobre propiedades (casas) en Boston.
La variable objetivo es ese dato que queremos predecir. Y las variables independientes son esos valores que (según un análisis previo) concluimos influyen en la variable objetivo.
El dataset de ejemplo, ya trae configurados la variable objetivo y las variables independientes. Nosotros las vamos a pasar a nuestras propias variables.
objetivo = dataset['target'] independientes = dataset['data']
Vamos a crear un modelo con los parámetros por defecto
modelo = LinearRegression()
Ajustamos nuestro modelo pasándole los datos de entrenamiento y la variable objetivo.
modelo.fit(X=independientes, y=objetivo)
Ya podemos realizar predicciones. Ahora solo vamos a utilizar los mismos datos de entrenamiento, y veremos qué valor hubiese predicho el sistema. Sólo mostraremos los primeros 5 valores.
predicciones = modelo.predict(independientes) for y, y_pred in list(zip(objetivo, predicciones)) [:5]: print("Valor Real: {:.3f} Valor Estimado: {:.5f}".format(y, y_pred))
En la primera línea, usamos el método predict, con los mismos valores independientes que ya tiene.
En la segunda linea tenemos un for, que asigna dos valores, y y y_pred. La función zip toma un valor de “objetivo” y lo relaciona con uno de “predicciones”. Dentro del for imprimimos esos dos valores. Como le indicamos [:5] solo nos muestra los primeros 5.
Observamos que, si le hubiésemos pasado los mismos datos que tiene ya el modelo, él hubiese predicho valores bastante cercanos a los reales.
Vamos a utilizar un dataset con información sobre películas. El enlace de éste dataset está aquí:
import pandas as pd import numpy as np from sklearn.linear_model import LinearRegression
peliculas = pd.read_csv("movies2.csv")
Si abres el archivo movies2.csv verás que contiene distintos valores. Para realizar la regresión lineal solo necesitamos los valores numéricos.
datos_numericos = peliculas.select_dtypes(np.number)
Aunque ya seleccionamos solo los valores numéricos, algunos de éstos contienen valores NaN (No es un número), por lo que vamos a reemplazarlos por 0.
datos_numericos = peliculas.select_dtypes(np.number).fillna(0)
En nuestro caso deseamos predecir a cuánto ascenderá el monto de ventas de cierta película. Por lo que estableceremos eso como nuestra variable objetivo. Las variables independientes serán todas las demás variables numéricas que no son el objetivo.
objetivo = "ventas" #las variables independientes serian todas las demas menos ventas independientes = datos_numericos.drop(columns=objetivo).columns
modelo = LinearRegression() modelo.fit(X=datos_numericos[independientes], y=datos_numericos[objetivo])
peliculas["ventas_prediccion"] = modelo.predict(datos_numericos[independientes])
En la línea anterior, al dataset original (“peliculas”), le agregamos una nueva columna (“ventas_prediccion”) que contendrá el resultado de la predicción pasando todos los datos de las variables independientes.
print (peliculas[["ventas", "ventas_prediccion"]].head())
En la línea anterior imprimimos las columnas ventas y ventas_predicción, solo los primeros 5 resultados.
La columna ventas, son las ventas reales, y la columna ventas_prediccion son los datos que el sistema hubiese predicho si le hubiéramos pasado los datos correspondientes a sus variables independientes.
Imaginamos que hemos ido recopilando nuestros propios datos. En el siguiente ejemplo tenemos un CSV (un archivo separado por comas) con información sobre “ventas”.
El campo edad se refiere a la edad del cliente, la columna cantidad se refiere a la cantidad de personas que iban con esa persona, la columna vehiculo indica si llegó o no en un vehículo particular, la columna pago se refiere a su forma de pago (efectivo, tarjeta de credito, débito o vales), y por último la columna monto que indica cuánto compró.
Deseamos un modelo al que le indiquemos edad, cantidad de acompañantes, vehículo y forma de pago y el nos prediga cuánto va a comprar esa persona.
import pandas as pd import numpy as np from sklearn.linear_model import LinearRegression
ventas = pd.read_csv("ventas2.csv") objetivo = "monto" independientes = ventas.drop(columns=['monto']).columns
El archivo que usamos lo puedes obtener aqui. Es un archivo muy pequeño y la información no corresponde a datos reales.
modelo = LinearRegression() modelo.fit(X=ventas[independientes], y=ventas[objetivo])
ventas["ventas_prediccion"] = modelo.predict(ventas[independientes]) preds = ventas[["monto", "ventas_prediccion"]].head(50)
Éste paso no es imprescindible, pero lo usaremos para graficar
Imagine que viene una persona de 41 años, solo, en su propio vehículo y pagando en efectivo. Entonces la lista sería: [41,1,1,1]. Vamos a pasarle ese datos al modelo y que nos prediga cuánto comprará esa persona.
talvez = modelo.predict([[41,1,1,1]]) print ("Tal vez compre: ") print (talvez)
Observamos que una persona con esas características compraría: $1,139.31
Cabe aclarar que son datos ficticios y que no necesariamente los valores de la variable independiente están correlacionados con la variable objetivo. Solo usamos éstos datos para ejemplificar el proceso.
Podemos ver los valores de ventas reales vs los de ventas_predicción, usando un gráfico, mostrando solo las primeras 50.
import matplotlib.pyplot as plt preds.plot(kind='bar',figsize=(18,8)) plt.grid(linewidth='2') plt.grid(linewidth='2') plt.grid(None) plt.show()
Observamos el siguiente resultado
Éste modelo aún puede mejorar. Sin embargo, esperamos que te hayan servido éstos ejemplos explicados de Machine Learning usando Regresión Lineal.
¿Aprendes mejor viéndolo en video? Checa éste.