A continuaci贸n aprender谩s c贸mo implementar el algoritmo de Vectores de Soporte Regresi贸n utilizando la librer铆a de Python Scikit Learn, tomando en cuenta cada uno de los par谩metros que debes considerar para ajustar y mejorar tus resultados.聽

Posteriormente desarrollaremos un聽proyecto de Machine Learning enfoc谩ndonos en el algoritmo de Vectores de Soporte Regresi贸n. Cada una de las explicaciones dadas ac谩 ser谩 paso a paso para que聽puedas entender con detalle cada uno de los m茅todos explicados ac谩 y que los puedas implementar en tus propios proyectos.

Curso Te贸rico-Pr谩ctico: Machine Learning para no programadores

Empecemos con la explicaci贸n del proyecto.

machine learning seg煤n expertos

Vectores de Soporte Regresi贸n con Scikit Learn

aprende f谩cilmente inteligencia artificial - newsletter

Si a煤n no lo sabes,聽Scikit Learn聽es una de las m谩s grandes librer铆as de Machine Learning con la que cuenta Python, pero no solamente eso,聽es de las m谩s utilizadas al momento de crear los modelos implementando los algoritmos de Machine Learning, por estas razones es muy importante que aprendas a trabajar con ella si apenas te est谩s iniciando.

Veamos c贸mo se puede utilizar聽esta librer铆a para implementar el algoritmo de Vectores de Soporte Regresi贸n.

El objetivo de los聽Vectores de Soporte Regresi贸n聽es la de individualizar el hiperplano maximizando el margen, teniendo en cuenta que se tolera parte del error.

Lo primero que debes saber es que Scikit Learn cuenta con un m贸dulo llamado sklearn.svm en donde se incluye todo lo referente al algoritmo de Vectores de Soporte tanto聽clasificaci贸n聽como regresi贸n. Para esta publicaci贸n nos enfocaremos solamente en regresi贸n y m谩s espec铆ficamente en SVR.

Vectores-Soporte-Regresio虂n-1

Curso Te贸rico-Pr谩ctico:Generaci麓贸n de Texto con Inteligencia Artificial

Con Scikit Learn es extremadamente sencillo implementar este algoritmo, lo primero que debemos hacer es importar el m贸dulo e importar la clase SVR, crear los par谩metros a utilizar, 鈥渪鈥 y 鈥測鈥 y llamar al m茅todo fit() junto con los datos de entrenamiento.

Vectores-Soporte-Regresio虂n-2

Toda la informaci贸n para implementar esta librer铆a la pueden encontrar directamente en la p谩gina web, por lo que si tenemos alguna duda en la implementaci贸n de las instrucciones solamente tenemos que leer esta informaci贸n.

estad铆sticas en machine learning

Implementaci贸n de Vectores de Soporte Regresi贸n con Scikit Learn

La instrucci贸n SVR se puede configurar con ciertos par谩metros que puedes ver en la p谩gina web con m谩s detalle, ac谩 te voy a explicar los m谩s importantes y los que debes considerar al momento de configurar el modelo.

Vectores de Soporte Regresio虂n Scikit Learn 1

Comencemos con C, te acuerdas que cuando vimos la teor铆a del algoritmo de vectores de soporte regresi贸n, en la f贸rmula se dispon铆a de una variable llamada C, la cual la definimos como una constante que determina el equilibrio entre la regularidad de la funci贸n y la cuant铆a hasta la cual toleramos desviaciones mayores que las bandas de soporte, bueno este valor lo puedes definir ac谩, por defecto este valor es de 1 pero tu lo puedes definir a tu conveniencia.

Vectores de Soporte Regresio虂n Scikit Learn 2

Otro par谩metro que puedes modificar es el de 鈥溍﹑silon鈥,

Ambas variables las puedes modificar a tu conveniencia, pero tradicionalmente esto valores se dejan por defecto, sobretodo si apenas estas empezando en Machine Learning y no tienes la suficiente destreza para manipularlos.

