Gu铆a completa: Probabilidad para Machine Learning con Python

La probabilidad es un campo de las matem谩ticas que est谩 universalmente aceptada como la base de Machine Learning. Aunque la probabilidad es un gran campo con muchas teor铆as y descubrimientos, tanto las herramientas y las notaciones tomadas del campo son necesarias para los profesionales de Machine Learning. Con una base s贸lida de lo que es la probabilidad, es posible centrarse solo en las partes buenas o relevantes.

A continuaci贸n, descubrir谩s c贸mo puedes empezar y comprender con confianza e implementar los m茅todos probabil铆sticos utilizados en Machine Learning con Python.

aprende f谩cilmente inteligencia artificial - newsletter

estad铆sticas en machine learning

Probabilidad y Machine Learning

La probabilidad es un campo de las matem谩ticas que cuantifica la incertidumbre. Machine Learning consiste en desarrollar modelos predictivos a partir de datos inciertos. La incertidumbre significa trabajar con informaci贸n imperfecta o incompleta.

La incertidumbre es fundamental en el campo de Machine Learning y, sin embargo, es uno de los aspectos que m谩s dificultades causa a los principiantes, especialmente a los que provienen de un entorno de desarrollo.

Hay tres fuentes principales de incertidumbre en Machine Learning:

  • Ruido en las observaciones, por ejemplo, errores de medici贸n y ruido aleatorio.
  • Cobertura incompleta del dominio, por ejemplo, nunca se pueden observar los datos.
  • Modelo imperfecto del problema, por ejemplo, todos los modelos tienen errores, algunos son 煤tiles.

La incertidumbre en Machine Learning se gestiona mediante la probabilidad:

  • La probabilidad y la estad铆stica nos ayudan a comprender y cuantificar el valor esperado y la variabilidad de las variables en nuestras observaciones del dominio.
  • La probabilidad ayuda a comprender y cuantificar la distribuci贸n y la densidad esperadas de las observaciones del dominio.
  • La probabilidad ayuda a comprender y cuantificar la capacidad y la varianza esperadas en el rendimiento de nuestros modelos predictivos cuando se aplican a nuevos datos.

Esta es la base de Machine Learning. Adem谩s, podemos necesitar modelos para predecir una probabilidad, podemos utilizar la probabilidad para desarrollar modelos predictivos, como Naive Bayes, y podemos utilizar marcos probabil铆sticos para entrenar modelos predictivos, por ejemplo, estimaci贸n de m谩xima verosimilitud.

Probabilidad en Machine learning

Tres tipos de probabilidad

La probabilidad cuantifica la probabilidad de un evento. Espec铆ficamente, cuantifica la probabilidad de un resultado espec铆fico para una variable aleatoria, como el lanzamiento de una moneda, la tirada de un dado o la extracci贸n de una carta de una baraja.

Podemos hablar de la probabilidad de s贸lo dos sucesos: la probabilidad del suceso A para la variable X y del suceso B para la variable Y, lo que, en la forma abreviada, es X = A e Y = B, y que las dos variables est茅n relacionadas o sean dependientes de alguna manera. Como tal, hay tres tipos principales de probabilidad que podr铆amos considerar.

Probabilidad conjunta

Podemos estar interesados en la probabilidad de dos sucesos simult谩neos, como los resultados de dos variables aleatorias diferentes. Por ejemplo, la probabilidad conjunta del suceso A y del suceso B se escribe formalmente como:

Probabilidad en Machine learning con python

La probabilidad conjunta de los sucesos A y B se calcula como la probabilidad del suceso A dado suceso B multiplicada por la probabilidad del suceso B. Esto puede expresarse formalmente de la siguiente manera:

Probabilidad en Machine learning con python

Probabilidad marginal

Podemos estar interesados en la probabilidad de un suceso para una variable aleatoria, independientemente del resultado de otra variable aleatoria. No hay una notaci贸n especial para la probabilidad marginal, es simplemente la suma o uni贸n sobre todas las probabilidades de todos los sucesos para la segunda variable para un suceso fijo dado para la primera variable.

Probabilidad en Machine learning con python

