1.2. Manual - Machine - Learning - Python
1.2. Manual - Machine - Learning - Python
1.2. Manual - Machine - Learning - Python
Parte 2
Índice de contenidos
Librería de Python para Machine learning .................................................................................................................. 3
Introducción .............................................................................................................................................................................. 3
Uso de librerías de Phyton para el Machine learning ............................................................................................................... 4
Machine Learning. Introducción................................................................................................................................ 46
Conclusiones ............................................................................................................................................................. 65
Página 2 de 65
Librería de Python para Machine learning
Introducción
Existen una gran cantidad de librerías o packages de código abierto disponibles para facilitar el Machine Learning. Estos se
conocen principalmente como bibliotecas científicas de Python y generalmente se utilizan cuando se realizan tareas
elementales de aprendizaje automático.
Podemos dividir estas bibliotecas en análisis de datos y bibliotecas de aprendizaje automático central en función de su uso o
propósito.
Hay cuatro paquetes clave que se utilizan más ampliamente para el análisis de datos tenemos:
1
Númericos
2
SciPy
3
Matplotlib
4
Pandas
Nota: Para ser concisos, solo cubriremos los conceptos clave dentro de cada uno de las librerías con una breve introducción e
implementación del código. Siempre podemos consultar el documentos de usuario oficiales para estos paquetes que han sido
bien diseñados por el desarrollador comunidad para cubrir mucho más en profundidad.
Para agregar una librería, simplemente debemos importarla. Para ello utilizamos el comando import junto al nombre de la
librería dentro del programa dentro del del IDLE. Por ejemplo:
Página 3 de 65
Import numpy
Arrays en NumPy
Es una colección de valores de tipos de datos similares y está indexada por una tupla de números no negativos. El rango de la
matriz es el número de dimensiones, y la forma de una matriz es una tupla de números que dan el tamaño de la matriz a lo
largo de cada dimensión. Podemos inicializar matrices NumPy a partir de listas de Python anidadas y acceder a los elementos
mediante corchetes.
A continuación se muestra como crear una matriz de un rango, la dimensión y carga de un elemento del array:
Ejemplo 1:
import numpy as np
# Creando un rango 1 array
a = np.array([0, 1, 2])
print (type(a))
# Aqui imprime la dimension del array
print (a.shape)
print (a[0])
print (a[1])
print (a[2])
# Carga un elemento del array
a[0] = 5
print (a)
• Resultado:
Página 4 de 65
Ejemplo 2:
Otro ejemplo para crear una matriz de dos rangos:
import numpy as np
# Creando un rango de 2 arrays
b = np.array([[0,1,2],[3,4,5]])
print (b.shape)
print (b)
print (b[0, 0], b[0, 1], b[1, 0])
• Resultado:
Página 5 de 65
Creación de matrices con NumPy
NumPy también proporciona muchas funciones integradas para crear matrices. La mejor manera de aprender esto, es a través
de los siguientes ejemplos:
Ejemplo 1:
Para crear una matriz de 3x3 con ceros:
import numpy as np
# Creando un array de 3x3 con ceros
a = np.zeros((3,3))
print (a)
• Resultado:
Resultado
Ejemplo 2:
Para convertir una lista en un array.
import numpy as np
# Convertir una lista en un array:
f = np.array([2, 3, 1, 0])
print (f)
Página 6 de 65
• Resultado:
Una matriz es una colección de elementos del mismo tipo de datos y NumPy admite y proporciona funciones integradas para
construir matrices con argumentos opcionales para especificar explícitamente los tipos de datos requeridos.
Ejemplo:
import numpy as np
x = np.array([0, 1])
y = np.array([2.0, 3.0])
z = np.array([5, 6], dtype=np.int64)
print (x.dtype, y.dtype, z.dtype)
Resultado:
NumPy también ofrece varias formas de indexar en matrices. La sintaxis estándar de Python x[obj] se puede usar para indexar
la matriz NumPy, donde x es la matriz y obj es la selección. Hay tres tipos de indexación disponibles:
Acceso al campo
Indexación avanzada
• Acceso al campo
Página 7 de 65
Si el objeto nd array es una matriz estructurada, se puede acceder a los campos de la matriz indexando la matriz con cadenas,
como un diccionario.
La indexación de x['field-name'] devuelve una nueva vista del arreglo, que tiene la misma forma que x, excepto cuando el campo
es un subarreglo, pero del tipo de datos x.dtype['field-name'] y contiene sólo la parte de los datos en el especificado campo.
Ejemplo:
import numpy as np
x = np.zeros((3,3), dtype=[('a', np.int32), ('b', np.float64, (3,3))])
print ("x['a'].shape: ",x['a'].shape)
print ("x['a'].dtype: ", x['a'].dtype)
print ("x['b'].shape: ", x['b'].shape)
print ("x['b'].dtype: ", x['b'].dtype)
Resultado:
Las matrices NumPy se pueden dividir, de forma similar a las listas. Se debe especificar un sector para cada dimensión de la
matriz ya que las matrices pueden ser multidimensionales. La sintaxis de división básica es i: j: k, donde i es el índice inicial, j es
el índice final, k es el paso y k no es igual a 0.
Esto selecciona los m elementos en la dimensión correspondiente, con valores de índice i, i + k, …,i + (m - 1) k donde m = q + (r
distinto de 0) y q y r son el cociente y el resto se obtiene dividiendo j - i por k: j - i = q k + r, de modo que i + (m - 1) k < j.
Ejemplo 1:
import numpy as np
x = np.array([5, 6, 7, 8, 9])
print (x[1:7:2])
• Resultado:
Ejemplo 2:
Página 8 de 65
import numpy as np
x = np.array([5, 6, 7, 8, 9])
print (x[-2:5])
print (x[-1:1:-1])
• Resultado:
Si n es el número de elementos en la dimensión que se está cortando. Entonces, si no se proporciona i, el valor predeterminado
es 0 para k > 0 y n - 1 para k < 0. Si no se proporciona j, el valor predeterminado es n para k > 0 y -1 para k < 0. Si no se
proporciona k, el valor predeterminado es 1. Tenemos que tener en cuenta que “::” es lo mismo que “:” y significa seleccionar
todos los índices a lo largo de este eje.
Ejemplo 1:
import numpy as np
x = np.array([5, 6, 7, 8, 9])
print(x[4:])
• Resultado:
Página 9 de 65
Ejemplo 2:
Si el número de objetos en la tupla de selección es menor que N, entonces se asume “:” para cualquier dimensión subsiguiente.
import numpy as np
y = np.array([[[1],[2],[3]], [[4],[5],[6]]])
print ("Shape de y: ", y.shape)
print (y[1:3])
• Resultado:
Ejemplo 3:
Si utilizamos puntos suspensivos, estos se expanden al número de objetos necesarios para hacer una tupla de selección de la
misma longitud que x.ndim. Solo puede haber una sola elipsis presente.
import numpy as np
y = np.array([[[1],[2],[3]], [[4],[5],[6]], [[7],[8]]])
print (y[...,0])
Resultado:
Ejemplo 1:
Página 10 de 65
import numpy as np
a = np.array([[5,6,7,8], [1,2,3,4], [9,10,11,12]])
print ("Array a:", a)
• Resultado:
Ejemplo 2:
Uso sel slicing para extraer el subarreglo que consta de las primeras 2 filas # y columnas 1 y 2; b sucede a.”
import numpy as np
a = np.array([[5,6,7,8], [1,2,3,4], [9,10,11,12]])
print ("Array a:", a)
# Use slicing to pull out the subarray consisting of the first 2 rows
# and columns 1 and 2; b is the following array of shape (2, 2):
# [[2 3]
# [6 7]]
b = a[:2, 1:3]
print ("Array b:", b)
• Resultado:
Ejemplo 3:
Una slice de una matriz es una vista de los mismos datos, por lo que modificarla modificará la matriz original.
Página 11 de 65
import numpy as np
a = np.array([[5,6,7,8], [1,2,3,4], [9,10,11,12]])
print ("Array a:", a)
# Use slicing to pull out the subarray consisting of the first 2 rows
# and columns 1 and 2; b is the following array of shape (2, 2):
# [[2 3]
# [6 7]]
b = a[:2, 1:3]
print ("Array b:", b)
• Resultado:
1. Las rebanadas junto con la indexación de enteros darán como resultado una serie de menor rango.
2. El uso de solo cortes dará como resultado la misma matriz de clasificación.
Ejemplo 1:
import numpy as np
a = np.array([[5,6,7,8], [1,2,3,4], [9,10,11,12]]) row_r1
= a[1,:]# Rank 1 view of the second row of a row_r2 =
a[1:2,:]# Rank 2 view of the second row of a print
(row_r1, row_r1.shape) # Prints "[5 6 7 8] (4,)" print
(row_r2, row_r2.shape) # Prints "[[5 6 7 8]] (1, 4)
• Resultado:
Página 12 de 65
Ejemplo 2:
También podemos hacer la misma distinción al acceder a las columnas de una matriz.
import numpy as np
a = np.array([[5,6,7,8], [1,2,3,4], [9,10,11,12]])
col_r1 = a[:, 1]# Rank 1 view of the second row of a
col_r2 = a[:, 1:2]# Rank 2 view of the second row of a
print (col_r1, col_r1.shape) # Prints "[ 2 6 10] (3,)"
print (col_r2, col_r2.shape) # Prints "[[5 6 7 8]] (1, 4)
• Resultado:
• Indexación avanzada
La indexación de matrices enteras nos permite construir matrices aleatorias y otras matrices. En donde, la matriz devuelta
tendrá forma (2,) e imprimirá un [[0, 1], [0, 1]].
El ejemplo anterior de indexación de matriz enteros es equivalente a: print np.array ([a [0, 0], a [1, 1]])
Ejemplo 1:
import numpy as np
a = np.array([[1,2], [3, 4]])
print (a[[0, 1], [0, 1]])
print (np.array([a[0, 0], a[0, 0]]))
Página 13 de 65
Resultado:
Al usar la indexación de matriz de enteros, se puede reutilizar el mismo elemento de la matriz de origen:
Print ([[0, 0], [1, 1]])
Ejemplo:
import numpy as np
a = np.array([[1,2], [3, 4]])
print (a[[0, 0], [1, 1]])
print (np.array([a[0, 1], a[0, 1]]))
Resultado:
Página 14 de 65
La Indexación de la matriz booleana
Es útil para elegir un elemento aleatorio de una matriz, que a menudo se usa para filtrar elementos que satisfacen una condición
dada.
Ejemplo:
import numpy as np
a=np.array([[1,2], [3, 4], [5, 6]])
print ((a > 2))
print (a[a > 2])
Resultado:
Página 15 de 65
Matrices matemáticas
Las funciones matemáticas básicas están disponibles como operadores y también como funciones en NumPy. Opera por
elementos en una matriz.
Suma
En el caso de una sumatoria tenemos:
import numpy as np
x=np.array([[1,2],[3,4],[5,6]])
y=np.array([[7,8],[9,10],[11,12]])
# Elementwise sum; both produce the array
print (x+y)
print (np.add(x, y))
• Resultado:
Página 16 de 65
Resta
En el caso de una resta:
import numpy as np
x=np.array([[1,2],[3,4],[5,6]])
y=np.array([[7,8],[9,10],[11,12]])
# Elementwise sum; both produce the array
print(x-y)
Página 17 de 65
• Resultado:
Multiplicación
En el caso de una multiplicación:
import numpy as np
x=np.array([[1,2],[3,4],[5,6]])
y=np.array([[7,8],[9,10],[11,12]])
# Elementwise sum; both produce the array
print(x*y)
print (np.multiply(x, y))
Página 18 de 65
• Resultado:
División
En el caso de una división:
import numpy as np
x=np.array([[1,2],[3,4],[5,6]])
y=np.array([[7,8],[9,10],[11,12]])
# Elementwise sum; both produce the array
print(x/y)
print (np.divide(x, y))
Página 19 de 65
• Resultado:
Raíz cuadrada
En el caso de una raíz cuadrada:
import numpy as np
x=np.array([[1,2],[3,4],[5,6]])
y=np.array([[7,8],[9,10],[11,12]])
# Elementwise sum; both produce the array
print(x/y)
print (np.divide(x, y))
• Resultado:
Además, podemos utilizar la función "dot" para calcular productos internos de vectores o para multiplicar matrices o multiplicar
un vector por una matriz.
Ejemplo 1:
Para un producto interno de vectores; ambos darán como producto: 219
import numpy as np
x=np.array([[1,2],[3,4]])
y=np.array([[5,6],[7,8]])
a=np.array([9,10])
b=np.array([11, 12])
# Inner product of vectors; both produce 219
print(a.dot(b))
print(np.dot(a,b))
Resultado:
Página 20 de 65
Ejemplo 2:
En el caso de una matriz de producto vectorial, ambas producirán la matriz de rango: 1 [29 67]
import numpy as np
x=np.array([[1,2],[3,4]])
y=np.array([[5,6],[7,8]])
a=np.array([9,10])
b=np.array([11, 12])
print(x.dot(a))
print(np.dot(x,a))
Resultado:
Página 21 de 65
Ejemplo 3:
En el caso de una matriz de producto matriz, ambas producen la matriz de rango 2.
import numpy as np
x=np.array([[1,2],[3,4]])
y=np.array([[5,6],[7,8]])
a=np.array([9,10])
b=np.array([11, 12])
print (x.dot(y))
print(np.dot(x, y))
Resultado:
Página 22 de 65
NumPy también proporciona muchas funciones útiles para realizar cálculos en matrices. Uno de los más útiles es sum.
Ejemplo 1:
import numpy as np
x=np.array([[1,2],[3,4]])
print (np.sum(x))
print (np.sum(x, axis=0))
print (np.sum(x, axis=1))
Resultado:
Página 23 de 65
También podemos utilizar la transposición. Esta es una de las operaciones comunes a menudo realizadas en matrices, que se
puede lograr utilizando el atributo “T” de un objeto de matriz.
Ejemplo 1:
import numpy as np
x=np.array([[1,2],[3,4]])
x=np.array([[1,2], [3,4]])
print (x)
print(x.T)
• Resultado:
Página 24 de 65
Ejemplo 2:
NOTA: debemos tener en cuenta que tomar la transposición de una matriz de rango 1 no hará nada.
import numpy as np
v=np.array([1,2,3])
print(v)
print (v.T)
Resultado:
Página 25 de 65
Broadcasting (transmisión)
Dos matrices deben tener la misma forma en la operación matemática del array. Pero NumPy introduce el concepto de
broadcasting para rellenar automáticamente el array si es posible cuando dos arrays no tienen la misma forma.
Aquí, 1 se añade a todos los elementos del arrayA, o en otras palabras, 1 se transmite desde la forma (1,1) a la misma forma del
arrayA - (3, 3) para hacer posible la operación de adición del array.
Ejemplo 1:
import numpy as np
arrayA = np.array([[1, 2, 3],[4, 5, 6],[7, 8, 9]])
print(arrayA + 1)
• Resultado:
Página 26 de 65
Ejemplo 2:
El Broadcasting también permite realizar operaciones aritméticas entre diferentes matrices. Veamos un ejemplo simple de
agregar un vector constante a cada fila de una matriz.
import numpy as np
a = np.array([[1,2,3], [4,5,6], [7,8,9]])
# create a vector
v = np.array([1, 0, 1])
b = np.empty_like(a)
for i in range(3):
b[i, :] = a[i, :] + v
print (b)
• Resultado:
Ejemplo 3:
Si tuviéramos que realizar la operación anterior en una matriz más grande, el bucle a través de Python podría ser lento. Veamos
un enfoque más alternativo: Con una pila de 3 copias de V encima de la otra.
import numpy as np
a = np.array([[1,2,3], [4,5,6], [7,8,9]])
# create a vector
v = np.array([1, 0, 1])
b = np.empty_like(a)
vv = np.tile(v, (3, 1))
print (vv)
• Resultado:
Página 27 de 65
Ejemplo 4:
Para agregar un elemento A y VV
import numpy as np
a = np.array([[1,2,3], [4,5,6], [7,8,9]])
# creando un vector
v = np.array([1, 0, 1])
b = np.empty_like(a)
vv = np.tile(v, (3, 1))
b = a + vv
print (b)
• Resultado:
Ejemplo 5:
Página 28 de 65
Ahora se expone cómo se puede lograr lo anterior de forma más sencilla.
import numpy as np
a = np.array([[1,2,3], [4,5,6], [7,8,9]])
v = np.array([1, 0, 1])
# Agregando V a cada fila de A usando broadcasting
b = a + v
print (b)
• Resultado:
Ejemplo 1:
Para calcular el producto exterior de los vectores.
import numpy as np # w tiene forma (3,) v = np.array([1,2,3]) # w tiene forma(2,)
w = np.array([4,5]) # Para calcular un producto exterior, primero damos forma V
para ser una columna.
# vector de forma (3, 1); Luego podemos transmitirlo contra W para ceder.
# Una salida de forma (3, 2), que es el producto exterior de V y W.
print (np.reshape(v, (3, 1)) * w)
• Resultado:
Página 29 de 65
Ejemplo 2:
Para agregar un vector a cada fila de una matriz.
import numpy as np
v = np.array([1,2,3])
x = np.array([[1,2,3],[4,5,6]])
print(x + v)
• Resultado:
Ejemplo 3:
Para agregar un vector a cada columna de una matriz.
Página 30 de 65
import numpy as np
w = np.array([4,5])
x = np.array([[1,2,3],[4,5,6]])
print((x.T + w).T)
• Resultado:
Ejemplo 4:
Otra solución es remodelar W para que sea un vector de fila de forma (2, 1);
import numpy as np
w = np.array([4,5])
x = np.array([[1,2,3],[4,5,6]])
print (x + np.reshape(w,(2,1)))
• Resultado:
Ejemplo 5:
Por último, podemos multiplicar una matriz por una constante.
import numpy as np
w = np.array([4,5])
x = np.array([[1,2,3],[4,5,6]])
print (x * 2)
• Resultado:
Página 31 de 65
La librería – Pandas
Pandas siempre ha sido excelente para la manipulación de datos; sin embargo, no fue excelente para el análisis en comparación
con las bases de datos que utilizan marcos de datos SQL, Excel o R. Pandas es un paquete de Python de codigo abierto, que
proporciona estructuras de datos rápidos, flexibles y expresivos. En donde trabajar con datos "relacionales" o "etiquetados"
sea mucho más fácil e intuitivo. Pandas fue desarrollado por Wes McKinney en 2008. En la empresa AQR Capital Management.
Cuyo fin era elaborar una herramienta flexible y de alto rendimiento para realizar análisis cuantitativos en datos financieros.
Pudiendo convencer a la gerencia para que le permitiera abrir la biblioteca. Pandas es adecuado para datos tabulares con
columnas de tipos heterogéneos, como en un Tabla SQL, hoja de cálculo de Excel y archivos CSV.
Pandas presenta dos nuevas estructuras de datos en Python: Series y DataFrame, estas están construidas sobre NumPy (esto
significa que es rápido). ¡Sigue leyendo para ver en qué consisten cada una!
• Las Series
Las series son un objeto unidimensional similar a la columna en una hoja de cálculo o tabla SQL de forma predeterminada. En
donde a cada elemento se le asignará una etiqueta de índice de 0 a N. Nota: si queremos crear una serie en pandas, pasando
una lista de valores y una etiqueta de índice personalizada. Debemos tener en cuenta que la referencia del índice etiquetado
para cada fila puede tener valores duplicados. Para crear una serie pasando una lista de valores y una etiqueta de índice
personalizada tenemos el siguiente ejemplo:
Ejemplo:
# creating a series by passing a list of values, and a custom index label.
import pandas as pd import numpy as np
s = pd.Series([1,2,3,np.nan,5,6], index=['A','B','C','D','E','F'])
print (s)
Resultado:
Página 32 de 65
• El DataFrame
Es un objeto bidimensional similar a una hoja de cálculo o una tabla SQL. Este es el objeto pandas más utilizado. Veamos como
crear un Dataframe:
Ejemplo:
import pandas as pd
data = {'Genero': ['M', 'H', 'H'],'Empleado_ID': ['E01', 'E02',
'E03'], 'Edad': [25, 27, 25]}
# We want the order the columns, so lets specify in columns parameter
df = pd.DataFrame(data, columns=['Empleado_ID','Genero', 'Edad'])
print(df)
Resultado:
Página 33 de 65
Lectura y escritura de datos
Veremos tres formatos de archivo de uso común: csv, archivo de texto y Excel en el siguiente Listado. Para la lectura:
Otras extenciones:
df=pd.read_csv(“C:/Data/mtcars.data”)
Para ver su funcionamiento podemos utilizar ejemplo del capítulo anterior “Leer archivos en python”. En donde vamos a leer
el archivo CSV en un DataFrame de pandas:
Ejemplo:
#import necessary modules
import pandas
result = pandas.read_csv('Datos_01.csv')
print(result)
Resultado:
En solo tres líneas de código se obtiene resultado. Panda sabe que la primera línea del CSV contenía nombres de columna y los
usará automáticamente.
Página 34 de 65
Leer un archivo desde un repositorio de internet
Podemos leer un archivo CSV desde internet y a su vez asígnale nombres de columna personalizados al marco de datos usando
la función read_csv().
Ejemplo 1:
import pandas as pd
df = pd.read_csv("http://archive.ics.uci.edu/ml/machine-learning-databases/iris/
iris.data",
names = ['SepalLengthCm', 'SepalWidthCm', 'PetalLengthCm', 'PetalWidthCm',
'Species'])
print(df.head())
• Resultado:
En solo tres líneas de código se obtiene resultado. Panda sabe que la primera línea del CSV contenía nombres de columna y
los usará automáticamente.
Ejemplo 2:
Leer un archivo desde un repositorio de internet.
Podemos leer un archivo CSV desde internet y a su vez asígnale nombres de columna personalizados al marco de datos usando
la función read_csv().
import pandas as pd
df = pd.read_csv("http://archive.ics.uci.edu/ml/machine-learning-databases/iris/
iris.data",
names = ['SepalLengthCm', 'SepalWidthCm', 'PetalLengthCm', 'PetalWidthCm',
'Species'])
print(df.head())
• Resultado:
Ejemplo 3:
Leer un archivo CSV y que nos muestre solo las tres primeras filas: Además podemos especificar el número de filas de un archivo
para leer utilizando el parámetro nrows de la función read_csv(). Particularmente útil cuando se desea leer un pequeño
segmento de un archivo grande.
Página 35 de 65
import pandas as pd
df = pd.read_csv("http://archive.ics.uci.edu/ml/machine-learning-databases/iris/
iris.data ", nrows=3)
print(df.head())
• Resultado:
Para la escritura:
Escribir en un archivo CSV con Pandas es tan fácil como leer. Primero debemos crear el DataFrame basado en la siguiente
escritura de Python en el código CSV. Cuyo nombre para el nuevo archivo será: pandaresult.csv.
Este, deberá estará dentro de la misma carpeta en donde se ejecuta el programa con extensión py.
Ejemplo:
from pandas import DataFrame
C = {'Programming language': ['Python','Java', 'C++'],
'Designed by': ['Guido van Rossum', 'James Gosling', 'Bjarne Stroustrup'],
'Appeared': ['1991', '1995', '1985'],
'Extension': ['.py', '.java', '.cpp'],
} df = DataFrame(C, columns= ['Programming language', 'Designed by',
'Appeared',
'Extension'])
export_csv = df.to_csv (r'pandaresult.csv', index = None, header=True) # here you
have to write path, where result file will be stored
print (df)
Resultado:
Página 36 de 65
Como vemos, Pandas es una de las mejores alternativas para leer y escribir archivos CSV. Además, hay otras formas de analizar
archivos de texto con bibliotecas como ANTLR, PLY y PlyPlus. En donde, todos éstos pueden ayudarnos para manejar un análisis
pesado.
Pandas tiene algunas funciones integradas para ayudarnos a comprender mejor los datos utilizando métodos básicos de
resumen estadístico. Como por ejemplo la función describe (). Este nos devolverá las estadísticas rápidas como recuento, media,
estándar (desviación estándar), mínimo, primer cuartil, mediana, tercer cuartil, máximo en cada columna del marco de datos Al
utilizar la función describe() nos devolverá las estadísticas rápidas como recuento, en cada columna del marco de datos.
Ejemplo:
import pandas as pd
df = pd.read_csv("http://archive.ics.uci.edu/ml/machine-learning-databases/iris/
iris.data ")
print(df.describe())
Resultado:
La correlación
La correlación es otra forma de determinar cómo se relacionan dos variables. Además de decirle si las variables están
relacionadas positiva o inversamente, la correlación también nos dice el grado en que las variables tienden a moverse juntas.
Para ello utilizamos la función corr(). Cuando se dice que dos elementos se correlacionan, se está diciendo que el cambio en
un elemento afecta un cambio en otro elemento. Siempre hablará sobre la correlación como un rango entre -1 y 1.
En el código de ejemplo a continuación, la longitud del pétalo está relacionada positivamente en un 87 % con la longitud del
sépalo, lo que significa que un cambio en la longitud del pétalo resulta en un cambio positivo del 87 % en la longitud del sépalo
y viceversa.
Ejemplo:
# read csv with a column as index
import pandas as pd
df = pd.read_csv("http://archive.ics.uci.edu/ml/machine-learning-databases/iris/
iris.data ")
print (df.corr())
Página 37 de 65
Resultado:
La covarianza
Con la función Cov(), podemos mostrar un listado de covarianza. Esta nos puede indicar cómo se relacionan dos variables. En
donde una covarianza positiva significa que las variables están relacionadas positivamente, mientras que una negativa significa
que las variables están inversamente relacionadas. El Inconveniente de la covarianza es que no nos muestra el grado de relación
positiva o negativa.
Ejemplo:
import pandas as pd
df = pd.read_csv("http://archive.ics.uci.edu/ml/machine-learning-databases/iris/
iris.data ")
print(df.cov())
Resultado:
Pandas proporciona varias facilidades para combinar fácilmente Series, DataFrame y Panel con varios tipos de lógica de
conjuntos para los índices y la funcionalidad de álgebra relacional en el caso de operaciones de unión de tipo fusión.
Ejemplo:
import pandas as pd
# Datos
data = {'emp_id': ['1', '2', '3', '4', '5'],
'first_name': ['Jason', 'Andy', 'Allen', 'Alice', 'Amy'],
'last_name': ['Larkin', 'Jacob', 'A', 'AA', 'Jackson']}
df_1 = pd.DataFrame(data, columns = ['emp_id', 'first_name', 'last_name'])
data = {'emp_id': ['4', '5', '6', '7'],
'first_name': ['Brian', 'Shize', 'Kim', 'Jose'],
'last_name': ['Alexander', 'Suma', 'Mike', 'G']}
df_2 = pd.DataFrame(data, columns = ['emp_id', 'first_name', 'last_name'])
# Usingconcat
df = pd.concat([df_1, df_2])
print(df)
# or
# Using append
print (df_1.append(df_2))
# Join the two dataframes along columns
pd.concat([df_1, df_2], axis=1)
Página 38 de 65
Resultado:
La librería - Matplotlib
Matplotlib es una extensión numérica de Matemáticas Numpy y un gran paquete para ver o presentar datos en un formato
gráfico. Permite a los analistas y tomadores de decisiones ver los análisis presentados visualmente, para que puedan
comprender conceptos difíciles o identificar nuevos patrones. El enfoque más común y fácil es mediante el uso de funciones
globales para construir y mostrar los datos. Veamos algunos de los gráficos de uso común. plt.Bar
plt.hist
Hace un histograma.
plt.plot
Crea una trama de línea.
Página 39 de 65
• Gráfico de Barras y trama de dispersión:
Eejemplo 1:
import numpy as np
from matplotlib import pyplot as plt # barra
simple y grafico de dispersión x = np.arange(5)
# Se asumeque hay 5 estudiantes
y = (5, 7, 10, 8, 10) # sus notas plt.bar(x,y) # Bar plot # need to close the
figure using show() or close(), if not closed any follow up plot commands will
use same figure. plt.show() # Try commenting this an run plt.scatter(x,y) #
scatter plot plt.show()
Resultado:
Ejemplo 2:
Otro ejemplo de gráfico de trama de dispersión es el siguiente:
import numpy as np
import matplotlib.pyplot as plt
N = 50
x = np.random.rand(N)
y = np.random.rand(N)
colors = np.random.rand(N)
area = (30 * np.random.rand(N))**2 # 0 to 15 point radii
Resultado:
Página 40 de 65
• Gráfico de caja
Ejemplo:
import numpy as np
import matplotlib.pyplot as plt
# Fixing random state for reproducibility
np.random.seed(19680801)
# fake up some data
spread = np.random.rand(50) * 100
center = np.ones(25) * 50
flier_high = np.random.rand(10) * 100 + 100
flier_low = np.random.rand(10) * -100
data = np.concatenate((spread, center, flier_high, flier_low))
fig1, ax1 = plt.subplots()
ax1.set_title('Basic Plot')
ax1.boxplot(data)
plt.show()
Resultado:
Página 41 de 65
• Historigrama
Ejemplo:
import numpy as np
import matplotlib.pyplot as plt
plt.xlabel('Smarts')
plt.ylabel('Probability')
plt.title('Histogram of IQ')
plt.text(60, .025, r'$\mu=100,\ \sigma=15$')
plt.xlim(40, 160)
plt.ylim(0, 0.03)
plt.grid(True)
plt.show()
Resultado:
Página 42 de 65
• Gráfico de trama de
línea
Ejemplo:
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(14)
y = np.sin(x / 2)
plt.grid(axis='x', color='0.95')
plt.legend(title='Parameter where:')
plt.title('plt.step(where=...)')
plt.show()
Resultado:
Página 43 de 65
A continuación se muestra otro ejemplo grafico con los datos de una estación meteorológica a partir de un archivo CSV:
Ejemplo:
# lecturas archivo.csv de estación meteorológica
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.dates import DateFormatter, DayLocator
# INGRESO
narchivo = "C:/python/2021_10_EstMeteorologica.csv"
# PROCEDIMIENTO
tabla = pd.read_csv(narchivo, sep=';',decimal=',')
n = len(tabla)
# convierte a datetime
fechaformato = "%d/%m/%Y %H:%M:%S"
tabla['fecha'] = pd.to_datetime(tabla['fecha'],
format=fechaformato)
Página 44 de 65
# SALIDA
print('columnas: ', list(tabla.keys()))
print('SerieDia: ',diaIndice)
print('días en serie: ', len(diaIndice))
# grafica
figura, grafica = plt.subplots()
marcador = ['.','o','v','^','<','>','1']
for j in range(0,7,1):
i0 = diaIndice[j]
i1 = diaIndice[j+1]
x_horas = tabla['fecha'][i0:i1]-pd.Timedelta(days=j)
y_temp = tabla['TEMP'][i0:i1]
etiqueta = str(tabla['fecha'][i0].month)+'-'
etiqueta = etiqueta + str(tabla['fecha'][i0].day)
grafica.scatter(x_horas,y_temp,
marker = marcador[j%7],
label=etiqueta)
# formato de eje
grafica.xaxis.set_major_formatter(DateFormatter('%H:%M'))
plt.legend()
plt.title('Temperatura')
plt.grid()
plt.show()
Resultado:
Gráfico
Para adquirí otras formas de implementar gráficos podemos dirigirnos a página oficial de Matplotlib y ver otros ejemplos
pulsando aquí.
Página 45 de 65
Machine Learning. Introducción.
El Machine learning o aprendizaje automático es un sub-campo de las ciencias de la computación que evolucionó a partir del
estudio del reconocimiento de patrones y la teoría del aprendizaje computacional en
Inteligencia Artificial (IA).
Es un campo de la informática que implica el uso de métodos estadísticos para crear programas que mejoran el rendimiento
con el tiempo o detectan patrones en cantidades masivas de datos que es poco probable que los humanos encuentren.
Explora el estudio y la construcción de algoritmos que pueden aprender de los datos y hacer predicciones sobre ellos. Dichos
algoritmos operan un modelo a partir de entradas de ejemplo para hacer predicciones o decisiones basadas en datos, en lugar
de seguir instrucciones de programa estrictamente estáticas.
Si le otorgamos un valor de verdadero a los conceptos anteriores. Podemos resumir que el "Machine Learning: es una colección
de algoritmos y técnicas utilizadas para crear sistemas computacionales que aprenden de los datos para hacer predicciones e
inferencias".
El área de aplicación de Machine Learning es extenso. A continuación exponemos algunas de las aplicaciones diarias que
ocurren en nuestro alrededor:
Sistema de recomendación
YouTube trae videos para cada uno de sus usuarios basado en un sistema de recomendación que cree que el usuario individual
estará interesado. De manera similar Amazon y otros minoristas electrónicos sugieren productos similares en los que el cliente
estará interesado y probablemente comprará al observar el historial de compras de un cliente y un gran inventario de productos.
Detección de correo no deseado
Los proveedores de servicios de correo electrónico utilizan un modelo de aprendizaje automático que puede detectar
automáticamente y mover los mensajes no solicitados a la carpeta de spam.
El Machine learning es un subconjunto de la Inteligencia Artificial (IA), así que primero entendamos qué es la IA y dónde encaja
el Machine learning dentro de su concepto más amplio. EL AI o inteligencia Artificial es un término amplio que tiene como
objetivo el uso de datos para ofrecer soluciones a problemas existentes. A su vez posee la habilidad de presentar las mismas
capacidades que los seres humanos. Es decir, la ciencia y la ingeniería de replicar, incluso superando el nivel de inteligencia
humana. Eso significa observar, leer, aprender, adaptar, planificar y experimentar.
Página 46 de 65
En donde:
Observar
Se refiere a identificar patrones usando los datos.
Planificar
Se refiere a encontrar todas las soluciones posibles.
Optimizar
Se refiere a encontrar la solución óptima de la lista de posibles soluciones.
Acción
Se refiere a ejecutar más soluciones y que deban ser óptimas.
Aprender y adaptar
Es el resultado que da el producto esperado, de lo contrario, se adapta
El ciclo de proceso de IA expuesto anteriormente se puede lograr utilizando agentes robóticos inteligentes. Estos se pueden
definir como un componente que puede percibir su entorno a través de diferentes tipos de sensores (cámara, infrarrojos, etc.),
y realizará acciones dentro del entorno a través de esfuerzos. A su vez, los agentes robóticos están diseñados para reflejar a los
humanos.
Página 47 de 65
Tenemos diferentes órganos sensoriales como ojos, oídos, nariz, lengua y piel para percibir nuestro entorno y órganos como
manos, piernas y boca que son los efectores que nos permiten actuar dentro de nuestro entorno en función de la percepción.
¿Es Machine Learning la única disciplina en donde se utilizan los datos para aprender y manipularlos para una predicción o
inferencia?
Para responder a las preguntas anteriores, echemos un vistazo a la definición (Wikipedia) de algunos otros términos clave:
Estadística
Es el estudio de la recolección, análisis, interpretación, presentación y organización de datos.
Minería de datos
Es un sub-campo interdisciplinario de la informática. Es el proceso computacional de descubrir patrones en grandes conjuntos
de datos (del almacén de datos) que involucra métodos en la intersección de la inteligencia artificial, el aprendizaje automático,
las estadísticas y los sistemas de bases de datos.
Data Analytics
Es un proceso de inspección, limpieza, transformación y modelado de datos con el objetivo de descubrir información útil, sugerir
conclusiones y apoyar la toma de decisiones. Esto también se conoce como Business Analytics y se usa ampliamente en muchas
industrias para permitir que las empresas u organizaciones utilicen la ciencia de examinar datos sin procesar con el fin de sacar
conclusiones sobre esa información y tomar mejores decisiones comerciales.
Ciencia de datos
La ciencia de datos es un campo interdisciplinario sobre procesos y sistemas para extraer información de conocimiento de varios
formularios de datos, ya sea estructurado o no estructurado. A su vez, es una continuación de algunos de los campos de análisis
de datos, como estadísticas, aprendizaje automático, minería de datos y minería de datos, y Análisis predictivo, similar al
descubrimiento de conocimiento en bases de datos (KDD).
A partir de las definiciones anteriores, es sorprendente claro descubrir que el aprendizaje automático no es el único tema en el
que usamos datos para aprender y a su vez la predicción/inferencia.
Página 48 de 65
Se hablan de temas, herramientas y técnicas casi idénticas en cada una de estas áreas. Esto plantea otra pregunta sobre ¿Por
qué hay tantos nombres diferentes con mucha superposición en torno a aprender de los datos? o ¿Cuál es la diferencia entre
estos?
La respuesta más simple, es que todos estos son prácticamente lo mismo. Sin embargo, existe una diferencia sutil en sus
significados, expresión entre cada uno de estos. Para entenderlo mejor, tendremos que volver a la historia de cada una de estas
áreas y examinar de cerca el origen, el área central de aplicación y la evolución de estos términos.
La estadística
El erudito alemán Gottfried Achenwall introdujo la palabra "estadística" a mediados del siglo XVIII. El uso de esta palabra
durante este período significaba que estaba relacionado con el funcionamiento administrativo de un estado, proporcionando
los números que reflejan la actualidad periódica con respecto a su área de administración. El origen de la palabra se remonta a
la palabra latina "estado" ("Consejo de Estado") o la palabra italiana "Statista" ("estadista" o "político"); Es decir, el significado
de estas palabras es "estado político" o un gobierno. En el pasado, las estadísticas fueron utilizadas por los gobernantes que
designaron el análisis de datos sobre el estado, lo que significa la "ciencia del estado".
A principios del siglo XIX, las estadísticas alcanzaron el significado de la recopilación y la clasificación de datos. El político
escocés, Sir John Sinclair, lo presentó a los ingleses en 1791 en su libro relato “La población del estado y/o localidades”.
Con el tiempo, la idea detrás de la palabra estadísticas ha sufrido una transformación extraordinaria. El carácter de datos o
información proporcionada se ha extendido a todas las esferas de la actividad humana.
Las personas y las organizaciones utilizan estadísticas para comprender los datos y tomar decisiones en todas las ciencias
naturales y sociales, la medicina, los negocios y otras áreas. Las estadísticas han servido como columna vertebral y han dado
lugar a muchas otras disciplinas.
Estadística frecuentista
John Graunt fue uno de los primeros demógrafos y es nuestro primer estadístico vital. Publicó su observación sobre los
proyectos de ley de mortalidad (en 1662), y este trabajo a menudo se cita como primera instancia de estadísticas descriptivas.
Presentó grandes cantidades de datos en unas pocas tablas que se pueden comprender fácilmente, y esta técnica ahora se
conoce ampliamente como estadísticas descriptivas. En éste observamos que las estadísticas semanales de mortalidad
aparecieron por primera vez en Inglaterra en 1603, y que en 1623, de unos 50,000 entierros en Londres, solo 28 murieron de la
peste.
Para 1632, esta enfermedad prácticamente había desaparecido por el momento, luego reaparece en 1636 y nuevamente en la
terrible epidemia de 1665. Esto ejemplifica que la naturaleza fundamental de las estadísticas descriptivas fue fundamental para
el realizar estos conteos. De todos los registros parroquiales, contó el número de personas que murieron y que murieron de la
peste. Los números contados de vez en cuando eran relativamente grandes para seguir, por lo que también los simplificó usando
proporción en lugar del número real.
Por ejemplo, el año 1625 tuvo 51,758 muertes y de las cuales 35,417 eran de la peste. Para simplificar esto, escribió:
"Encontramos la plaga para soportar el todo en proporción como 35 a 51. o 7 a 10". Con estos, está introduciendo el concepto
de que las proporciones relativas a menudo son de más interés que los números en bruto. Generalmente expresaríamos la
proporción anterior como 70%. Este tipo de conjetura que se basa en la proporción o frecuencia de proporción de datos de
muestra se conoce como "estadísticas frecuentista". Las pruebas de hipótesis estadística se basan en el marco de inferencia,
donde se supone que los fenómenos observados son causados por procesos desconocidos pero fijos.
El teorema de Bayes se establece matemáticamente con la siguiente ecuación:
Página 49 de 65
En donde:
• A y B son eventos de P (B) ≠ 0 P (a) y p (b) son las probabilidades de observar A y B sin considerados el uno al otro.
• P (A | B), una probabilidad condicional, es la probabilidad de observar Evento A dado que B es cierto.
Por ejemplo, un médico sabe que la falta de sueño causa migraña el 50% del tiempo. La probabilidad previa de que cualquier
paciente tenga falta de sueño es 10000/50000 y la probabilidad previa de que cualquier paciente tenga migraña es 300/1000.
Si un paciente tiene un trastorno del sueño, apliquemos este teorema para calcular la probabilidad de que él/ella esté teniendo
una migraña.
P (trastorno del sueño | migraña) = P (migraña | trastorno del sueño) * P (migraña) / P (trastorno del sueño) P (trastorno del
sueño | migraña) = .5 * 10000/50000/(300/1000) = 33% En el escenario anterior, hay un 33% de posibilidades de que un
paciente con un trastorno del sueño también tenga un problema de migraña.
Regresión
Otro hito importante para los estadísticos fue la regresión, que fue publicada por Legendre en 1805 y por Guass en 1809.
Legendre y Gauss aplicaron el método al problema de determinar, a partir de observaciones astronómicas, las órbitas de los
cuerpos sobre el sol, principalmente cometas, y los planetas recién descubiertos.
Gauss publicó un desarrollo adicional de la teoría de los mínimos cuadrados en 1821. El análisis de regresión es un proceso
estadístico esencial para estimar las relaciones entre los factores. Incluye muchas técnicas para analizar y modelar varios
factores, siendo el enfoque principal la relación entre un factor dependiente y uno o varios factores independientes también
llamados predictores o variables.
Tradicionalmente, los gerentes de negocios estaban tomando decisiones basadas en experiencias pasadas o reglas generales, o
había otros aspectos cualitativos para la toma de decisiones; Sin embargo, esto cambió con el desarrollo de almacenes de datos
y sistemas de planificación de recursos empresariales (ERP). Los gerentes y líderes de negocios consideraron datos y se basaron
en el análisis ad hoc para afirmar sus supuestos basados en la experiencia/conocimiento para las decisiones comerciales diarias
y críticas. Esto evolucionó como inteligencia empresarial impulsada por datos o análisis de negocios para el proceso de toma
de decisiones. En donde, fue adoptada rápidamente por organizaciones y empresas de todo el mundo. Hoy, las empresas de
todos los tamaños utilizan análisis de datos.
A menudo, la palabra "análisis de negocios" se usa indistintamente para "análisis de datos" en el mundo corporativo. Se utiliza
para que las empresas tengan una visión holística del mercado y cómo una empresa puede competir de manera eficiente dentro
de ese mercado; para aumentar su ROI (retorno de la inversión). Esto se puede clasificar ampliamente en cuatro tipos:
1
Análisis descriptivo
2
Análisis de diagnóstico
Página 50 de 65
3
Análisis predictivo
4
Análisis prescriptivo
En donde:
Las estadísticas como la operación aritmética del recuento, min, máximo, suma, promedio, porcentaje y porcentaje de cambio,
etc., entran en esta categoría. Ejemplos comunes de análisis descriptivos son los informes de inteligencia empresarial de una
empresa que cubren diferentes aspectos de la organización para proporcionar retrospectivas históricas con respecto a la
producción, operaciones, ventas, ingresos, finanzas, inventario, clientes y participación de mercado de la compañía.
Por ejemplo, supongamos que el rendimiento de ventas no está a la altura de ciertas tiendas y el gerente de la línea de productos
desea comprender la causa raíz. En este caso, el gerente de productos puede mirar hacia atrás para revisar las tendencias y
patrones pasados para las ventas de la línea de productos en diferentes tiendas en función de su ubicación (qué piso, esquina,
pasillo) dentro de la tienda. A su vez, se utiliza para comprender si hay alguna relación causal con otros productos que se
mantienen de cerca.
También influyen diferentes factores externos, como los factores demográficos, de temporada, macroeconómicos por
separado, así como en unísono para definir la clasificación relativa de variables relacionadas basadas en explicaciones
concluidas. Para lograr esto, no hay un conjunto claramente definido de pasos ordenados definidos, y depende del nivel de
experiencia y el estilo de pensamiento de la persona que realiza el análisis.
Existe una participación significativa del experto en la materia y los datos/información pueden necesitar presentarse
visualmente para una mejor comprensión. Hay una gran cantidad de herramientas: por ejemplo, Excel, Tableau, Qlikview,
Spotfire y D3, etc., son herramientas de compilación disponibles que permiten el análisis de diagnóstico.
Es importante recordar que la base del análisis predictivo se basa en probabilidades, y la calidad de la predicción por algoritmos
estadísticos depende mucho de la calidad de los datos de entrada. Por lo tanto, estos algoritmos no pueden predecir el futuro
con 100% de certeza. Sin embargo, las empresas pueden usar estas estadísticas para pronosticar la probabilidad de lo que podría
suceder en el futuro y considerar estos resultados junto con el conocimiento empresarial darían como resultado decisiones
rentables.
El Machine learning se centra en gran medida en el análisis predictivo, donde combinamos datos históricos de diferentes
fuentes, como ERP organizacional (planificación de recursos empresariales), CRM (gestión de relaciones con el cliente), PV
(punto de venta), datos de empleados, datos de investigación de mercado para identificar patrones y aplicar modelo/algoritmos
estadísticos para capturar la relación entre varios conjuntos de datos y predecir aún más la probabilidad de un evento.
Algunos ejemplos de análisis predictivos son el pronóstico del tiempo, la identificación de spam por correo electrónico, la
detección de fraude, la probabilidad de comprar un producto o renovación de la póliza de seguro, predecir las posibilidades de
una persona con una enfermedad conocida, etc.
Los sistemas analíticos prescriptivos son una combinación de reglas comerciales, algoritmos de Machine learning, herramientas
que se pueden aplicar contra la alimentación de datos históricos y en tiempo real. El objetivo clave aquí no es solo predecir lo
que sucederá, sino también por qué sucederá predecir múltiples futuros basados en diferentes escenarios para permitir a las
empresas evaluar posibles resultados en función de sus acciones.
Página 52 de 65
Algunos ejemplos de análisis prescriptivos son mediante la simulación en situaciones de diseño para ayudar a los usuarios a
identificar comportamientos del sistema en diferentes configuraciones, y asegurando que se cumplan todas las métricas clave
de rendimiento, como tiempos de espera, longitud de la cola, etc. Otro. El ejemplo es usar programación lineal o no lineal para
identificar el mejor resultado para un negocio, limitaciones dadas y la función objetivo.
En 1960, Peter Naur utilizó el término "ciencia de datos" en su publicación "Encuesta concisa de métodos informáticos", que
trata sobre métodos de procesamiento de datos contemporáneos en una amplia gama de aplicaciones. En 1991, el científico
informático Tim Berners-Lee anunció el nacimiento de lo que se convertiría en la red mundial tal como la conocemos hoy, en
una publicación en el "Grupo Usenet" donde estableció las especificaciones para una red de datos mundiales e interconectados,
accesibles para cualquier persona desde cualquier lugar.
Con el tiempo, la web/Internet ha estado creciendo 10 veces más cada año y se convirtió en una red de ordenadores global que
proporciona una variedad de instalaciones de información y comunicación, que consisten en redes interconectadas que utilizan
protocolos de comunicación estandarizados.
Página 53 de 65
Junto con los sistemas de almacenamiento se evolucionaron demasiado y el almacenamiento digital se volvió más rentable
que el papel. A partir de 2008, los servidores del mundo procesaron 9.57 zeta-bytes (9.57 billones de gigabytes) de información,
que es equivalente a 12 gigabytes de información por persona por día, según el informe “How Much Information? 2010 report
on Enterprise Server Information.”
En donde, se requieren herramientas y sistemas especiales para procesar altos volúmenes de datos, con una amplia variedad
(texto, número, audio, video, etc.) y generados a alta velocidad.
La revolución de Big Data influyó en el nacimiento del término "ciencia de datos". Aunque el término "ciencia de datos" surgió
a partir de 1960, se hizo popular y esto se le atribuye en 2008 a DJ Patil, de Facebook y LinkedIn. Quien lo eligió cuidadosamente,
con la explosión del fenómeno Big Data y el nacimiento de nuevas técnicas de análisis de la información. En adelante el término
pasó a formar parte del lenguaje común. Posteriormente en 2010 Drew Conway presento una imagen que expone de forma
concisa las habilidades esenciales pre-establecidas para la ciencia de datos.
Página 54 de 65
La ejecución de proyectos de ciencia de datos requiere tres habilidades clave:
1
Habilidades de programación o piratería,
2
Matemáticas y estadísticas,
3
Experiencia sustentable un área determinada de alcance.
Nota: Que el Machine learning se origina a partir de inteligencia artificial no quiere decir que es una rama de la ciencia de datos,
más bien se le considera una herramienta más, dentro de la inteligencia artificial.
Página 55 de 65
Fuente. Inteligencia artificial, un enfoque moderno - Stuart J. Russell and Peter Norvig in 2010.
Estadísticas vs. Minería de datos vs. Análisis de datos vs. Ciencia de los datos
Lo que podemos aprender de la historia y la evolución de los agentes implicados en torno al aprendizaje de 'Datos', es que,
aunque utilizan los mismos métodos, estos evolucionaron de forma diferente, es decir se diferencian por su historia,
nomenclatura, notación y perspectivas filosóficas. En donde, todos juntos forman el camino hacia la inteligencia artificial
definitiva.
Las tareas de Machine learning se pueden clasificar en tres grupos según el resultado deseado y el tipo de entrada necesaria
para producirlo.
El aprendizaje supervisado El aprendizaje supervisado es una rama de Machine Learning, un método de análisis de datos que
utiliza algoritmos que aprenden iterativamente de los datos para permitir que los ordenadores encuentren información
escondida sin tener que programar de manera explícita dónde buscar. El aprendizaje supervisado es uno de los tres métodos
de la forma en que las máquinas "aprenden.
El algoritmo se proporciona con un conjunto de datos de entrada de ejemplo lo suficientemente grande como salida respectiva
o evento/clase, generalmente preparado en consulta con el experto en la materia de un dominio respectivo. El objetivo del
algoritmo es aprender patrones en los datos y construir un conjunto general de reglas para mapear la entrada a la clase o
evento. En términos generales, existen dos tipos comúnmente utilizados como algoritmos de aprendizaje supervisado. Los
cuales son:
Regresión
La salida a predecir es un número continuo en relevancia con un conjunto de datos de entrada dado. Ejemplos de casos de uso
son las predicciones de ventas minoristas, la predicción de la cantidad de personal necesaria para cada turno, la cantidad de
espacios de estacionamiento necesarios para una tienda minorista, la calificación crediticia de un cliente, etc.
Clasificación
El resultado a predecir es el real o la probabilidad de un evento/clase y el número de clases a predecir puede ser dos o más. El
algoritmo debe aprender los patrones en la entrada relevante de cada clase a partir de datos históricos y ser capaz de predecir
la clase o evento no visto en el futuro considerando su entrada. Un caso de uso de ejemplo es el filtrado de correo electrónico
Página 56 de 65
no deseado, donde el resultado esperado es clasificar un correo electrónico como "correo no deseado" o "no correo no
deseado".
Entrenamiento
El algoritmo contará con datos históricos de entrada con la salida mapeada. El algoritmo aprenderá los patrones dentro de los
datos de entrada para cada salida y los representará como una ecuación estadística, que también se conoce comúnmente como
modelo.
Prueba o validación
En esta fase se evalúa el rendimiento del modelo entrenado, generalmente aplicándolo en un conjunto de datos (que no se usó
como parte del entrenamiento) para predecir la clase o el evento.
Predicción
Aquí aplicamos el modelo entrenado a un conjunto de datos que no fue parte del entrenamiento ni de la prueba. La predicción
se utilizará para impulsar las decisiones comerciales.
El aprendizaje no supervisado
Hay situaciones en las que se desconoce la clase/evento de salida deseado para los datos históricos. El objetivo en tales casos
sería estudiar los patrones en el conjunto de datos de entrada para obtener una mejor comprensión e identificar patrones
similares que se puedan agrupar en clases o eventos específicos. Como este tipo de algoritmos no requieren ninguna
intervención previa de los expertos en la materia, se denominan aprendizaje no supervisado.
Clustering
Supongamos que las clases no se conocen de antemano para un conjunto de datos determinado. El objetivo aquí es dividir el
conjunto de datos de entrada en grupos lógicos de elementos relacionados. Algunos ejemplos son agrupar artículos de noticias
similares, agrupando clientes similares en función de su perfil, etc.
Reducción de dimensiones
Aquí, el objetivo es simplificar un gran conjunto de datos de entrada asignándolos a un espacio dimensional más bajo. Por
ejemplo, llevar a cabo un análisis en un conjunto de datos de gran dimensión es muy intensivo en computación, por lo que, para
simplificar, es posible que desee encontrar las variables clave que contienen un porcentaje significativo (digamos, el 95 %) de la
información y usarlas solo para el análisis.
Detección de anomalías
La detección de anomalías también se conoce comúnmente como detección de valores atípicos y es la identificación de
elementos, eventos u observaciones que no se ajustan a un patrón o comportamiento esperado en comparación con otros
elementos en un conjunto de datos determinado.
Tiene aplicabilidad en una variedad de dominios, como el monitoreo de la salud de la máquina o el sistema, la detección de
eventos, la detección de fraude/intrusión, etc. En los últimos días, la detección de anomalías ha visto una gran área de interés
en la palabra Internet de las cosas (IoT) para permitir la detección de comportamientos anormales en un contexto determinado.
Un punto de datos se denomina anomalía si está distante de otros puntos de datos en un contexto determinado, por lo que el
Página 57 de 65
cálculo de la desviación estándar o la agrupación son las técnicas más utilizadas para la detección de anomalías junto con muchas
otras técnicas.
El aprendizaje reforzado
El objetivo básico de los algoritmos de aprendizaje por refuerzo es asignar situaciones a acciones que produzcan la máxima
recompensa final. Al mapear la acción, el algoritmo no solo debe considerar la recompensa inmediata, sino también la siguiente
y todas las recompensas posteriores. Por ejemplo, un programa para jugar o conducir un automóvil tendrá que interactuar
constantemente con un entorno dinámico en el que se espera que realice un objetivo determinado. Ejemplos de técnicas de
aprendizaje por refuerzo son los siguientes:
1
Proceso de decisión de Markov.
2
Q-aprendizaje.
3
Métodos de diferencia temporal.
4
Métodos de Montecarlo.
Con el tiempo, el campo de la minería de datos ha visto una expansión masiva. Muchos expertos han realizado muchos esfuerzos
para estandarizar metodologías y definir las mejores prácticas para el proceso cada vez mayor, diversificado e iterativo de
creación de sistemas de aprendizaje automático. Además de la última década, el campo del aprendizaje automático se ha vuelto
muy importante para diferentes industrias, empresas y organizaciones debido a su capacidad para extraer información de
grandes cantidades de datos que anteriormente no tenían uso o estaban infrautilizados para aprender tendencias/patrones y
predecir las posibilidades que ayudan a impulsar las decisiones empresariales que conducen a la obtención de beneficios.
En última instancia, se planteó el riesgo de desperdiciar la rica y valiosa información contenida en las ricas fuentes de datos
comerciales, y esto requería el uso de técnicas adecuadas para obtener conocimiento útil, por lo que el campo del Machine
learning surgió a principios de la década de 1980 y ha visto un gran crecimiento. Con el surgimiento de este campo, se
introdujeron diferentes marcos de procesos. Estos marcos de procesos guían y llevan las tareas de aprendizaje automático y
sus aplicaciones. Se hicieron esfuerzos para utilizar marcos de proceso de minería de datos que guiarán la implementación de
la minería de datos en grandes cantidades de datos.
Principalmente tres marcos de proceso de minería de datos han sido los más populares y ampliamente practicados por
expertos/investigadores de minería de datos para construir sistemas de aprendizaje automático.
1
Modelo de proceso de Knowledge Discovery Databases (KDD)
Página 58 de 65
2
Proceso Estándar Industrial CRoss para Minería de Datos (en Ingles, CRISP – DM)
3
Muestree, explore, modifique, modele y evalúe (en ingles SEMMA)
Se refiere al proceso general de descubrir conocimiento útil a partir de datos, que fue presentado en un libro de Fayyad et al.,
1996.
Es una integración de múltiples tecnologías para la gestión de datos, como: el almacenamiento de datos, aprendizaje
automático estadístico, soporte de decisiones, visualización y computación paralela.
Como sugiere su nomenclatura en castellano “bases de datos de descubrimiento de conocimiento”, estas se centran, en el
proceso general de descubrimiento de conocimiento a partir de datos que cubre todo el ciclo de vida de los datos, que incluye
cómo se almacenan los datos, cómo se accede a ellos, cómo se pueden escalar los algoritmos a enormes conjuntos de datos de
manera eficiente. Por ultimo, cómo se pueden interpretar y visualizar los resultados. En el siguiente diagrama se expone las
diferentes etapas dentro de un proceso de KDD:
• La selección
En este paso, se selecciona selección e integra la información que procede de los datos de destino de muchas y diferentes
fuentes heterogéneas.
• El pre-procesamiento
Los conjuntos de datos del mundo real a menudo están incompletos, es decir, faltarán valores de atributos; ruidoso (errores y
valores atípicos); e inconsistente, lo que significa que existen discrepancias entre los datos recopilados. Los datos sucios
pueden confundir los procedimientos de minería y dar lugar a resultados poco fiables e inválidos. Al realizar análisis y minería
complejos en una gran cantidad de datos contaminados puede llevar mucho tiempo.
Página 59 de 65
El pre-procesamiento y la limpieza deberían mejorar la calidad de los datos y los resultados de la minería al mejorar el proceso
de minería real. Las acciones a tomar incluyen las siguientes:
1
Recopilación de datos o información necesarios para modelar.
2
Tratamiento de valores atípicos o eliminación de ruido.
3
Usar el conocimiento previo del dominio para eliminar inconsistencias y duplicados de datos.
4
Elección de estrategias para el manejo de datos faltantes.
• Transformación
En este paso, los datos se transforman o consolidan en formas apropiadas para la minería, es decir, encontrar características
útiles para representar los datos según el objetivo de la tarea. Por ejemplo, en espacios de alta dimensión o gran cantidad de
atributos, las distancias entre objetos pueden perder sentido. Por lo tanto, los métodos de transformación y reducción de
dimensionalidad se pueden usar para reducir el número efectivo de variables bajo consideración o encontrar representaciones
invariantes para los datos. Existen varias técnicas de transformación de datos:
Agregación
Generalización, en la que un objeto de datos primitivo puede ser reemplazado por conceptos de nivel superior.
Normalización, que implica escalado mínimo-máximo o puntuación z
Se aplican técnicas de reducción de datos para producir una representación reducida de los datos (menor volumen
que mantiene de cerca la integridad de los datos originales) Compresión, por ejemplo, wavelets, PCA,
agrupamiento, etc.
En este paso, se aplican algoritmos de aprendizaje automático para extraer patrones de datos.
Los métodos de exploración/resumen, como la media, la mediana, la moda, la desviación estándar, la descripción de
clase/concepto y las técnicas gráficas de diagramas de baja dimensión, se pueden utilizar para comprender los datos. Los
modelos predictivos, como la clasificación o la regresión, se pueden utilizar para predecir el evento o el valor futuro. El análisis
Página 60 de 65
de conglomerados (cluster) se puede utilizar para comprender la existencia de grupos similares. En donde, se seleccionan los
métodos más apropiados que se utilizarán para la búsqueda de modelos y patrones.
• Interpretación / Evaluación
Este paso se enfoca en interpretar los patrones extraídos para que sean comprensibles para el usuario, como el resumen y la
visualización. Se interpreta el patrón o los modelos extraídos. Los patrones son una estructura local que hace declaraciones
solo sobre regiones restringidas del espacio abarcado por las variables. Mientras que los modelos son estructuras globales que
hacen declaraciones sobre cualquier punto en el espacio de medición, es decir, Y = mX+C (modelo lineal)
El CRISP-DM siglas que en castellano significan “Proceso estándar entre industrias para la minería de datos”.
Fue establecido por la iniciativa del Programa Estratégico Europeo de Investigación en Tecnología de la Información, con el
objetivo de crear una metodología imparcial que no dependa del dominio de los datos.
Es un esfuerzo por consolidar las mejores prácticas del proceso de minería de datos seguidas por expertos para abordar sus
problemas. Fue concebido en 1996 y publicado por primera vez en 1999 y se informó como la metodología líder para proyectos
de análisis predictivo/minería de datos en encuestas realizadas en 2002, 2004 y 2007.
Hubo un plan entre 2006 y 2008 para actualizar CRISP-DM, pero esa actualización no se llevó a cabo, y hoy el sitio web CRISP-
DM.org original ya no está activo. Este marco es una secuencia idealizada de actividades. A su vez es un proceso iterativo y
muchas de las tareas retroceden a tareas anteriores y repiten ciertas acciones para brindar más claridad. Hay seis fases
principales, como se muestra en la siguiente figura.
Página 61 de 65
Las cuales se exponen a continuación:
Esta es una de las fases más importantes ya que la precisión del modelo dependerá significativamente de la calidad de datos
que se introducen en el algoritmo para aprender los patrones.
Fase 4: Modelado
Hay múltiples algoritmos de aprendizaje automático disponibles para resolver un problema determinado. Por lo tanto, se
aplican varios algoritmos de aprendizaje automático apropiados en el conjunto de datos limpio y sus parámetros se ajustan a
los valores óptimos posibles. Por último, se registra el rendimiento del modelo para cada uno de los modelos aplicados.
Fase 5: Evaluación
En esta etapa se llevará a cabo un ejercicio de evaluación comparativa entre todos los diferentes modelos que se identificaron
para haber dado alta precisión. El modelo se probará con datos que no se usaron como parte del entrenamiento para evaluar
la consistencia de su rendimiento. Los resultados se verificarán con el requisito comercial identificado en la fase 1. Los expertos
en la materia del negocio participarán para garantizar que los resultados del modelo sean precisos y utilizables según lo requiera
el objetivo del proyecto.
Fase 6: Despliegue
El enfoque clave en esta fase es la usabilidad de la salida del modelo. Por lo tanto, se implementará el modelo final aprobado
por el experto en la materia y los consumidores del resultado del modelo recibirán capacitación sobre cómo interpretarlo o
usarlo para tomar las decisiones comerciales definidas en la fase de comprensión comercial.
La implementación podría ser generar un informe de predicción y compartirlo con el usuario. También se programarán tiempos
periódicos de entrenamiento y predicción del modelo en función de los requisitos comerciales.
El SEMMA ()
SEMMA cuyas siglas en español son; Muestrear, Explorar, Modificar, Modelar, Evaluar. Se refiere a los pasos secuenciales para
construir modelos de aprendizaje automático incorporados en 'SAS Enterprise Miner', un producto de SAS Institute Inc., uno
de los mayores productores de software de inteligencia comercial y estadística comercial. Sin embargo, los pasos secuenciales
guían el desarrollo de un sistema de aprendizaje automático. Veamos los cinco pasos secuenciales para entenderlo mejor:
Muestra
Este paso se trata de seleccionar el subconjunto del conjunto de datos de volumen correcto de un gran conjunto de datos
proporcionado para construir el modelo. Esto nos ayudará a construir el modelo de manera eficiente. Esta fue una práctica
famosa cuando el poder de cómputo era costoso, sin embargo, todavía se practica. El subconjunto de datos seleccionado debe
ser una representación real de todo el conjunto de datos recopilado originalmente, lo que significa que debe contener suficiente
información para recuperar. Los datos también se dividen para entrenamiento y validación en esta etapa.
Explorar
En esta fase se llevan a cabo actividades para comprender los vacíos de datos y la relación entre ellos. Dos actividades clave son
el análisis univariado y multivariado. En el análisis univariado, cada variable mira individualmente para comprender su
distribución, mientras que en el análisis multivariado se explora la relación entre cada variable.
Página 63 de 65
Modificar
En esta fase, las variables se limpian donde sea necesario. Las nuevas funciones derivadas se crean aplicando la lógica
empresarial a las funciones existentes en función del requisito. Las variables se transforman si es necesario. El resultado de esta
fase es un conjunto de datos limpios que se puede pasar al algoritmo de aprendizaje automático para construir el modelo.
Modelo
En esta fase, se aplican varias técnicas de modelado o minería de datos en los datos pre-procesados para comparar su
rendimiento con los resultados deseados.
Evaluar
Esta es la última fase. Aquí, el rendimiento del modelo se evalúa con los datos de prueba (no utilizados en el entrenamiento del
modelo) para garantizar la confiabilidad y la utilidad comercial.
KDD es el más antiguo de los tres marcos. CRISP-DM y SEMMA parecen ser la implementación práctica del proceso KDD. CRISP-
DM es más completo ya que el flujo iterativo del conocimiento a través y entre las fases se ha definido claramente. También
cubre todas las áreas de construcción de sistemas de aprendizaje automático confiables desde una perspectiva empresarial.
En la etapa de muestra de SEMMA, es importante que tenga una verdadera comprensión de todos los aspectos del negocio para
garantizar que los datos muestreados retengan la máxima información. Sin embargo, la drástica innovación en el pasado
Página 64 de 65
reciente ha llevado a reducir los costos de almacenamiento de datos y poder computacional, lo que nos permite aplicar
algoritmos de aprendizaje automático en todos los datos de manera eficiente, casi eliminando la necesidad de muestreo.
Podemos ver que, en general, las fases centrales están cubiertas por los tres marcos y no hay una gran diferencia entre estos
Frameworks o marcos. En general, estos procesos nos guían sobre cómo se pueden aplicar las técnicas de minería de datos en
escenarios prácticos. En general, la mayoría de los investigadores y expertos en minería de datos siguen el modelo de proceso
KDD y CRISP-DM porque es más completo y preciso. Aunque es recomendable, seguir CRISP-DM para su uso en entornos
empresariales, ya que brinda cobertura de la actividad comercial de extremo a extremo y del ciclo de vida de la construcción
de un sistema de Machine Learning.
Conclusiones
En este tema hemos aprendido a desarrollar modelos de Machine Learning para el diseño de modelos predictivos de
clasificación en problemas reales. Además de implementar algoritmos para el análisis de diferentes aplicaciones y en modelos
de predicción avanzados.
Por último, es importante que el estudiante continúe investigando acerca del tema para mantener un nivel de conocimiento
continuo.
Página 65 de 65