Una configuraci贸n que cuenta este algoritmo en Scikit Learn y que en ocasiones si se modifica es la de Kernel, pero hasta los momentos no he explicado mucho al respecto, por lo que ac谩 solamente la voy a nombrar y m谩s adelante habr谩 un video dedicado completamente a explicar de qu茅 se trata los Kernel y porque son bastante 煤tiles sobretodo para este tipo de algoritmos.

Por los momentos me voy a limitar a decir que ac谩 se puede definir uno de los tres tipos de Kernel que se manejan, lineal, que se utiliza cuando los datos son lineales, y para los datos no lineales se cuenta con 鈥減oly鈥, 鈥渞bf鈥 y 鈥渟igmoid鈥. Si este par谩metro no se configura al momento de utilizar este algoritmo, se utilizar谩 鈥渞bf鈥 como Kernel por defecto.

Recuerda que estos son solo algunos de los par谩metros que cuenta este algoritmo para su configuraci贸n.

por que虂 programar es tan dificil

Precisi贸n de Regresi贸n Lineal con Scikit Learn

Teniendo toda esta informaci贸n ya tenemos nuestro modelo de Vectores de Soporte Regresi贸n listo, ahora el 煤ltimo paso es el de evaluar el rendimiento del algoritmo, este paso es particularmente importante para comparar qu茅 tan bien funcionan diferentes algoritmos en un conjunto de datos particular. Como lo explicamos en una anterior publicaci贸n聽para conocer la precisi贸n debemos implementar la estad铆stica R al cuadrado, pero, obviamente, la librer铆a Scikit Learn cuenta con una instrucci贸n que hace nuestro trabajo mucho m谩s sencillo. Para este caso solamente tenemos que utilizar la instrucci贸n 鈥渟core鈥 junto con los datos de pruebas y nos devolver谩 la precisi贸n del modelo con los datos utilizados.

Recuerda que todos estos datos los podemos obtener despu茅s de haber entrenado el modelo de lo contrario nuestro programa nos arrojar谩 un error.

machine learning seg煤n expertos

Resumen de comandos Scikit Learn

En resumen, los comandos a utilizar para implementar un algoritmo de Regresi贸n Lineal ser铆an los siguientes:

Vectores de Soporte Regresio虂n Scikit Learn 3

Sabiendo c贸mo implementar el algoritmo de Vectores de Soporte Regresi贸n con la librer铆a de Scikit Learn, ha llegado el momento de desarrollar un proyecto pr谩ctico.

Por que python para machine Learning

Definici贸n del proyecto

En esta pr谩ctica del algoritmo de Vectores de Soporte Regresi贸n, se desarrollar谩 un modelo para predecir el precio de las casas en Boston de acuerdo al n煤mero de habitaciones que cuenta la vivienda.

Para este an谩lisis vamos a utilizar el dataset disponible en la librer铆a scikit-learn correspondiente al Boston Housing o las casas de Boston.聽Si no lo sab铆as dentro de la聽librer铆a sckit-learn聽se dispone de varios聽conjuntos de datos, muy b谩sicos, con los que puedes practicar tus conocimientos de Machine Learning, no son muchos, pero cubre los principales tipos de algoritmos como regresi贸n聽y聽clasificaci贸n.

El algoritmo espec铆fico que se utilizar谩 ser谩 Vectores de Soporte Regresi贸n.

usos de la inteligencia artificial en la vida cotidiana

Obtener los de datos

El primer paso que daremos ser谩 el de importar las librer铆as que vamos utilizar, en especial las necesarias para importar los datos que utilizaremos.

En este caso vamos a importar de sklearn el datasets, que es donde se guardan todos los conjuntos de datos que dispone esta librer铆a y a su vez importamos de una vez linear_model.

				
					#Se importan la librerias a utilizar
from sklearn import datasets, linear_model
				
			

Seguidamente importamos los datos, para ello utilizamos la instrucci贸n datasets.load_boston().

				
					#Importamos los datos de la misma librer铆a de scikit-learn
boston = datasets.load_boston()
				
			

Tenemos mucha informaci贸n dentro de esta variable lo que se nos hace dif铆cil entender la informaci贸n, por lo tanto, ahora procedemos a entender la data.

aprender a programar para machine Learning 1

Entender los datos