Probabilidad condicional

Podemos estar interesados en la probabilidad de un suceso dada la ocurrencia de otro suceso. Por ejemplo, la probabilidad condicional del suceso A dado el suceso B se escribe formalmente como:

Probabilidad en Machine learning con python

La probabilidad condicional del suceso A dado el suceso B puede calcularse utilizando la probabilidad conjunta de los sucesos de la siguiente manera:

Probabilidad en Machine learning con python
Probabilidad en Machine learning

Distribuciones de probabilidad

En probabilidad, una variable aleatoria puede tomar uno de los muchos valores posibles, por ejemplo, eventos del espacio de estados. Tanto a un valor espec铆fico o a un conjunto de valores de una variable aleatoria se le puede asignar una probabilidad.

Hay dos clases principales de variables aleatorias:

  • Variable aleatoria discreta: los valores se extraen de un conjunto finito de estados.
  • Variable aleatoria continua: los valores se extraen de un rango de valores num茅ricos reales.

Una variable aleatoria discreta tiene un conjunto finito de estados, por ejemplo, los colores de un auto. Una variable aleatoria continua tiene un rango de valores num茅ricos, por ejemplo, la altura de las personas. Una distribuci贸n de probabilidad es un resumen de las probabilidades de los valores de una variable aleatoria.

Distribuciones de probabilidad discreta

Una distribuci贸n de probabilidad discreta resume las probabilidades de una variable aleatoria discreta. Algunos ejemplos bien conocidos son:

  • Distribuci贸n de Poisson
  • Distribuciones Bernoulli y binomial
  • Distribuciones Multinoulli y multinomial

Distribuciones de probabilidad continua

Una distribuci贸n de probabilidad continua resume la probabilidad de una variable aleatoria continua. Algunos ejemplos bien conocidos son:

  • Distribuci贸n normal o gaussiana
  • Distribuci贸n exponencial
  • Distribuci贸n de Pareto

Muestreo aleatorio de la distribuci贸n gaussiana

Podemos definir una distribuci贸n con una media de 50 y una desviaci贸n est谩ndar de 5 y muestrear n煤meros aleatorios de esta distribuci贸n. Podemos lograr esto usando la funci贸n NumPy normal( ). El ejemplo siguiente muestrea e imprime 10 n煤meros de esta distribuci贸n:

				
					from numpy.random import normal

#Se define los par谩metros de la distribuci贸n 
mu = 50
sigma = 5
n = 10

#Se genera la muestra
muestra = normal(mu, sigma, n)
print(muestra)
				
			
Probabilidad en Machine learning con python

Al ejecutar las l铆neas de c贸digo se imprimen 10 n煤meros extra铆dos al azar de la distribuci贸n normal definida.

Probabilidad en Machine learning

Clasificador Naive Bayes

En Machine Learning, a menudo estamos interesados en un problema de modelado predictivo en el que queremos predecir una etiqueta de clase para una observaci贸n dada. Un enfoque para resolver este problema es desarrollar un modelo probabil铆stico.

Desde una perspectiva probabil铆stica, nos interesa estimar la probabilidad condicional de la etiqueta de clase dada la observaci贸n, o la probabilidad de la clase y dados los datos de entrada X.

Probabilidad en Machine learning con python

El Teorema de Bayes proporciona una forma alternativa y basada en principios para calcular la probabilidad condicional utilizando la inversa de la probabilidad condicional deseada, que suele ser m谩s sencilla de calcular. La forma sencilla de calcular el Teorema de Bayes es la siguiente:

Probabilidad en Machine learning con python

Donde la probabilidad que nos interesa calcular P(A|B) se llama probabilidad posterior y la probabilidad marginal del suceso P(A) se llama a priori.

La aplicaci贸n directa del Teorema de Bayes para la clasificaci贸n se vuelve intratable, especialmente a medida que aumenta el n煤mero de variables o caracter铆sticas (n). En su lugar, podemos simplificar el c谩lculo y suponer que cada variable de entrada es independiente.

