Curso Gratuito en Ciencia de Datos y Aprendizaje Automático con Python
Ejemplos resueltos de expectativa condicional y optimización del error cuadrático medio
Brzezniak [ 6 ] es un gran libro porque aborda la expectativa condicional a través de una secuencia de ejercicios, que es lo que estamos tratando de hacer aquí. La principal diferencia es que Brzezniak adopta un enfoque teórico de medidas más abstracto para los mismos problemas. Tenga en cuenta que no es necesario comprender la teoría de medida para las áreas avanzadas de la probabilidad, pero por lo que hemos cubierto hasta ahora, trabajando los mismos problemas en su texto usando nuestros métodos es iluminadora. Siempre ayuda tener más de una forma de resolver cualquier problema. He numerado los ejemplos correspondientes al libro y he tratado de seguir su notación.
Ejemplo
Este es el ejemplo 2.1 de Brzezniak. Se lanzan tres monedas, 10, 20 y 50 peniques. Se suman los valores de las monedas que caen cara arriba. ¿Cuál es el total esperado dado que dos monedas cayeron cara arriba? En este caso queremos calcular E (ξ | η) donde
ξ : = 10 X 10 + 20 X 20 + 50 X 50
donde X i ∈ { 0 , 1 } y donde X 10 es la variable aleatoria distribuida por Bernoulli correspondiente a la moneda de 10 peniques (y así sucesivamente). Por tanto, ξ representa el valor total de las monedas cara a cara . El η representa la condición de que solo dos de las tres monedas estén cara arriba,
η : = X 10 X 20 ( 1 - X 50 ) + ( 1 - X 10 ) X 20 X 50 + X 10 ( 1 - X 20 ) X 50
y es una función que no es cero solo cuando dos de las tres monedas caen cara arriba. Cada término triple captura cada una de estas tres posibilidades. Por ejemplo, el primer término es igual a uno cuando el 10 y el 20p son cara arriba y el 50p es cara abajo. Los términos restantes son cero.
Para calcular la expectativa condicional, queremos encontrar una función h de η que minimice el error cuadrático medio (MSE),
MSE = 1 (ξ - h (η)) 2 2 3 X ∈ { 0 , 1 } 3
donde la suma se toma sobre todos los posibles triples de resultados para { X 10 , X 20 , X 50 } porque cada una de las tres monedas tiene una probabilidad de 2 1 de salir cara.
Ahora, la pregunta se reduce a ¿cómo podemos caracterizar la función h (η) ? Tenga en cuenta que η → { 0 , 1 } por lo que h toma solo dos valores. Entonces, la condición del producto interno ortogonal es la siguiente:
ξ - h (η), η 0
Pero, debido a que solo están interesados en η = 1, esto se simplifica a
ξ - h ( 1 ), 1 0
Esto no parece tan difícil de evaluar, pero tenemos que calcular la integral sobre el conjunto donde η = 1. En otras palabras, necesitamos el conjunto de triples { X 10 , X 20 , X 50 } donde η = 1. Es decir, podemos calcular
ξ d X = h ( 1 ) d X
que es lo que hace Brzezniak. En cambio, podemos de fi nir h (η) = αη y luego encontrar α . Reescribiendo la condición ortogonal da
ξ - η, αη 0 ξ , η αη, η
dónde
ξ, η1 (ξη)
Tenga en cuenta que podemos simplemente barrer todos los triples { X 10 , X 20 , X 50 } porque la de fi nición de h (η) se pone a cero cuando η = 0 de todos modos. Todo lo que tenemos que hacer es conectar todo y resolverlo. Este tedioso trabajo es perfecto para Sympy.
code
Esto significa que
E (ξ | η) = 160 η
que podemos comprobar con una simulación rápida
code
Consejo de programación El código anterior crea un marco de datos Pandas vacío con las columnas nombradas. Las siguientes cuatro líneas asignan valores a cada una de las columnas.
El código anterior simula lanzar las tres monedas 1000 veces. Cada columna del marco de datos es 0 o 1 correspondiente a heads-down o heads-up, respectivamente. La condición es que dos de las tres monedas hayan caído mano a mano. A continuación, podemos agrupar las columnas según sus sumas. Tenga en cuenta que la suma solo puede estar en { 0 , 1 , 2 , 3 } correspondiente a 0 heads-up, 1 heads-up, etc.
code
Consejo de programación La función eval del marco de datos de Pandas toma las columnas nombradas y evalúa la fórmula dada. En el momento de escribir este artículo, solo son posibles fórmulas simples que involucren operaciones primitivas.
A continuación, podemos obtener el grupo 2 , que corresponde exactamente a dos monedas que han caído cara arriba, y luego evaluar la suma de los valores de las monedas. Finalmente, podemos tomar la media de estas sumas.
code
El resultado está cerca de 160/3 = 53,33, lo que apoya el resultado analítico. El siguiente código muestra que podemos realizar la misma simulación usando Numpy puro.
code
En este caso, usamos el producto escalar de Numpy para calcular el valor de las monedas cara arriba. La parte suma (eje = 0) == 2 selecciona las columnas que corresponden a dos monedas de cara a cara .
Otra forma más de abordar el mismo problema es renunciar a la parte de muestreo aleatorio y simplemente considerar todas las posibilidades de forma exhaustiva utilizando el módulo itertools en la biblioteca estándar de Python.
code
Tenga en cuenta que necesitamos llamar a la lista anterior para activar la iteración en it.product . Esto se debe a que el módulo itertools está basado en un generador, por lo que en realidad no realiza la iteración hasta que se repite (por lista en este caso). Esto muestra todos los posibles triples ( X 10 , X 20 , X 50 ) donde 0 y 1 indican cabeza abajo y heads-up, respectivamente. El siguiente paso es filtrar los casos que corresponden a dos monedas cara arriba .
code
A continuación, necesitamos calcular la suma de las monedas y combinar el código anterior.
code
La media de la salida es 53,33 , que es otra forma de obtener el mismo resultado. Para este ejemplo, demostramos el espectro completo de enfoques que se hicieron posibles con Sympy, Numpy y Pandas. Siempre es valioso tener múltiples formas de abordar el mismo problema y verificar el resultado.
Ejemplo
Este es el ejemplo 2.2 de Brzezniak. Se lanzan tres monedas, 10, 20 y 50 peniques como antes. ¿Cuál es la expectativa condicional de la cantidad total que muestran las tres monedas dada la cantidad total que muestran las monedas de 10 y 20 peniques solamente? Por este problema,
ξ : = 10 X 10 + 20 X 20 + 50 X 50 η : = 30 X 10 X 20 + 20 ( 1 - X 10 ) X 20 + 10 X 10 ( 1 - X 20 )
que toma cuatro valores η → { 0 , 10 , 20 , 30 } y solo considera las monedas de 10p y 20p. En contraste con el último problema, aquí estamos interesados en h (η) para todos los valores de η . Naturalmente, solo hay cuatro valores para h (η) correspondientes a cada uno de estos cuatro valores. Consideremos primero η = 10. La condición ortogonal es entonces
ξ - h ( 10 ), 10 0
El dominio para η = 10 es { X 10 = 1 , X 20 = 0 , X 50 } que podemos integrar fuera de la expectativa a continuación,
E { X 10 = 1 , X 20 = 0 , X 50 } ( ξ - h ( 10 )) 10 = 0 E { X 50 } ( 10 - h ( 10 ) + 50 X 50 ) = 0 10 - h ( 10 ) + 25 = 0
lo que da h ( 10 ) = 35. Repitiendo el mismo proceso para η ∈ { 20 , 30 } da h ( 20 ) = 45 y h ( 30 ) = 55, respectivamente. Este es el enfoque que adopta Brzezniak. Por otro lado, podemos mirar las funciones afines, h (η) = a η + by usar el cálculo de fuerza bruta .
code
Consejo de programación La función racional del código Sympy expresa un número racional que Sympy puede manipular como tal. Esto es diferente a especificar una fracción como 1/8. , que Python calcularía automáticamente como un número de punto flotante (es decir, 0,125 ). La ventaja de usar Rational es que Sympy luego puede producir números racionales como salida, que a veces son más fáciles de entender.
Esto significa que
E (ξ | η) = 25 + η
dado que η toma solo cuatro valores, { 0 , 10 , 20 , 30 } , podemos escribir esto explícitamente como
E (ξ η)=35 para η = 10(2.5.2.2)|45para η = 2055para η = 30
Alternativamente, podemos usar productos internos ortogonales para escribir las siguientes condiciones para la función de afinidad postulada:
ξ- h (η), η0
ξ- h (η), 10
Escribiendo estas fuera y resolución de una y b es tedioso y un trabajo perfecto para sympy. Comenzando con Eq. 2.5.2.3 ,
code
y luego porque E ( X i 2 ) = 1 / 2 = E ( X i ) , hacemos las siguientes sustituciones
code
Podemos hacer esto para el otro producto interno ortogonal en la ecuación. 2.5.2.4 como sigue,
Consejo de programación Debido a que los símbolos de Sympy son hash, se pueden usar como claves en los diccionarios de Python como en la función xreplace anterior.
code
Entonces, la combinación de este resultado con el anterior y resolviendo para una y b da,
code
que nuevamente nos da la solución final,
E (ξ | η) = 25 + η
La siguiente es una simulación rápida para demostrar esto. Podemos construir sobre el marco de datos de Pandas que usamos para el último ejemplo y crear una nueva columna para la suma de las monedas de 10p y 20p, como se muestra a continuación.
code
Podemos agrupar esto por los valores de esta suma,
code
Pero queremos la expectativa del valor de las monedas.
code
que está muy cerca de nuestro resultado analítico en la Ec. 2.5.2.2 .
Ejemplo
Este es el ejemplo 2.3 parafraseado de Brzezniak. Dado X distribuido uniformemente en [ 0 , 1 ] , encuentre E (ξ | η) donde
ξ ( x ) = 2 x 2 1 si x ∈ [ 0 , 1 / 3 ] η ( x ) = 2 si x ∈ ( 1 / 3 , 2 / 3 ) 0 si x ∈ ( 2 / 3 , 1 ]
Tenga en cuenta que este problema es diferente de los dos anteriores porque los conjuntos que caracterizan a η son intervalos en lugar de puntos discretos. No obstante, eventualmente tendremos tres valores para h (η) porque η → { 0 , 1 , 2 } . Para η = 1, tenemos las condiciones ortogonales,
ξ - h ( 1 ), 1 0
que se reduce a
E { x ∈ [ 0 , 1 / 3 ]} (ξ - h ( 1 )) = 0 1 3 0 ( 2 x 2 - h ( 1 )) dx = 0
y luego por la solución de este para h ( 1 ) da h ( 1 ) funciona este problema. Alternativamente, podemos usar cálculo. = 2 / 24. Esta es la forma en que Brzezniak h (η) = a + b η + c η 2 y fuerza bruta
code
Por lo tanto, recopilar este resultado da:
E (ξ | η) =
que se puede reescribir como una función por partes de x,
E (ξ | η ( x )) =
Alternativamente, podemos usar las condiciones del producto interno ortogonal directamente eligiendo h (η) = c + η b + η 2 a ,
ξ - h (η), 10 ξ - h (η), η 0 ξ - h (η), η 2 0
y luego la solución para un , b , y c .
code
Entonces, las condiciones ortogonales se vuelven,
code
Ahora, simplemente combinamos las tres ecuaciones y resolvemos los parámetros,
code
Podemos ensamblar el resultado final sustituyendo en la solución,
code
que es el mismo que nuestro resultado analítico en la Ec. 2.5.3.1 , solo en formato decimal.
Consejo de programación La definición de la función por partes de Sympy es detallada debido a la forma en que Python analiza las declaraciones de desigualdad. En el momento de escribir esto, esto no se ha reconciliado en Sympy, por lo que tenemos que usar la declaración detallada.
Para reforzar nuestro resultado, hagamos una simulación rápida usando Pandas.
code
Ahora, podemos usar la función pd.cut para agrupar los valores de x en lo siguiente,
code
Tenga en cuenta que la llamada head () anterior es solo para limitar la impresión que se muestra. Las categorías enumeradas son cada uno de los intervalos para eta que especificamos usando la lista [0,1 / 3,2 / 3,1] . Ahora que sabemos cómo usar pd.cut , podemos calcular la media de cada grupo como se muestra a continuación,
code
que está bastante cerca de nuestro resultado analítico en la Ec. 2.5.3.1 . Alternativamente, sympy.stats tiene algunas herramientas limitadas para el mismo cálculo.
code
Ejemplo
Este es el ejemplo 2.4 de Brzezniak. Encuentre E (ξ | η) para
ξ ( x ) = 2 x 2
η = 2 si 0 ≤ x < 2 1 X si 2 1 < x ≤ 1
Una vez más, X se distribuye uniformemente en el intervalo unitario. Tenga en cuenta que η ya no es discreto para todos los dominios. Para el dominio 0 < x < 1 / 2, h ( 2 ) lleva en un solo valor, por ejemplo, h 0 . Para este dominio, la condición ortogonal se convierte en,
E { η = 2 } ((ξ ( x ) - h 0 ) 2 ) = 0
que se simplifica a,
1 / 2 0 2 x 2 - h 0 d x = 0
Para el otro dominio donde { η = x } en la Ec. 2.5.4 , de nuevo usamos la condición ortogonal,
E { η = x } ((ξ ( x ) - h ( x )) x ) = 0 1( 2 x 2 - h ( x )) xd x = 0 1 / 2 h ( x ) = 2 x 2
Ensamblar la solución da,
E (ξη ( x )) = 6 2 | 2 x 2 para 2 1 < x ≤ 1
aunque este resultado no se escribe explícitamente en función de η .
Ejemplo
Este es el ejercicio 2.6 en Brzezniak. Encuentre E (ξ | η) donde
ξ ( x ) = 2 x 2 η ( x ) = 1 - | 2 x - 1 |
y X se distribuye uniformemente en el intervalo unitario. Podemos escribir esto como una función por partes en lo siguiente,
η=2 x para 0 ≤ x < 2 1 2 - 2 x para 2 1 < x ≤ 1
La discontinuidad está en x = 1 / 2. Comencemos con el dominio { η = 2 x } .
E { η = 2 x } (( 2 x 2 - h ( 2 x )) 2 x ) = 0
Podemos hacer de esto explícitamente una un cambio de variables ( η = 2 x ) que función de η dando
η 2 / 2 - h (η)
Así, para este dominio, h (η) es válido definido sobre η ∈ [ 0 , = η 2 / 2. Nótese que debido al cambio de variables, h (η) 1 ] .
Para el otro dominio donde { η = 2 - 2 x } , tenemos
E { η = 2 - 2 x } (( 2 x 2 - h ( 2 - 2 x )) ( 2 - 2 x )) = 0 ( 2 x 2 - h ( 2 - 2 x )) ( 2 - 2 x ) dx = 0
Una vez más, un cambio de variables hace que la dependencia η sea explícita usando η = 2 - 2 x que da
(( 2 - η) 2/ 2 - h (η))d η = 0
Una vez más, el cambio de variables significa que esta solución es válida sobre η ∈ [ 0 , 1 ] . Por lo tanto, debido a que ambas piezas son válidas en el mismo dominio ( η ∈ [ 0 , 1 ] ), podemos sumarlas para obtener la solución final,
h (η) = η 2 - 2 η + 2
Una simulación rápida puede ayudar a confirmar esto.
code
Tenga en cuenta que debemos tener cuidado donde aplicamos las soluciones individuales usando el índice de corte (dx <0.5) . La parte fillna asegura que el NaN predeterminado que completa las filas vacías se reemplaza por cero antes de combinar las soluciones individuales. De lo contrario, los valores de NaN circularían por el resto del cálculo. El siguiente es el código esencial que dibuja la Fig. 2.7 .
Figura Code
Consejo de programación El formateo básico de L A T E X funciona para las etiquetas de la Fig. 2.7 . El loc = 0 en la leyenda función es el código para la mejor colocación para las etiquetas en la leyenda. Las etiquetas individuales deben especificarse cuando los elementos se dibujan individualmente, de lo contrario será difícil separarlos más adelante. Esto se logra usando la palabra clave label en los comandos de trazado .
La figura 2.7 muestra los datos de ξ graficados contra η y h (η) = E (ξ | η) . Los puntos en la diagonal son puntos donde ξ y E (ξ | η) coinciden. Como lo muestran los puntos, no hay concordancia entre los datos η sin procesar y ξ . Por lo tanto, una forma de pensar en la expectativa condicional es como una transformación funcional que dobla la curva sobre la línea diagonal. La gráfica de puntos negros ξ versus E (ξ | η)y los dos coinciden en todas partes a lo largo de la línea diagonal. Esto es de esperar porque la expectativa condicional es la mejor estimación de MSE para ξ entre todas las funciones de η .
Ejemplo
Este es el ejercicio 2.14 de Brzezniak. Encuentre E (ξ | η) donde
ξ ( x ) = 2 x 2 η = 2 x Si 0 ≤ x < 2 1 2 x - 1 si 2 1 < x ≤ 1
y X se distribuye uniformemente en el intervalo unitario. Esto es lo mismo que en el último ejemplo y la única diferencia aquí es que η no es continuo en x = 2 1 , como antes. La primera parte es exactamente igual que la primera parte del ejemplo anterior, por lo que la omitiremos aquí. La segunda parte sigue el mismo razonamiento que el último ejemplo, por lo que simplemente escribiremos la respuesta para el caso { η = 2 x - 1 } como sigue
h (η) = ( 1 + η) 2 , ∀ η ∈ [ 0 , 1 ]
y luego sumarlos como antes da la solución completa:
h (η) = 1 + η + η 2
La parte interesante de este ejemplo se muestra en la Fig. 2.8 . Los puntos muestran donde η es discontinuo y, sin embargo, la solución h (η) = E (ξ | η) es igual a ξ (es decir, coincide con la diagonal). Esto ilustra el poder de la técnica del producto interno ortogonal,
Figura
que no necesita continuidad ni argumentos complejos de teoría de conjuntos para calcular soluciones. Por el contrario, les insto a considerar la solución de Brzezniak a este problema que requiere tales métodos.
La extensión de los métodos de proyección a variables aleatorias proporciona múltiples formas de calcular soluciones a problemas de expectativas condicionales. En esta sección, también elaboramos las simulaciones correspondientes utilizando una variedad de módulos de Python. Siempre es recomendable tener más de una técnica a mano para verificar las posibles soluciones. Trabajamos algunos de los ejemplos en el libro de Brzezniak usando nuestros métodos como una forma de mostrar múltiples formas de resolver el mismo problema. Comparar los métodos teóricos de medidas de Brzezniak con nuestras técnicas menos abstractas es una excelente manera de manejar ambos conceptos, que son importantes para el estudio avanzado del proceso estocástico.

0 Comments
Publicar un comentario