Para entender los datos que estaremos utilizando el proyecto nos vamos a valor de varias instrucciones propias de Python y as铆 verificar la informaci贸n contenida en el conjunto de datos que acabamos de importar. Para este fin utilizamos la instrucci贸n keys.

				
					#Verifico la informaci贸n contenida en el dataset
print('Informaci贸n en el dataset:')
print(boston.keys())
				
			

Regresio虂n-Lineal-simple-practica-1

Como puedes observar el conjunto de datos cuenta con la siguiente informaci贸n: primeramente, la data, seguidamente target聽que ser铆a la columna con las etiquetas o respuestas, posteriormente tenemos feature_names que ser铆an los nombres de cada una de las columnas de la data y finalmente tenemos DESCR que ser铆a la descripci贸n total del dataset.

Sabiendo ya esto podemos ahora utilizar estos nombres para entender mejor los datos, lo primero que vamos a hacer es utilizar DESCR para ver las caracter铆sticas del dataset.

				
					#Verifico las caracter铆sticas del dataset
print('Caracter铆sticas del dataset:')
print(boston.DESCR)
				
			

Como puedes leer en la descripci贸n este dataset cuenta con 506 datos y 13 atributos, la columna 14 es el target y es la media del valor de las viviendas.

Seguidamente tenemos la descripci贸n del significado de cada una de las columnas o atributos de los datos. De igual forma, nos indica un dato importante para nuestro an谩lisis y es que indica que no existe ning煤n valor perdido, en consecuencia, nuestros datos est谩n completos por lo que no es necesario realizar mucho preprocesamiento a los datos.

Ahora utilizaremos la instrucci贸n shape para determinar la cantidad de datos contamos, aunque este es un paso de m谩s ya que esta informaci贸n nos la hab铆a dado previamente la descripci贸n del dataset, pero de todas formas lo hacemos.

				
					#Verifico la cantidad de datos que hay en los dataset
print('Cantidad de datos:')
print(boston.data.shape)
				
			

Regresio虂n-Lineal-simple-practica-2

Como ya nos lo visto anteriormente este conjunto de datos cuenta con 506 muestras y 13 columnas.

Finalmente veamos las etiquetas de cada columna para ello utilizamos feature_names.

				
					#Verifico la informaci贸n de las columnas
print('Nombres columnas:')
print(boston.feature_names)
				
			

Regresio虂n-Lineal-simple-practica-3

Sabiendo toda esta informaci贸n entonces procedemos a preparar los datos que vamos a utilizar para crear el modelo.

Por que python para machine Learning

Procesamiento de los datos

Lo primero que debemos hacer es separar los datos en 鈥淴鈥 y 鈥測鈥, a estas variables las vamos a llamar X_svr y y_svr, la primera ser谩 igual a la columna 6 del dataset que previamente procesamos, por su parte y_svr ser谩 igual a la columna de target.
				
					#Seleccionamos solamente la columna 6 del dataset
X_svr = boston.data[:, np.newaxis, 5]

#Definimos los datos correspondientes a las etiquetas
y_svr = boston.target
				
			
Grafiquemos estos datos para observar con m谩s detalle los datos que estaremos manejando.
				
					#Graficamos los datos correspondientes
plt.scatter(X_svr, y_svr)
plt.show()
				
			

maquina-de-vectores-de-soporte-regresio虂n-pra虂ctica-con-python

Como podemos observar estos datos tienen un comportamiento lineal, por lo que ac谩 implementaremos el algoritmo de Vectores de Soporte Regresi贸n, con un kernel l铆nea, de la misma forma que lo explicamos en la teor铆a.

Procedemos ahora a separar los datos en entrenamiento y prueba, para ello utilizamos la instrucci贸n train_test_split.

				
					from sklearn.model_selection import train_test_split

#Separo los datos de "train" en entrenamiento y prueba para probar los algoritmos
X_train, X_test, y_train, y_test = train_test_split(X_svr, y_svr, test_size=0.2)

				
			

Con esto ya tenemos nuestros datos divididos en datos de entrenamiento y prueba.

Qu茅 son las Redes Neuronales Artificiales

Desarrollo del algoritmo