Aunque resulta dram谩tico, este c谩lculo m谩s sencillo suele dar muy buenos resultados, incluso cuando las variables de entrada son muy dependientes. Podemos ponerlo en pr谩ctica partiendo de cero, asumiendo una distribuci贸n de probabilidad para cada variable de entrada independiente y calculando la probabilidad de cada valor de entrada independiente y calculando la probabilidad de que cada valor de entrada espec铆fico pertenezca a cada clase y multiplicando los resultados para obtener una puntuaci贸n utilizada para seleccionar la clase m谩s probable.

Probabilidad en Machine learning con python

La librer铆a Scikit Learn proporciona una implementaci贸n eficiente del algoritmo si asumimos una distribuci贸n gaussiana para cada variable de entrada. Para utilizar un modelo Naive Bayes de Scikit Learn, primero se define el modelo y luego se ajusta al conjunto de datos de entrenamiento. Una vez ajustado, las probabilidades pueden predecirse mediante la funci贸n predict_proba( ) y las etiquetas de clase pueden predecirse directamente mediante la funci贸n predict( ). A continuaci贸n, se muestra el ejemplo completo de ajuste de un modelo Gaussiano Naive Bayes (GaussianNB) a un conjunto de prueba.

				
					from sklearn.datasets import make_blobs
from sklearn.naive_bayes import GaussianNB

#Se genera un conjunto de datos de clasificaci贸n
X, y = make_blobs(n_samples=100, centers=2, n_features=2, random_state=1)

#Se define el modelo
modelo = GaussianNB()
modelo.fit(X, y)

#Se selecciona una sola muestra
Xsample, ysample = [X[0]], y[0]

#Se realiza la predicci贸n probabilistica
yhat_prob = modelo.predict_proba(Xsample)
print('Predicci贸n probabil铆stica: ', yhat_prob) 
yhat_class = modelo.predict(Xsample) 
print('Predicci贸n de clase: ', yhat_class) 
print('Correcto: y=%d' % ysample)
				
			
Probabilidad en Machine learning con python

Al ejecutar el ejemplo se ajusta el modelo en el conjunto de datos de entrenamiento y, a continuaci贸n, se realizan predicciones para el mismo primer ejemplo que hemos utilizado en el ejemplo anterior.

Probabilidad en Machine learning

Entrop铆a y entrop铆a cruzada

La teor铆a de la informaci贸n es un campo de estudio que se ocupa de cuantificar la informaci贸n para la comunicaci贸n. La intuici贸n detr谩s de la cuantificaci贸n de la informaci贸n es la idea de medir cu谩nta sorpresa hay en un evento. Los eventos que son raros (baja probabilidad) son m谩s sorprendentes y, por lo tanto, tienen m谩s informaci贸n que los eventos que son comunes (alta probabilidad).

  • Suceso de baja probabilidad: alta informaci贸n 鈥 sorprendente
  • Suceso de alta probabilidad: baja informaci贸n 鈥 poco sorprendente

Podemos calcular la cantidad de informaci贸n que hay en un suceso utilizando la probabilidad del mismo:

Probabilidad en Machine learning con python

Tambi茅n podemos cuantificar la cantidad de informaci贸n que hay en una variable aleatoria. Esto se llama entrop铆a y resume la cantidad de informaci贸n que se requiere en promedio para representar eventos. La entrop铆a puede calcularse para un variable aleatorio X con K estados discretos de la siguiente manera:

Probabilidad en Machine learning con python

La entrop铆a cruzada es una medida de la diferencia entre dos distribuciones de probabilidad para una variable aleatoria dada o un conjunto de eventos. Se utiliza ampliamente como funci贸n de p茅rdida al optimizar los modelos de clasificaci贸n. Se basa en la idea de entrop铆a y calcula el n煤mero medio de bits necesarios para representar o transmitir un evento de una distribuci贸n en comparaci贸n con la otra.

Probabilidad en Machine learning con python

Podemos concretar el c谩lculo de la entrop铆a cruzada con un peque帽o ejemplo. Consideremos una variable aleatoria con tres sucesos de distinto color. Podemos tener dos distribuciones de probabilidad diferentes para esta variable. Podemos calcular la entrop铆a cruzada entre estas dos distribuciones. El ejemplo completo es el siguiente:

				
					from math import log2

