Unidad 4. Machine Learning Con Python
Unidad 4. Machine Learning Con Python
PLANTEL AGUASCALIENTES
EDUCACIÓN A DISTANCIA
Materia
Programación en Python
Docente
Dr. Iván Castillo Zúñiga.
[email protected]
“EXCELENTES PROFESIONISTAS, MEJORES SERES HUMANOS”
Introducción.
Para un viaje exitoso de aprendizaje de máquina del inglés Machine Learning, es necesario elegir el
lenguaje de codificación adecuado desde el principio, ya que su elección determinará su futuro. En
este paso, debe pensar estratégicamente y organizar correctamente las prioridades y no perder tiempo
en cosas innecesarias.
Python es una opción perfecta para que los programadores se centren para saltar al campo del
aprendizaje de máquina y la ciencia de datos. Es un lenguaje minimalista e intuitivo con una línea de
biblioteca completa (llamada frameworks) que reduce significativamente el tiempo requerido para
obtener sus primeros resultados.
En primer lugar, debe saber que hay varias etapas de aprendizaje de máquina:
• Recopilación de datos.
• Clasificación de datos.
• Análisis de los datos.
• Desarrollo de algoritmos.
• Algoritmo de comprobación generado.
• El uso de un algoritmo para sacar conclusiones.
Para buscar patrones, se utilizan varios algoritmos, que se dividen en dos grupos:
1. Aprendizaje automático.
2. Aprendizaje supervisado.
a. Árboles de decisión.
b. Máquinas de Soporte Vectorial (MSV).
c. Clasificador de Bayes.
d. K-vecinos más cercanos.
e. Regresión lineal.
f. Redes neuronales.
Dataset.
Un conjunto de datos o dataset corresponde a los contenidos de una única tabla de base de
datos o una única matriz de datos de estadística, donde cada columna de la tabla representa
una variable en particular, y cada fila representa a un miembro determinado del conjunto de
datos que estamos tratando. En un conjunto de datos o dataset tenemos todos los valores que
puede tener cada una de las variables, como por ejemplo la altura y el peso de un objeto, que
corresponden a cada miembro del conjunto de datos. Cada uno de estos valores se conoce
con el nombre de dato. El conjunto de datos puede incluir datos para uno o más miembros
en función de su número de filas.
El dataset incluye también las relaciones entre las tablas que contienen los datos. Si nos
movemos en el contexto de Big Data, entendemos por dataset aquellos conjuntos de datos
tan grandes que las aplicaciones de procesamiento de datos tradicionales no los pueden
procesar debido a la gran cantidad de datos contenidos en la tabla o matriz.
Una de las principales características de los datasets es que ya tienen una estructura.
Un DataFrame es una estructura de datos con dos dimensiones en la cual se puede guardar
datos de distintos tipos (como caracteres, enteros, valores de punto flotante, factores y más)
en columnas. Un DataFrame siempre tiene un índice (con inicio en 0). El índice refiere a la
posición de un elemento en la estructura de datos.
Obtener los datos correctos significa reunir o identificar los datos que se correlacionan con
los resultados que desea predecir; es decir, datos que contienen una señal sobre los eventos
que le interesan. Los datos deben estar alineados con el problema que está tratando de
resolver. Las imágenes de gatitos no son muy útiles cuando construyes un sistema de
identificación facial. Un científico de datos debe verificar que los datos estén alineados con el
problema que busca resolver. Si no tiene los datos correctos, sus esfuerzos para construir una
solución de Inteligencia Artificial (IA) deben volver a la etapa de recopilación de datos.
En esta etapa, los humanos con conocimientos necesitan encontrar los datos brutos correctos
y transformarlos en una representación numérica que el algoritmo de aprendizaje pueda
entender, un dataset (matriz) para aprendizaje supervisado (Supervised learning) o un tensor
(matriz multidimensional) para aprendizaje profundo (Deep learning). Construir un conjunto
de entrenamiento es, en cierto sentido, pre-pre-entrenamiento.
Los conjuntos de entrenamiento que requieren mucho tiempo o experiencia pueden servir
como una ventaja patentada en el mundo de la ciencia de datos y la resolución de problemas.
La naturaleza de la experiencia radica principalmente en decirle a su algoritmo lo que le
importa seleccionando lo que se incluye en el conjunto de entrenamiento.
Se trata de contar una historia, a través de los datos iniciales que seleccione, que guiará sus
redes de aprendizaje profundo a medida que extraen las características importantes, tanto en
el conjunto de entrenamiento como en los datos sin procesar que han sido creados para
estudiar.
Para crear un conjunto de entrenamiento útil, debe comprender el problema que está
resolviendo; es decir, a qué quiere que presten atención sus algoritmos de aprendizaje
supervisado o redes de aprendizaje profundo, a qué resultados desea predecir.
El primer conjunto que usa es el conjunto de entrenamiento, el más grande de los conjuntos.
Ejecutar un conjunto de entrenamiento a través de un algoritmo de aprendizaje supervisado
o una red neuronal en aprendizaje profundo le enseña a la red cómo sopesar diferentes
características, ajustando los coeficientes de acuerdo con su probabilidad de minimizar los
errores en sus resultados.
Podemos automatizar el proceso de manipular datos con Python. Vale la pena pasar tiempo
escribiendo el código que haga estas tareas ya que una vez que se escribió, lo podemos usar
una y otra vez en distintos conjuntos de datos que usen un formato similar. Esto hace a
nuestros métodos fácilmente reproducibles. También resulta fácil compartir nuestro código
con nuestros colegas y ellos pueden replicar el mismo análisis.
Pandas en Python.
Una de las mejores opciones para trabajar con datos tabulares en Python es usar la Python
Data Analysis Library (alias Pandas). La biblioteca Pandas provee estructuras de datos, que
generan gráficos de alta calidad con matplotlib y se integra de buena forma con otras
bibliotecas que usan arrays de NumPy (la cual es otra biblioteca de Python).
Python no carga todas las bibliotecas disponibles por default. Se tiene que usar el
enunciado import en nuestro código para usar las funciones de la biblioteca. Para importar
una biblioteca se usa la sintaxis import nombreDeLaBiblioteca. Si además le queremos poner
un sobrenombre para acortar los comandos, se puede agregar as sobrenombreAUsar. Un
ejemplo es importar la biblioteca panda usando su sobrenombre común pd como en el
siguiente ejemplo:
import pandas as pd
CSV son las siglas para Comma-Separated Values, valores separados por coma, y es una
manera común de guardar datos. Otros símbolos pueden ser usados, te puedes encontrar
valores separados por tabuladores, por punto y coma o por espacios en blanco. Es fácil
remplazar un separador por otro, para usar tu aplicación. La primera línea del archivo
generalmente contiene los encabezados que dicen que hay en cada columna. CSV (y otros
separadores) hacen fácil compartir los datos y pueden ser importados y exportados desde
distintos programas, incluyendo Microsoft Excel.
La función size es usada para mostrar el tamaño total del Dataframe, como se muestra a
continuación:
La función shape es usada para mostrar cuantas filas y columnas tiene el Dataframe, como
se muestra a continuación:
La función columns es usada para mostrar las columnas o atributos que tiene el Dataframe,
como se muestra a continuación:
La función axes es usada para mostrar los renglones y columnas que tiene el Dataframe,
como se muestra a continuación
La Tabla 1, describe las funciones usadas para obtener datos estadísticos de como esta
conformado un Dataframe, y la Tabla 2, describe los métodos para manipular un Dataframe.
El aprendizaje profundo es un nuevo campo de estudio el cual está inspirado por la estructura
y función del cerebro humano, de igual manera está basado en redes neuronales artificiales
en vez de sólo conceptos estadísticos. El aprendizaje profundo se puede usar en ambos
acercamientos, supervisado y no supervisado.
Los primeros modelos de redes neuronales datan de 1943 por los neurólogos Warren
McCulloch y Walter Pitts. Años más tarde, en 1949, Donald Hebb desarrolló sus ideas sobre
el aprendizaje neuronal, quedando reflejado en la "regla de Hebb". En 1958, Rosenblatt
desarrolló el Perceptron simple, y en 1960, Widrow y Hoff desarrollaron el Adaline, que fue
la primera aplicación industrial real.
Una Red neuronal se compone de unidades llamadas neuronas. Cada neurona recibe una
serie de entradas a través de interconexiones y emite una salida. Esta salida viene dada por
tres funciones:
1. Una función de propagación (también conocida como función de excitación), que por
lo general consiste en el sumatorio de cada entrada multiplicada por el peso de su
interconexión (valor neto). Si el peso es positivo, la conexión se denomina excitatoria;
si es negativo, se denomina inhibitoria.
2. Una función de activación, que modifica a la anterior. Puede no existir, siendo en este
caso la salida la misma función de propagación.
3. Una función de transferencia, que se aplica al valor devuelto por la función de
activación. Se utiliza para acotar la salida de la neurona y generalmente viene dada
por la interpretación que queramos darles a dichas salidas. Algunas de las más
utilizadas son la función sigmoidea (para obtener valores en el intervalo (0,1)) y la
tangente hiperbólica (para obtener valores en el intervalo (-1,1)).
1. La red comienza en un estado aleatorio. Los pesos entre neuronas poseen valores
pequeños y aleatorios (entre -1 y 1).
2. Seleccionar un vector de entrada, x, a partir del conjunto de ejemplos de
entrenamiento.
3. Se propaga la activación hacia delante a través de los pesos en la red para calcular la
salida O =w.x.
4. Si O = t (Es decir, si la salida de la red es correcta) volver al paso 2.
5. En caso contrario el cambio de los pesos se realiza atendiendo a la siguiente expresión:
wi = n xi ( t o ) donde n es un número pequeño positivo conocido como coeficiente
de aprendizaje. Volver al paso 2.
Figura 4. Perceptron multicapa con una capa oculta con salida escalar.
Algoritmo de Red Neuronal en Python.
# Librerias
# ********************************************************
# Libreria para el tiempo
import time
# Libreria para algoritmos de machine learning
import sklearn
# Especificaciones para usar una Red Neuronal
# Importamos el train_test_split para dividir los datos de entrenamiento y prueba
from sklearn.model_selection import train_test_split
# Especificaciones para usar la Red Neuronal Perceptron Muticapa
from sklearn.neural_network import MLPClassifier
# Libreria para construir la matriz de confusión
from sklearn.metrics import confusion_matrix
# Libreria para ignorar los warnings
import warnings
warnings.filterwarnings("ignore", category=FutureWarning)
# Libreria para cargar el dataset o dataframe
import pandas as pd
import seaborn as sns
# Libreria para usar graficación de la matríz de confusión
import matplotlib.pyplot as plt
# Especificación del algoritmo a utilizar
print("\n")
print ("----------------------------------------------------------------------------------------------------------------------------------------------------------")
print (" MODELO DE CLASIFICACIÓN DE UNA RED NEURONAL (para detección de vocabulario de Cibercrimen)")
print ("----------------------------------------------------------------------------------------------------------------------------------------------------------")
La técnica lineal, utiliza un clasificador lineal con el margen más amplio, como se aprecia en
el gráfico (B) de la Fig. 7, (donde el máximo margen es la mejor solución), reduciendo al
mínimo, el error en donde podrían existir una cantidad infinita de posibles hiperplanos, como
se aprecia en el gráfico (A) de la misma Figura. El margen se define como el ancho que limita
los datos, de esta manera se separa la clase positiva de la clase negativa.
• Polinómica.
• Gaussiana.
• Sigmoidal.
• Multicuadrática inversa.
El soporte multiclase se maneja de acuerdo con un esquema uno contra uno. Para obtener
detalles sobre la formulación matemática precisa de las funciones del núcleo proporcionadas
y cómo gamma, coef0 y grado se afectan entre sí, consulte la sección correspondiente en la
documentación narrativa: Funciones del núcleo.
Algoritmo de Máquinas de Soporte Vectorial.
# Librerias
# ********************************************************
# Libreria para el tiempo
import time
# Libreria para algoritmos de machine learning
import sklearn
# Libreria para generar modelos con Máquinas de Soporte Vectorial
from sklearn.svm import SVC
# Importamos el train_test_split para dividir los datos de entrenamiento y prueba
from sklearn.model_selection import train_test_split
# Libreria para construir la matriz de confusión
from sklearn.metrics import confusion_matrix
# Libreria para ignorar los warnings
import warnings
warnings.filterwarnings("ignore", category=FutureWarning)
# Libreria para cargar el dataset o dataframe
import pandas as pd
import seaborn as sns
# Libreria para usar graficación de la matríz de confusión
import matplotlib.pyplot as plt
# Especificación del algoritmo a utilizar
print("\n")
print ("----------------------------------------------------------------------------------------")
print (" MODELO DE CLASIFICACIÓN CON MÁQUINAS DE SOPOERTE VECTORIAL")
Implementar un caso de estudio real o ficticio usando aprendizaje supervisado con red
neuronal y máquinas de soporte vectorial. Los puntos que debe considerar en su solución y
en la escritura de su reporte, son los siguientes:
1. Definir el problema.
• Describir el problema.
• Que se pretende predecir.
• De que datos se dispone.
• Que datos es necesario conseguir.
3. Métrica de éxito.
• Definir una forma apropiada de cuantificar como de buenos son los resultados
obtenidos.
4. Machine Learning.
• Proceso de carga de datos.
• Implementar y adecuar el algoritmo Red neuronal.
• Implementar y adecuar el algoritmo de Máquinas de Soporte Vectorial.
• Especificar el porcentaje de clasificación o predicción obtenido.
1. Adnan, A., Lee, T. & Prakash, Amit. (2016). “Elements of Programming Interviews in
Python. The insider Guide”. Ed. Amazon Services. 458 pág. ISBN: 978-1537713946.
2. Barry, P. (2016). “Head First Python”. 2nd Edition. Boston: O ́Reilly. 429 pág. ISBN: 978-
1491919538.
3. Bennett, J. (2019). “Supercharged Python: Take Your Code to the Next Level”. Ed. Addison-
Wesley. 672 pág. ISBN: 978-0135159941.
4. Blog Tecnología para el Desarrollo (2018). “Es Python el lenguaje del futuro”. Descargado el
9 de septiembre del sitio de Internet:
https://www.paradigmadigital.com/dev/es-python-el-lenguaje-del-futuro/
5. Buttu, M. (2016). “El Gran libro de Python”. Ed. Marcocombo. 662 pág. ISBN: 978-
8426722904.
6. Danjou, J. (2019). “Serious Python: Black-Belt Advice on Deployment, Scalability, Testing,
and More”. Ed. Amazon Digital, version Kindle. 225 pág. ISBN: 1593278780.
7. Deitel, P. (2019). “Python for Programmers: with Big Data and Artificial Intelligence Case
Studies”. Ed. Amazon Services. Version kindle. 640 pág. ASIN: B07PP9Q8MC.
8. DK. (2017). “Coding Projects in Python”. Editorial: DK Publishing (Dorling Kindersley). 224
pág. ISBN: 978-1465461889.
9. Garcia, A. (2017). “Numerical Methods for Physics (Python)”. CreateSpace Independent
Publishing Platform; 2da. Ed. Editorial: CreateSpace Independent Publishing Platform. 350
Pág. ISBN: 978-1548865498.
10. Hinojosa, Á. (2016). “Python paso a paso”. Ed. Ra-Ma. 230 pág. ISBN: 978-8499646114.
11. Kopec, D. (2019). “Classic Computer Science Problems in Python”. Editorial: Manning
Publications. 224 pág. ISBN: 978-1617295980.
12. Librosweb (2018). “Bases de Datos en Python con MySQL”. Descargado el 14 de septiembre
del sitio de Internet: https://librosweb.es/libro/python/capitulo-12.html
13. Lutz, L. (2018). “Guía paso a paso para aprender programación Python). Ed. Amazon
Services. 246 pág. ASIN: B07CSGFB43.
14. Mueller, J. (2018). “Beginning Programming with Python for Dummies”. Editorial: For
Dummies series. 408 pág. ISBN: 978-1118891452.
15. Nunez-Iglesias, J., Van Der Walt, S. W., & Dashnow, H. (2017). “Elegant Scipy: The Art of
Scientific Python”. Editorial: O'Reilly Media. 282 pág. ASIN: B074RB2FT2.
16. Pérez, A. (2016). “Python fácil”. Editorial: Alfaomega. 284 pág. ISBN: 978-6076226612
17. Rossum (2017). “El tutorial de Python”. Descargado el 13 de septiembre del sitio de Internet:
http://www.pyrhon.org.ar
18. Scikit-learn.org (2019). “Arboles de decisión (sklearn.tree)”. Descargado el 20 de
septiembre de 2019, de la página:
https://scikit-
learn.org/stable/modules/generated/sklearn.tree.DecisionTreeClassifier.html
19. Scikit-learn.org (2019). “Bosques Aleatorios
(sklearn.ensemble.RandomForestClassifier)”. Descargado el 20 de septiembre de
2019, de la página:
https://scikit-
learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html
20. Scikit-learn.org (2019). “K-nn Vecinos más cercanos”. Descargado el 20 de
septiembre de 2019, de la página:
https://scikit-
learn.org/stable/modules/generated/sklearn.neighbors.KNeighborsClassifier.html