Con los datos separados en entrenamiento y prueba ha llegado el momento de construir el modelo de Machine Learning, por lo que lo primero que hacemos es importar SVR desde el m贸dulo sklearn punto svm.

				
					from sklearn.svm import SVR
				
			

Una vez realizado esto podemos proceder a definir el algoritmo que lo vamos a llamar svr. Ac谩 vamos a detenernos un momento para explicar la configuraci贸n que le estamos dando.

				
					#Definimos el algoritmo a utilizar
svr = SVR(kernel='linear', C=1.0, epsilon=0.2)
				
			

Lo primero que definimos es el kernel, para este caso definimos uno b谩sico como lo es el kernel lineal.

Como te lo explique anteriormente, en este algoritmo, se puede configurar el kernel de distintas formas una de ellas es lineal en caso de que utiliz谩ramos datos lineales. Pero tambi茅n se puede configurar como rbf que es un kernel para datos no lineales.

En caso de que est茅s utilizando otros datos y estos no sean lineales, no te recomiendo definir el kernel lineal ya que no se puede aplicar para ese conjunto de datos.

Otra valor que definimos en la configuraci贸n del algoritmo es el de C que ser谩 igual a 1, C es una constante dentro de la f贸rmula de Vectores de Soporte Regresi贸n, que determina el equilibrio entre la regularidad de la funci贸n y la cuant铆a hasta la cual toleramos desviaciones mayores que las bandas de soporte.聽

Si colocamos un valor de C muy bajo nuestro modelo aceptar谩 m谩s errores por lo que colocar un valor igual a 1 es adecuado para construir este modelo.

Otra variable que configuramos es la de epsilon que ser谩 igual a 0,2, para recordarles epsilon, son las variables que controlan el error cometido por la funci贸n de regresi贸n al aproximar a la bandas.

Definido todas estas variables, ahora si podemos entrenar el algoritmo utilizando la instrucci贸n fit y los datos de entrenamiento.

				
					#Entrenamos el modelo
svr.fit(X_train, y_train)
				
			
Seguidamente realizamos una predicci贸n utilizando los datos de prueba.
				
					#Realizamos una predicci贸n
Y_pred = svr.predict(X_test)
				
			

Visualicemos los datos de entrenamiento junto con el modelo, para ello utilizamos las instrucciones que se encuentran dentro de la librer铆a matplotlib.

				
					#Graficamos los datos junto con el modelo
plt.scatter(X_test, y_test)
plt.plot(X_test, Y_pred, color='red', linewidth=3)
plt.show()
				
			

maquina-de-vectores-de-soporte-regresio虂n-pra虂ctica-con-python-1

C贸mo definimos, al momento de configurar el algoritmo, el kernel que estamos utilizando es lineal por lo que el modelo es una l铆nea, la cual va a tratar de cubrir la mayor cantidad de datos. Pero si observamos ac谩 la l铆nea ac谩 tiene un comportamiento similar a los datos de entrenamiento.

maquina-de-vectores-de-soporte-regresio虂n-pra虂ctica-con-python-2

importancia de las matema虂ticas en machine learning

An谩lisis de los resultados

Como podemos observar en este recuadro tenemos los datos reales mientras que en este otro est谩n los datos obtenidos de nuestra predicci贸n implementando el modelo. Si observamos con detenimiento estos datos nos podemos dar cuenta que en ciertos momentos los datos reales son muy parecidos con los datos que se han calculados mientras que en otros casos los datos son totalmente distintos.

Veamos ahora la precisi贸n del modelo utilizando la instrucci贸n score, el cual devuelve el resultado de la estad铆stica R al cuadrado. El resultado obtenido ac谩 es de 0,458, este valor es muy parecido a lo que hemos obtenido con los otros algoritmos que hemos evaluado anteriormente.

				
					print('DATOS DEL MODELO VECTORES DE SOPORTE REGRESI脫N')
print()

print('Precisi贸n del modelo:')
print(svr.score(X_train, y_train))
				
			

maquina-de-vectores-de-soporte-regresio虂n-pra虂ctica-con-python-3

Como ya lo hab铆amos visto comparando los resultados de 鈥測_predict鈥 podr铆amos deducir que la precisi贸n no iba a ser muy buena. Recuerda que mientras este valor sea m谩s cercano a 1 mejor ser谩 nuestro modelo.