#Se calcula la entrop铆a cruzada
def cross_entropy(p, q):
      return -sum([p[i]*log2(q[i]) for i in range(len(p))])

#Se define los datos
p = [0.10, 0.40, 0.50]
q = [0.80, 0.15, 0.05]

#Se calcula la entrop铆a cruzada de H(P, Q) 
ce_pq = cross_entropy(p, q) 
print('H(P, Q): ', ce_pq, 'bits')
ce_qp = cross_entropy(q, p) 
print('H(Q, P): ', ce_qp, 'bits')
				
			
Probabilidad en Machine learning con python

Al ejecutar el ejemplo se calcula primero la entrop铆a cruzada e Q a partir de P, y luego la de P a partir de Q.

estad铆sticas en machine learning

Clasificadores ingenuos

Los problemas de modelado predictivo de clasificaci贸n implican la predicci贸n de una etiqueta de clase dada una entrada al modelo. Dado un modelo de clasificaci贸n, 驴c贸mo se sabe si el modelo tiene habilidad o no? Esta es una pregunta com煤n en todos los proyectos de modelado predictivo de clasificaci贸n. La respuesta es comparar los resultados de un modelo de clasificaci贸n dado con un modelo de referencia o ingenuo.

Consideremos un problema simple de clasificaci贸n de dos clases en el que el n煤mero de observaciones no es igual para cada clase, por ejemplo, est谩 desequilibrado, con 25 ejemplos para la clase 0 y 75 ejemplos para la clase 1. Este problema puede utilizarse para considerar diferentes modelos de clasificaci贸n ingenua. Por ejemplo, considera un modelo que predice aleatoriamente la clase 0 o la clase 1 con la misma probabilidad, 驴cu谩l ser铆a su rendimiento? Podemos calcular el rendimiento esperado utilizando un modelo de probabilidad simple.

Probabilidad en Machine learning con python

Podemos introducir la ocurrencia de cada clase (0,25 y 0,75) y la probabilidad predicha para cada clase (0,5 y 0,5) y estimar el rendimiento del modelo.

Probabilidad en Machine learning con python

Resulta que este clasificador es bastante pobre. Ahora, 驴qu茅 pasa si consideramos la predicci贸n dee la clase mayoritaria (clase 1) cada vez? De nuevo, podemos introducir las probabilidades predichas (0,0 y 1,0) y estimar el rendimiento del modelo.

Probabilidad en Machine learning con python

Resulta que este simple cambio da como resultado un mejor modelo de clasificaci贸n ingenuo, y es que quiz谩s el mejor clasificador ingenuo que se puede utilizar cuando las clases est谩n desequilibradas.

La librer铆a de Machine Learning Scikit Learn proporciona una implementaci贸n del algoritmo de clasificaci贸n ingenua de clase mayoritaria llamado DummyClassifier que puedes utilizar en tu pr贸ximo proyecto de modelado predictivo de clasificaci贸n. El ejemplo completo se encuentra a continuaci贸n:

				
					from numpy import asarray
from sklearn.dummy import DummyClassifier
from sklearn.metrics import accuracy_score

#Se define el conjunto de datos
X = asarray([0 for _ in range(100)])
clase0 = [0 for _ in range(25)]
clase1 = [1 for _ in range(75)]
y = asarray(clase0 + clase1)
X = X.reshape((len(X), 1))

#Definir el modelo
modelo = DummyClassifier(strategy='most_frequent')
modelo.fit(X, y)
# make predictions
yhat = modelo.predict(X)
#Se calcula la exactitud
accuracy = accuracy_score(y, yhat) 
print('Exactitud: ', accuracy)
				
			
Probabilidad en Machine learning con python

Al ejecutar el ejemplo, puedes revisar el intervalo de confianza de la exactitud estimada.

estad铆sticas en machine learning

Puntuaciones de probabilidad

