Guía completa: Probabilidad para Machine Learning con Python

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.

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. Los campos obligatorios están marcados con *