por que虂 programar es tan dificil

Programa completo

A continuaci贸n se encuentra el c贸digo completo:

				
					"""
Vectores de Soporte Regresi贸n
"""

########## LIBRER脥AS A UTILIZAR ##########

#Se importan la librerias a utilizar
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets


########## PREPARAR LA DATA ##########

#Importamos los datos de la misma librer铆a de scikit-learn
boston = datasets.load_boston()
print(boston)
print()

########## ENTENDIMIENTO DE LA DATA ##########

#Verifico la informaci贸n contenida en el dataset
print('Informaci贸n en el dataset:')
print(boston.keys())
print()

#Verifico las caracter铆sticas del dataset
print('Caracter铆sticas del dataset:')
print(boston.DESCR)

#Verifico la cantidad de datos que hay en los dataset
print('Cantidad de datos:')
print(boston.data.shape)
print()

#Verifico la informaci贸n de las columnas
print('Nombres columnas:')
print(boston.feature_names)

########## PREPARAR LA DATA VECTORES DE SOPORTE REGRESI脫N ##########

#Seleccionamos solamente la columna 6 del dataset
X_svr = boston.data[:, np.newaxis, 5]

#Defino los datos correspondientes a las etiquetas
y_svr = boston.target

#Graficamos los datos correspondientes
plt.scatter(X_svr, y_svr)
plt.show()

########## IMPLEMENTACI脫N DE VECTORES DE SOPORTE REGRESI脫N ##########

from sklearn.model_selection import train_test_split

#Separo los datos de "train" en entrenamiento y prueba para probar los algoritmos
X_train, X_test, y_train, y_test = train_test_split(X_svr, y_svr, test_size=0.2)

from sklearn.svm import SVR

#Defino el algoritmo a utilizar
svr = SVR(kernel='linear', C=1.0, epsilon=0.2)

#Entreno el modelo
svr.fit(X_train, y_train)

#Realizo una predicci贸n
Y_pred = svr.predict(X_test)

#Graficamos los datos junto con el modelo
plt.scatter(X_test, y_test)
plt.plot(X_test, Y_pred, color='red', linewidth=3)
plt.show()

print()
print('DATOS DEL MODELO VECTORES DE SOPORTE REGRESI脫N')
print()

print('Precisi贸n del modelo:')
print(svr.score(X_train, y_train)
				
			

Si te llamo la atenci贸n todo este contenido y te animaste a empezar a estudiar Inteligencia Artificial, he desarrollado un curso que te ayudar谩, de igual forma a iniciar tu camino dentro de est谩 tecnolog铆a. Este curso te sentar谩 las bases y te dar谩 m谩s claridad para poder seleccionar el enfoque o 谩rea que m谩s te interese sobre la Inteligencia Artificial, de igual forma te ayudar谩 tener m谩s claridad en muchos conceptos que seguramente en estos momentos te parece confusos. Este curso es ideal si apenas est谩s empezando. Si quieres m谩s informaci贸n puedes ingresar a este enlace.

4 comentarios en “Vectores de Soporte Regresi贸n – Pr谩ctica con Python”

  1. Hola, tengo una pregunta en cuanto al visualizar esta regresi贸n, y es si hay alguna forma de poder visualizar las l铆neas de vectores de soporte. No he encontrado nada al respecto, solo con SVC, pero no puedo hacerlo en SVR. Gracias de antemano.

  2. Valentin Lorbeer

    Hola! Muy buenos tus videos.

    Yo uso Databricks, y me gustaria saber si existe alguna forma de comparar los valores obtenidos en nuestra predicci贸n con los valores reales, para ver que tal es el comportamiento del modelo creado. Por lo que he visto, t煤 lo haces en Spyder. Pero me gustaria saber si puedo visualizar al menos algunos datos del y_test y compararlos con su valor correspondiente en y_predict.

    Gracias por todo, excelente contenido, de gran ayuda.

    Saludos,

    Valent铆n Lorbeer.

Deja un comentario

Tu direcci贸n de correo electr贸nico no ser谩 publicada.