Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Una de las ramas de estudio que cada vez esta ganando más popularidad
dentro de las ciencias de la computación es el aprendizaje automático o
Machine Learning. Muchos de los servicios que utilizamos en nuestro día a día
como google, gmail, net�ix, spotify o amazon se valen de las herramientas que
les brinda el Machine Learning para alcanzar un servicio cada vez más
personalizado y lograr así ventajas competitivas sobre sus rivales.
Aprendizaje supervisado
Aprendizaje no supervisado
Sobreajuste
Como mencionamos cuando de�nimos al Machine Learning, la idea
fundamental es encontrar patrones que podamos generalizar para luego
poder aplicar esta generalización sobre los casos que todavía no hemos
observado y realizar predicciones. Pero también puede ocurrir que durante el
entrenamiento solo descubramos casualidades en los datos que se parecen a
patrones interesantes, pero que no generalicen. Esto es lo que se conoce con
el nombre de sobreajuste o sobreentrenamiento.
1. Recolectar los datos. Podemos recolectar los datos desde muchas fuentes,
podemos por ejemplo extraer los datos de un sitio web o obtener los datos
utilizando una API o desde una base de datos. Podemos también utilizar
otros dispositivos que recolectan los datos por nosotros; o utilizar datos
que son de dominio público. El número de opciones que tenemos para
recolectar datos no tiene �n!. Este paso parece obvio, pero es uno de los
que más complicaciones trae y más tiempo consume.
2. Preprocesar los datos. Una vez que tenemos los datos, tenemos que
asegurarnos que tiene el formato correcto para nutrir nuestro algoritmo
de aprendizaje. Es prácticamente inevitable tener que realizar varias
tareas de preprocesamiento antes de poder utilizar los datos. Igualmente
este punto suele ser mucho más sencillo que el paso anterior.
3. Explorar los datos. Una vez que ya tenemos los datos y están con el
formato correcto, podemos realizar un pre análisis para corregir los casos
de valores faltantes o intentar encontrar a simple vista algún patrón en los
mismos que nos facilite la construcción del modelo. En esta etapa suelen
ser de mucha utilidad las medidas estadísticas y los grá�cos en 2 y 3
dimensiones para tener una idea visual de como se comportan nuestros
datos. En este punto podemos detectar valores atípicos que debamos
descartar; o encontrar las características que más in�uencia tienen para
realizar una predicción.
4. Entrenar el algoritmo. Aquí es donde comenzamos a utilizar las técnicas
de Machine Learning realmente. En esta etapa nutrimos al o los algoritmos
de aprendizaje con los datos que venimos procesando en las etapas
anteriores. La idea es que los algoritmos puedan extraer información útil
de los datos que le pasamos para luego poder hacer predicciones.
5. Evaluar el algoritmo. En esta etapa ponemos a prueba la información o
conocimiento que el algoritmo obtuvo del entrenamiento del paso
anterior. Evaluamos que tan preciso es el algoritmo en sus predicciones y
si no estamos muy conforme con su rendimiento, podemos volver a la
etapa anterior y continuar entrenando el algoritmo cambiando algunos
parámetros hasta lograr un rendimiento aceptable.
6. Utilizar el modelo. En esta ultima etapa, ya ponemos a nuestro modelo a
enfrentarse al problema real. Aquí también podemos medir su
rendimiento, lo que tal vez nos obligue a revisar todos los pasos
anteriores.
Librerías de Python para machine learning
Como siempre me gusta comentar, una de las grandes ventajas que ofrece
Python sobre otros lenguajes de programación; es lo grande y prolifera que es
la comunidad de desarrolladores que lo rodean; comunidad que ha
contribuido con una gran variedad de librerías de primer nivel que extienden
la funcionalidades del lenguaje. Para el caso de Machine Learning, las
principales librerías que podemos utilizar son:
Scikit-Learn
Statsmodels
PyMC
NTLK
NLTK es la librería líder para el procesamiento del lenguaje natural o NLP por
sus siglas en inglés. Proporciona interfaces fáciles de usar a más de 50
cuerpos y recursos léxicos, como WordNet, junto con un conjunto de
bibliotecas de procesamiento de texto para la clasi�cación, tokenización, el
etiquetado, el análisis y el razonamiento semántico.
Obviamente, aquí solo estoy listando unas pocas de las muchas librerías que
existen en Python para trabajar con problemas de Machine Learning, los
invito a realizar su propia investigación sobre el tema.
1. Regresión Lineal
2. Regresión Logística
3. Arboles de Decision
4. Random Forest
5. SVM o Máquinas de vectores de soporte.
6. KNN o K vecinos más cercanos.
7. K-means
Regresión Lineal
Se utiliza para estimar los valores reales (costo de las viviendas, el número de
llamadas, ventas totales, etc.) basados en variables continuas. La idea es tratar
de establecer la relación entre las variables independientes y dependientes
por medio de ajustar una mejor línea recta con respecto a los puntos. Esta
línea de mejor ajuste se conoce como línea de regresión y esta representada
por la siguiente ecuación lineal:
Y = β0 + β1 X1 + β2 X2 +. . . +βn Xn
boston = datasets.load_boston()
boston_df = pd.DataFrame(boston.data, columns=boston.feature_names)
boston_df['TARGET'] = boston.target
boston_df.head() # estructura de nuestro dataset.
Pred
0 30.008213
1 25.029861
2 30.570232
3 28.608141
4 27.942882
# Calculando el desvio
np.mean(boston.target - predicciones)
Como podemos ver, el desvío del modelo es pequeño, por lo que sus
resultados para este ejemplo son bastante con�ables.
Regresión Logística
1
f(x) =
1 + e−1
# Importando el modelo
ffrroomm sklearn.linear_model iimmppoorrtt LogisticRegression
Como podemos ver en este ejemplo también nuestro modelo tiene bastante
precisión clasi�cando las categorías de nuestro dataset.
Arboles de decisión
Luego de usar el lenguaje dot para convertir nuestro arbol a formato jpeg, ya
podemos ver la imagen del mismo.
# verificando la precisión
print("precisión del modelo: {0: .2f}".format((y == ad.predict(X)).mean()))
En este ejemplo, nuestro árbol tiene una precisión del 89%. Tener en cuenta
que los Arboles de Decision tienen tendencia al sobreajuste.
Random Forest
En lugar de utilizar solo un arbol para decidir, ¿por qué no utilizar todo un
bosque?!!. Esta es la idea central detrás del algoritmo de Random Forest.
Tarbaja construyendo una gran cantidad de arboles de decision muy poco
profundos, y luego toma la clase que cada árbol eligió. Esta idea es muy
poderosa en Machine Learning. Si tenemos en cuenta que un sencillo
clasi�cador entrenado podría tener sólo el 60 por ciento de precisión,
podemos entrenar un montón de clasi�cadores que sean por lo general
acertados y luego podemos utilizar la sabiduría de todos los aprendices
juntos. Con Python los podemos utilizar de la siguiente manera:
# Creando un dataset de ejemplo
X, y = datasets.make_classification(1000)
# verificando la precisión
print("precisión del modelo: {0: .2f}".format((y == rf.predict(X)).mean()))
La idea detrás de SVM es encontrar un plano que separe los grupos dentro de
los datos de la mejor forma posible. Aquí, la separación signi�ca que la
elección del plano maximiza el margen entre los puntos más cercanos en el
plano; éstos puntos se denominan vectores de soporte. Pasemos al ejemplo.
# importanto SVM
ffrroomm sklearn iimmppoorrtt svm
Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
plt.contourf(xx, yy, Z, cmap=plt.cm.Paired, alpha=0.8)
plt.show()
KNN o k vecinos más cercanos
# importando KNN
ffrroomm sklearn.neighbors iimmppoorrtt KNeighborsRegressor
K-means
ax.set_title("Agrupamiento perfecto")
ax.legend()
plt.show()
# importando KMeans
ffrroomm sklearn.cluster iimmppoorrtt KMeans
# Creando el modelo
kmeans = KMeans(n_clusters=3)
kmeans.fit(grupos) # Ajustando el modelo
ax.set_title("Agrupamiento s/modelo")
ax.legend()
plt.show()