La predicci贸n de probabiliades en lugar de etiquetas de clase para un problema de clasificaci贸n puede propocionar un matiz adicional e incertidumbre para las predicciones. El matiz a帽adido permite utilizar m茅tricas m谩s sofisticadas para interpretar y evaluar las probabilidades predichas. Echemos un vistazo a los dos m茅todos de puntuaci贸n m谩s populares para evaluar las probabilidades predichas.

Puntuaci贸n de p茅rdida logar铆tmica

La p茅rdida log铆stica, o p茅rdida logar铆tmica, calcula la probabilidad logar铆tmica entre las probabilidades predichas y las probabilidades observadas. Aunque se ha desarrollado para entrenar modelos de clasificaci贸n binarios como la Regresi贸n Log铆stica, puede utilizarse para evaluar problemas multiclase y es funcionalmente equivalente al c谩lculo de la entrop铆a cruzada derivada de la teor铆a de la informaci贸n. Un modelo con una habilidad perfecta tiene una puntuaci贸n de p茅rdida logar铆tmica de 0,0.

La p茅rdida logar铆tmica puede implementarse en Python utilizando la funci贸n log_loss( ) de Scikit Learn. Por ejemplo:

				
					from numpy import asarray
from sklearn.metrics import log_loss

#Se define los datos
y_true = [1, 1, 1, 1, 1, 0, 0, 0, 0, 0]
y_pred = [0.8, 0.9, 0.9, 0.6, 0.8, 0.1, 0.4, 0.2, 0.1, 0.3]

#Se define los datos como se espera
y_true = asarray([[v, 1-v] for v in y_true])
y_pred = asarray([[v, 1-v] for v in y_pred])

#Se calcula la p茅rdida
loss = log_loss(y_true, y_pred)
print(loss)
				
			
Probabilidad en Machine learning con python

Puntuaci贸n de Brier

La puntuaci贸n de Brier, llamada as铆 por Glenn Brier, calcula el error cuadr谩tico medio entre las probabilidades previstas y los valores esperados. La puntuaci贸n resume la magnitud del error en las previsiones de probabilidad. La puntuaci贸n del error est谩 siempre entre 0,0 y 1,0 donde un modelo con una habilidad perfecta tiene una puntuaci贸n de 0,0.

La puntuaci贸n de Brier se puede calcular en Python utilizando la funci贸n brier_score_loss( ) de Scikit Learn. Por ejemplo:

				
					from sklearn.metrics import brier_score_loss

#Se define los datos
y_true = [1, 1, 1, 1, 1, 0, 0, 0, 0, 0]
y_pred = [0.8, 0.9, 0.9, 0.6, 0.8, 0.1, 0.4, 0.2, 0.1, 0.3]

#Calcular la puntuaci贸n de Brier
score = brier_score_loss(y_true, y_pred, pos_label=1)
print(score)
				
			
Probabilidad en Machine learning con python

Si hacemos un listado con todo lo que aprendiste ac谩, tenemos:

  • La importancia de la probabilidad en Machine Learning.
  • Los tres tipos principales de probabilidad y c贸mo calcularlos.
  • Las distribuciones de probabilidad para las variables aleatorias y c贸mo extraer muestras aleatorias de ellas.
  • C贸mo se puede utilizar el Teorema de Bayes para calcular la probabilidad condicional y c贸mo se puede utilizar en un modelo de clasificaci贸n.
  • C贸mo calcular las puntuaciones de informaci贸n, entrop铆a y entrop铆a cruzada y su significado.
  • C贸mo desarrollar y evaluar el rendimiento esperado de los modelos de clasificaci贸n ingenuos.
  • C贸mo evaluar la habilidad de un modelo que predice los valores de probabilidad para un problema de clasificaci贸n.

Esto es solo una breve introducci贸n en los temas de la probabilidad para Machine Learning. Debes seguir practicando y desarrollando tus habilidades.

Si te est谩s iniciando en Machine Learning y a煤n no conoces los temas y 谩reas de matem谩ticas que necesitas enfocarte, te ofrezco un listado con este contenido. Con esta gu铆a podr谩s conocer los temas de matem谩ticas que deber谩s aprender para avanzar en tu aprendizaje de Machine Learning. Para descargar la gu铆a solamente tienes que ingresar a este enlace.

Deja un comentario

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