Matemáticas para Machine Learning
Tags: python, tutorial, machinelearning, datascience
Published: 2020-10-15 21:16:24

## Tabla de Contenidos
1. [Álgebra Lineal](#Algebra Lineal)
  1. [Escalares](#Escalares)
  2. [Vectores](#Vectores)
  3. [Matrices](#Matrices)
  4. [Tensores](#Tensores)
  5. [Hiperplanos](#Hiperplanos)
  6. [Operaciones Matemáticas Relevantes](#Operaciones Matematicas Relevantes)
     1. [Producto de punto (dot product)](#Producto de punto (dot product))
     2. [Producto Hadamard (element-wise product)](#Producto Hadamard (element-wise product))
     3. [Producto Tensor (outer product)](#Producto Tensor (outer product))
2. [Estadística](#Estadistica)
  1. [Probabilidad](#Probabilidad)
     1. [Probabilidad vs. Posibilidad](#Probabilidad vs. Posibilidad)
     2. [Bayesianos vs. Frequentistas](#Bayesianos vs. Frequentistas)
     3. [Probabilidad Condicional](#Probabilidad Condicional)
     4. [Teorema de Bayes](#Teorema de Bayes)
     5. [Probabilidad Posterior](#Probabilidad Posterior)
  2. [Distribuciones](#Distribuciones)
     1. [Teorema del Limite Central](#Teorema del Limite Central)
     2. [Muestras vs. Población](#Muestras vs. Poblacion)
     3. [Métodos de re-muestreo](#Metodos de re-muestreo)
     4. [Sesgo de Selección](#Sesgo de Seleccion)
     5. [Posibilidad](#Posibilidad)

# Álgebra Lineal <a name="Algebra Lineal"></a>

## Escalares <a name="Escalares"></a>

En matemáticas, cuando el termino escalar es mencionado, estamos hablando de elementos en un vector. Un escalar es un número real y un elemento en un campo usado para definir el espacio vectorial.

En computación, el termino escalar es sinónimo con el termino variable y su locación de almacenamiento emparejado con un nombre simbólico. Esta locación de almacenamiento mantiene una cantidad desconocida de información llamada *valor*.

## Vectores <a name="Vectores"></a>

Para nuestro uso, definimos un vector como lo siguiente:

> Para un integral positivo *n*, un vector es un *n*-taple, un (multi)set o array de *n* números, llamados elementos o escalares.

Lo que estamos diciendo es que queremos crear una estructura de datos llamada vector a través de un proceso llamado *vectorización*. El número de elementos en el vector es llamado "orden" (o "longitud") del vector. Los vectores también pueden representar puntos en un espacion de *n*-dimensiones. En el sentido espacial, la distancia Euclideana desde el origen al punto representado por el vector nos da la "longitud" del vector.

En texto matemático, vemos a los vectores escritos asi:

{% gist https://gist.github.com/ruizleandro/e87aa19556272a4d9ac91994cfb0e4da.js %}

Hay muchas maneras diferentes de manejar la vectorización, y se pueden aplicar muchos pasos de preprocesamiento, dando diferentes grados de efectividad en los resultados del modelo.

## Matrices <a name="Matrices"></a>

Considera una matriz como un grupo de vectores en el que todos tienen la misma dimensión (número de columnas). De esta manera una matriz es un array de dos dimensiones para el cual tenemos filas y columnas. 

Si nuestra matriz debe ser de tamaño *n* x *m*, tiene *n* filas y *m* columnas.

## Tensores <a name="Tensores"></a>

Un *tensor* es un array multidimensional al nivel más fundamental. Es más una estructura matematica general que un vector. Se puede ver a los vectores como una subclase de tensores.

Con tensores, las filas se extienden a lo largo del eje *y* y las columnas a lo largo del eje *x*. Cada eje es una dimensión, y los tensores tienen dimensiones adicionales. Los tensores también tienen un rango. Comparativamente, un escalar es de rango 0 y un vector es rango 1. También se puede ver que una matriz es de rango 2. Cualquier entidad de rango 3 y superior es considerado un tensor.

## Hiperplanos <a name="Hiperplanos"></a>

Otro objeto de álgebra lineal del que debemos estar al tanto es el *hiperplano*. En el campo de la geometría, el hiperplano es un subespacio de una dimensión menos que su espacio ambiental. En un espacio de tres dimensiones, los hiperplanos deben tener dos dimensiones. En un espacio de dos dimensiones se considera a una linea de una dimension como el hiperplano.

Un hiperplano es una construcción matemática que divide en *n* espacios dimensionales en "partes" separadas y por lo tanto es util en aplicaciones como clasificación.

Optimizar los parámetros del hiperplano es un concepto central en modelado lineal.

## Operaciones Matemáticas Relevantes <a name="Operaciones Matematicas Relevantes"></a>

### Producto de punto (dot product) <a name="Producto de punto (dot product)"></a>

Una operación central de la algebra lineal que se ve muy seguido en Machine Learning es el *producto de punto*. El producto de punto es llamado a veces como "producto escalar" o "producto interno". Este producto toma dos vectores de la misma longitud y devuelve un solo número. Esto se hace combinando las entradas en los dos vectores, multiplicándolas y luego sumando los productos así obtenidos. Sin ponerse muy matemático (inmediatamente), es importante mencionar que este solo número codifica mucha informacion.

Para empezar, el producto de punto es una medida de cuan grandes son los elementos individuales en cada vector. Dos vectores con valores bastante grandes pueden dar resultados grandes, y dos vectores con valores bastante chicos van a dar valores chicos. Cuando los valores relativos de estos vectores son contabilizados matemáticamente con algo llamado *normalización*, el producto de punto es una medida de cuan similares son estos vectores. Esta nocion matemática de un producto de punto de dos vectores normalizados es llamada *similitud coseno*.

### Producto Hadamard (element-wise product) <a name="Producto Hadamard (element-wise product)"></a>

Otra operación comun en la álgebra lineal que se ve en la práctica es el *producto Hadamard* (es la mejor traduccion que encontre). Esta operación toma dos vectores de la misma longitud y produce un vector de la misma longitud con cada elemento correspondiente multiplicados juntos de los dos vectores originales.

### Producto Tensor (outer product) <a name="Producto Tensor (outer product)"></a>

Esto es conocido como el "producto tensor" de dos vectores de entrada. Tomamos cada elemento de una columna del vector y lo multiplicamos por todos los elementos en la fila del vector creando una nueva fila en la matriz resultante.

# Estadística <a name="Estadistica"></a>

Ahora vamos a repasar tres conceptos básicos en estadística, estos son:

* Probabilidades
* Distribuciones
* Posibilidades

También hay otros conceptos que me gustaria resaltar de estadística descriptiva y estadística inferencial. Estadística descriptiva incluye a:

* Histogramas
* Boxplots
* Scatterplots
* Promedio
* Desviación estándar
* Coeficiente de correlación

Esto contrasta con la forma en que la estadística inferencial se ocupa de las técnicas para generalizar de una muestra a una población. A continuación, se muestran algunos ejemplos de estadísticas inferenciales:

* Valor-P
* Intervalos de confianza

La relación entre probabilidad y estadística inferencial:

* Razonamiento probabilistico de la población a la muestra (razonamiento deductivo)
* Razonamiento estadístico inferencial de la muestra a la población

Antes de que podamos entender lo que una muestra especifica nos dice sobre la población original, necesitamos entender la incertidumbre asociada a tomar una muestra de una población dada.

## Probabilidad <a name="Probabilidad"></a>

Definimos la probabilidad de un evento *E* como un número entre 0 y 1. En este contexto, el valor 0 infiere que el evento *E* no tiene chances de ocurrir, y el valor 1 significa que el evento *E* va a ocurrir con seguridad. Muchas veces veremos a la probabilidad expresada como un número decimal, pero también podemos expresarlo como un porcentaje entre 0 y 100 %. Un ejemplo podría ser una probabilidad de 0.35 expresado como 35 por ciento (0.35 x 100 = 35 por ciento).

EL ejemplo canónico de medir la probabilidad es observar cuantas veces una moneda cae en cara o en cruz (por ejemplo, 50 % de cada lado). La probabilidad del espacio muestral es siempre 1 porque esto representa todos los posibles resultados para una determinada prueba. Como podemos ver con los dos resultados ("cara" y "cruz") para la moneda lanzada, 0.50 + 0.50 = 1 porque la probabilidad total del espacio muestral siempre debe resultar en 1. Se expresa la probabilidad de un evento de la siguiente manera:

* *P(E) = 0.5* 

Y se lee como: La probabilidad del evento *E* es 0.5

---

> ### Probabilidad vs. Posibilidad <a name="Probabilidad vs. Posibilidad"></a>
Muchas veces personas que apenas comienzan en la estadística o el aprendizaje automático pueden confundir el significado de probabilidad y posibilidad. Antes de seguir, vamos a dejar en claro que:
* *P(E)* = (Chances de que *E* ocurra) / Chances totales

> Vemos esto en el ejemplo de tomar un az (de 4) de un mazo de 52 cartas donde obtenemos esto:
* 4 / 52 = 0.077

> Por lo tanto, posibilidades se define como:
* (Chances de que *E* ocurra) : (Chances de que *E* NO ocurra)

> Ahora, el ejemplo de la carta se convierte en "las posibilidades de tomar un az":
* 4 : (52 - 4) = 1 / 12 = 0.083333333333...

> La principal diferencia aqui es la eleccion del denominador (chances totales ante chances que no ocurra) haciendo que estos dos sean dos conceptos diferentes en estadística.

---

La probabilidad se encuentra en el centro de las redes neuronales y el aprendizaje profundo por su rol en extracción de características y clasificación, dos de las principales funciones de redes neuronales profundas.

---

> ### Aun más probabilidad: Bayesianos vs. Frequentistas <a name="Bayesianos vs. Frequentistas"></a>
Hay dos corrientes principales dentro de la estadística llamadas *Bayesianismo* y *frequentismo*. La diferencia básica entre las corrientes es cómo probabilidad es definida.

> Con los frequentistas, probabilidad solo tiene significado en el contexto de repetir una medición. Cuando medimos algo, veremos pequeñas variaciones dadas a los cambios en el equipo que utilizamos para recolectar datos. Si medimos algo un buen número de veces, la frequencia del valor dado indica la probabilidad de medir ese valor. 

> Con el enfoque Bayesiano, ampliamos la idea de probabilidad para cubrir aspectos de certeza sobre declaraciones. La probabilidad nos da una declaración de nuestro conocimiento sobre cuál será el resultado de la medición. Para los Bayesianos, nuestro conocimiento sobre un evento es fundamentalmente relacionado con la probabilidad.

Los frequentistas confían en muchos, muchos ensayos a ciegas de un experimento antes de hacer declaraciones sobre la estimación de una variable. Los bayesianos, por otro lado, manejan "creencias" (en términos matemáticos, "distribuciones") sobre la variable y actualizan sus creencias sobre la variable a medida que llega nueva información.

---

### Probabilidad Condicional <a name="Probabilidad Condicional"></a>

Cuando queremos saber la probabilidad de un evento basado en la existencia de otro evento, expresamos esto como una *probabilidad condicional*. Esto se expresa de la siguiente manera:
* *P* = (E|F)
donde:
* *E* es el evento cuya probabilidad es en la que estamos interesados.
* *F* es el evento que ya ocurrió.

Un ejemplo podría ser expresar como una persona con un ritmo cardiaco sano tiene una probabilidad menor de morir en una Unidad de Terapia Intensiva durante una visita hospitalaria:

*P*(Muerte en UTI|Ritmo cardiaco anormal) > *P*(Muerte en UTI| Ritmo cardiaco sano)

Algunas veces, escucharemos que el segundo evento, *F*, es referido como la condición. La probabilidad condicional es interesante en aprendizaje automático y aprendizaje profundo porque en algunas situaciones estaremos interesados en como ocurren multiples evenots y como estos interactuan. Nos interesa la probabilidad condicional en el aprendizaje automático en el contexto en que le enseñaríamos a un clasificador que 
* *P* = (E|F)
donde *E* es nuestro objetivo y *F* es un número de atributos sobre la entidad para la que estamos prediciendo *E*. Un ejemplo podría ser predecir la mortalidad (aqui, *E*) dados una medidas tomadas en una UTI para cada paciente (aqui, *F*).

---

> ### Teorema de Bayes <a name="Teorema de Bayes"></a>
>
> Una de las aplicaciones mas comunes de la probabilidad condicional es el teorema de Bayes. En el campo de la medicina, se ha visto usado para calcular la probabilidad de que un paciente que da positivo en una prueba para una enfermedad especifica en realidad tiene la enfermedad.

>Se define la formula de Bayes para dos eventos, *A* and *B*, asi:

> {% gist https://gist.github.com/ruizleandro/21666fdb7d8a6adfdd60c38263348c2a.js %}

---

### Probabilidad Posterior <a name="Probabilidad Posterior"></a>

En la estadística Bayesiana, se llama probabilidad posterior de un evento aleatorio a la probabilidad condicional que se asigna despues de considerar la evidencia. La distribución de la probabilidad posterior es definida como la distribución de la probabilidad de una cantidad desconocida condicionada por la evidencia recopilada en un experimento tratada como una variable desconocida. Vemos este concepto en acción con la función de activación softmax, en donde valores brutos de entrada son convertidos en probabilidades posteriores.

## Distribuciones <a name="Distribuciones"></a>

La distribución de la probabilidad es una especificación de la estructura estocastica de variables aleatorias. En estadística, confiamos en hacer suposiciones sobre cómo se distribuyen los datos para sacar conclusiones sobre los datos. Queremos una fórmula que especifique qué tan frecuentes son los valores de las observaciones en la distribución y como estos valores pueden ser tomados por puntos en la distribución. Una distribución comun es conocida como la *distribución normal* (también llamada la *distribución Gaussiana*, o la *curva de campana*). Queremos ajustar el dataset con una distribución porque si el dataset esta razonablemente cerca a la distribución, podemos sacar conclusiones basadas en la distribución teorica sobre como operamos con los datos.

Clasificamos distribuciones como *continuas* o *discretas*. Una distribución discreta tiene datos que pueden asumir solo ciertos valores. En una distribución continua, los datos pueden tener cualquier valor dentro de un rango. Un ejemplo de distribución continua puede ser la distribución normal. Un ejemplo de distribución discreta puede ser la distribución binomial.

La distribución normal nos permite asumir que las distribuciones muestrales de las estadísticas (por ejemplo, la "media muestral") se distribuye normalmente en condiciones específicas. La distribución normal, o *distribución Gaussiana*, fue nombrada así en honor al matemático y físico del siglo XVIII Karl Gauss. La distribución normal es definida por su promedio y su desviación estandar y tiene generalmente la misma forma a traves de todas sus variaciones. 

Otras distribuciones relevantes en el aprendizaje automático incluyen a:
* Distribución binomial
* Distribución Gaussiana inversa
* Distribución normal logarítmica

La distribución de los datos de entrenamiento en el aprendizaje automático es importante para comprender cómo vectorizar los datos para el modelado.

---

> ### Teorema del Limite Central <a name="Teorema del Limite Central"></a>
>
> Si el tamaño muestral es lo suficientemente grande, la distribución de la muestra del promedio muestral se aproxima a la distribución normal. Esto es cierto a pesar de la distribución de la población de donde las muestras fueron tomadas.
>
> Basados en este hecho, podemos realizar inferencias estadísticas usando pruebas basadas en la aproximada normalidad del promedio. Vemos que esto es cierto independientemente de si la muestra se extrae de una población que no se distribuye normalmente.
>
> En ciencias de la computación, vemos que esto se usa cuando un algoritmo extrae repetidamente muestras de un tamaño específico de una población no normal. Cuando graficamos el histograma de la población de muestra de los extractos de una distribución normal, podemos ver este efecto en acción.

---

Dado que la distribución de cola larga (como Zipf, leyes de potencia y distribuciones de Pareto) es un escenario en el que una población de alta frecuencia es seguida por una población de baja frecuencia que disminuye gradualmente de manera asintótica. Estas distribuciones fueron descubiertas por Benoit Mandelbrot en los '50s y luego popularizadas por el escritor Chris Anderson en su libro *The Long Tail: Why the Future of Business is Selling Less of More*.

Un ejemplo sería clasificar los artículos que vende un minorista, entre los cuales algunos artículos son excepcionalmente populares y vemos una gran cantidad de artículos únicos con cantidades relativamente pequeñas vendidas. Esta distribucion de rango-frequencia (principalmente de popularidad o "cuantos fueron vendidos") a veces forma leyes de poder. Desde esta perspectiva, podemos considerarlos como distribuciones de cola larga.

Vemos estas distribuciones de cola larga manifestadas en:

* Daños de un terremoto

El daño es peor a la vez que la escala del temblor incrementa, asi que el peor de los casos cambia.

* Campos de maiz

A veces vemos eventos fuera del registro histórico, mientras que nuestro modelo tiende a ajustarse a la media.

* Prediciendo fatalidad luego de visita a UTI

Podemos tener eventos muy fuera del alcance de lo que sucede dentro de la visita a la UCI que afecten la mortalidad.

Estos ejemplos son relevantes para problemas de clasificación porque la mayoría de los modelos estadísticos dependen de la inferencia de grandes cantidades de datos. Si el evento más interesante ocurre por fuera de la cola de la distribución y no tenemos representado esto en los datos de entrenamiento, nuestro modelo puede dar resultados impredecibles. Este efecto se puede mejorar en modelos no lineales como las redes neuronales. Consideraríamos esta situación como el caso especial del problema "en la muestra/fuera de muestra". Incluso un practicante experimentado del aprendizaje automático puede sorprenderse de lo bien que se desempeña un modelo en una muestra de datos de entrenamiento sesgada, pero no logra generalizar bien en la población más grande de datos.

Las distribuciones de cola larga tratan con la posibilidad real de de que ocurran eventos que son cinco veces la desviacion estandar. Debemos ser conscientes de obtener una representación decente de los eventos en nuestros datos de entrenamiento para evitar el sobreajuste de los datos de entrenamiento.

### Muestras vs. Población <a name="Muestras vs. Poblacion"></a>

La población de los datos es definida como todas las unidades que nos gustaria estudiar o utilizar como modelo para nuestro experimento. Un ejemplo puede ser definir nuestra población de estudio como "todos los programadores en Python en el estado de Tennessee".

Una muestra de los datos es un subconjunto de la población de los datos que esperamos que represente una distribución precisa de los datos sin presentar sesgo de muestra (por ejemplo, sesgar la distribución de la muestra en función de cómo muestreamos la población).

### Métodos de re-muestreo <a name="Metodos de re-muestreo"></a>

El *bootstrapping* y la *validación cruzada* (cross-validation) son dos métodos comunes de re-muestreo que son muy útiles para el aprendizaje automático. En el contexto del aprendizaje automático con bootstrapping, estamos extrayendo muestras aleatorias de otra muestra para generar una nueva muestra que tenga un equilibrio entre la cantidad de muestras por clase. Esto es útil cuando deseamos modelar contra un conjunto de datos con clases altamente desequilibradas.

La validación cruzada (también llamada *estimacion de rotacion*) es un método para estimar cuan bien un modelo generaliza en los datos de entrenamiento. En validacion cruzada dividimos los datos de entrenamiento en *N* número de divisiones y luego separamos estas porciones en grupos de entrenamiento y de prueba. Entrenamos los grupos de entrenamiento y luego evaluamos el modelo en los grupos de prueba. Luego, rotamos las divisiones entre los dos grupos todas las veces que podamos hasta agotar todas las variaciones. No hay un número magico para esta practica. También es comun ver una porción separada para usar como datos de validación durante el entrenamiento.

### Sesgo de Selección <a name="Sesgo de Seleccion"></a>

En el *sesgo de selección* estamos lidiando con un método de muestreo que no tiene una aleatorización adecuada y sesga la muestra de manera que no es representativa de la población que nos gustaria modelar. Necesitamos estar atentos al sesgo de selección cuando re-muestreamos datasets asi no se presenta sesgo en nuestros modelos que solo van a disminuir la precisión de nuestro modelo para la población total de los datos.

### Posibilidad <a name="Posibilidad"></a>

Cuando discutimos la posibilidad de que ocurra un evento pero no hacemos referencia específica a su probabilidad numérica, estamos usando el término informal, *posibilidad*. Normalmente, cuando usamos este término, estamos hablando de un evento que tiene una probabilidad razonable de ocurrir, pero aun así podría no ocurrir. También pueden haber factores que no fueron observados que pueden influenciar en el evento. Informalmente posibilidad es usado también como sinónimo de probabilidad.

---

Traduccion del libro:
Josh Paterson & Adam Gibson. (2017). *Deep Learning: A Practitioneers Approach*. USA: O'Reilly.