Astronomía

¿La matriz de covarianza no se calcula al ajustar gaussianos?

¿La matriz de covarianza no se calcula al ajustar gaussianos?


We are searching data for your request:

Forums and discussions:
Manuals and reference books:
Data from registers:
Wait the end of the search in all databases.
Upon completion, a link will appear to access the found materials.

Entonces estoy usando el básico de Astropy modelos.Gaussian1D modelo y un ajustador = ajuste.LevMarLSQfitter () para adaptarse a 3 pulsos gaussianos con un poco de ruido aleatorio añadido. El ajuste es bueno, pero cuando escribo

fitter.fit_info, de acuerdo con la documentación aquí, debería calcular automáticamente la matriz de covarianza y agregarla a fit_info, pero no lo hace, fit_info ['param_cov'] es simple Ninguno. Que esta pasando?


Modelo de mezcla gaussiana (GMM) usando el algoritmo EM desde cero

El campo del aprendizaje automático se puede dividir en tres tipos de aprendizaje: aprendizaje supervisado, aprendizaje no supervisado y aprendizaje reforzado. Mientras que el aprendizaje supervisado se puede utilizar para la clasificación o el análisis de regresión de datos, el aprendizaje no supervisado se utiliza para encontrar estructuras ocultas en los datos. El conjunto de datos utilizado en el aprendizaje no supervisado no contiene etiquetas. El análisis de componentes principales (PCA), la descomposición de valores singulares (SVD), la agrupación de K-medias, la agrupación de K-Medoide y la agrupación de expectativas-maximización (EM) son algunos de los algoritmos de aprendizaje utilizados en el aprendizaje no supervisado.

El algoritmo EM modela los datos como generados por una mezcla de gaussianos. El algoritmo EM estima los parámetros de (media y matriz de covarianza) de cada gaussiano. Cada gaussiano define un solo grupo de datos. La principal diferencia entre el algoritmo EM y K-Means es que, en el algoritmo EM, la pertenencia a un clúster es parcial.

Supongamos que tenemos una función de densidad F tal que,

entonces la gráfica de esta función de densidad y gaussiana ajustada se vería así.

En la figura anterior, muestra el gaussiano ajustado para los datos dados. Y claramente, encajaba muy mal. En general, los gaussianos tienen propiedades atractivas como aprender solo dos parámetros (μ y σ) y, por lo tanto, requieren pocos datos de entrenamiento para estimarlos. Sin embargo, para algunos datos, los gaussianos simplemente no encajan bien. Mezclas de gaussianos a menudo son una mejor solución. Todavía requieren relativamente pocos parámetros para estimar y, por lo tanto, se pueden aprender a partir de cantidades relativamente pequeñas de datos. Pueden ajustarse bastante bien a distribuciones reales de datos.

El algoritmo de maximización de expectativas consta de tres pasos. Inicialización, paso E, paso M. Primero dividimos aleatoriamente el conjunto de datos en K grupos diferentes y comenzamos con M-step para encontrar pesos, medias y matrices de covarianza. Usamos esos valores y aplicamos E-step. Seguimos recorriendo estos dos pasos hasta que se cumpla alguna condición de umbral.

Supongamos que tenemos un conjunto de datos con n filas y d atributos. Sea K el número de conglomerados. Sean x_1, x_2,…, x_n vectores d-dimensionales. Entonces, x_i = (x_i, 1, x_i, 2,…, x_i, d), donde cada x_i, j es un número real.

Inicialización

En primer lugar, inicializamos un vector de peso con tamaño K. Luego, creamos una matriz 2D que contiene los valores medios con tamaño k x d. Donde cada fila contiene el valor medio de cada gaussiano. Luego, creamos una matriz 3D para almacenar los valores de la matriz de covarianza con tamaño k x d x d. Donde cada dimensión representa una matriz de covarianza d x d para cada gaussiano. Ahora, asignamos datos al azar a cada gaussiano con una matriz de probabilidad 2D de n x k. Donde, n es la cantidad de datos que tenemos. El código de Python para la etapa de inicialización se muestra a continuación.

En el paso M, usamos las probabilidades que inicializamos anteriormente para encontrar pesos, media y matriz de covarianza de cada gaussiano usando las siguientes ecuaciones.


Contenido

Las funciones gaussianas surgen al componer la función exponencial con una función cuadrática cóncava:

Las funciones gaussianas son, pues, aquellas funciones cuyo logaritmo es una función cuadrática cóncava.

El parámetro c está relacionado con el ancho total a la mitad del máximo (FWHM) del pico de acuerdo con

Entonces, la función puede expresarse en términos de la FWHM, representada por w:

Alternativamente, el parámetro c se puede interpretar diciendo que los dos puntos de inflexión de la función ocurren en x = b - c y x = b + c.

La ancho completo a la décima parte del máximo (FWTM) para un gaussiano podría ser de interés y es

Las funciones gaussianas son analíticas y su límite cuando x → ∞ es 0 (para el caso anterior de b = 0).

Las funciones gaussianas se encuentran entre las funciones que son elementales pero carecen de antiderivadas elementales, la integral de la función gaussiana es la función de error. No obstante, sus integrales impropias sobre toda la línea real se pueden evaluar con exactitud, utilizando la integral gaussiana

Estos gaussianos están graficados en la figura adjunta.

Las funciones gaussianas centradas en cero minimizan el principio de incertidumbre de Fourier.

El producto de dos funciones gaussianas es gaussiana, y la convolución de dos funciones gaussianas también es gaussiana, siendo la varianza la suma de las varianzas originales: c 2 = c 1 2 + c 2 2 < displaystyle c ^ <2> = c_ <1> ^ <2> + c_ <2> ^ <2>>. Sin embargo, el producto de dos funciones de densidad de probabilidad gaussianas (PDF) no es en general una PDF gaussiana.

Al tomar la transformada de Fourier (unitaria, convención de frecuencia angular) de una función gaussiana con parámetros a = 1, b = 0 y c, se obtiene otra función gaussiana, con parámetros c < displaystyle c>, b = 0 y 1 c < displaystyle < frac <1>>>. [2] Entonces, en particular, las funciones gaussianas con b = 0 y c = 1 < displaystyle c = 1> se mantienen fijas mediante la transformada de Fourier (son funciones propias de la transformada de Fourier con valor propio 1). Una realización física es la del patrón de difracción: por ejemplo, una diapositiva fotográfica cuya transmitancia tiene una variación gaussiana también es una función gaussiana.

El hecho de que la función gaussiana sea una función propia de la transformada de Fourier continua nos permite derivar lo siguiente interesante [ aclaración necesaria ] identidad de la fórmula de suma de Poisson:

La integral de una función gaussiana arbitraria es

dónde F debe ser estrictamente positivo para que la integral converja.

Relación con la integral gaussiana estándar Editar

para algunas constantes reales a, b, c & gt 0 se puede calcular poniéndola en la forma de una integral gaussiana. Primero, la constante a simplemente se puede factorizar fuera de la integral. A continuación, la variable de integración se cambia de X a y = x - B .

En dos dimensiones, el poder al que mi se eleva en la función gaussiana es cualquier forma cuadrática definida negativa. En consecuencia, los conjuntos de niveles del gaussiano siempre serán elipses.

Un ejemplo particular de una función gaussiana bidimensional es

Aquí el coeficiente A es la amplitud, Xo, yo es el centro y σX, σy son los X y y se propaga de la mancha. La figura de la derecha fue creada usando A = 1, Xo = 0, yo = 0, σX = σy = 1.

El volumen bajo la función gaussiana viene dado por

En general, una función gaussiana elíptica bidimensional se expresa como

Usando esta formulación, la figura de la derecha se puede crear usando A = 1, (Xo, yo) = (0, 0), a = C = 1/2, B = 0.

Significado de los parámetros para la ecuación general Editar

Para la forma general de la ecuación, el coeficiente A es la altura del pico y (Xo, yo) es el centro de la mancha.

luego giramos la mancha en un ángulo en el sentido de las agujas del reloj θ < displaystyle theta> (para la rotación en sentido antihorario, invierta los signos en el B coeficiente). [3] Esto se puede ver en los siguientes ejemplos:

Usando el siguiente código de Octave, uno puede ver fácilmente el efecto de cambiar los parámetros

Estas funciones se utilizan a menudo en el procesamiento de imágenes y en los modelos computacionales de la función del sistema visual; consulte los artículos sobre el espacio de escala y afines shn.

Función gaussiana o supergaussiana de orden superior Editar

Se puede obtener una formulación más general de una función gaussiana con una parte superior plana y una caída gaussiana elevando el contenido del exponente a una potencia, P < displaystyle P>:

La integral de esta función gaussiana sobre todo el espacio n < displaystyle n> -dimensional se da como

De manera más general, una función gaussiana desplazada se define como

Varios campos, como la fotometría estelar, la caracterización del haz gaussiano y la espectroscopia de línea de emisión / absorción, funcionan con funciones gaussianas muestreadas y necesitan estimar con precisión los parámetros de altura, posición y ancho de la función. Hay tres parámetros desconocidos para una función gaussiana 1D (a, B, C) y cinco para una función gaussiana 2D (A x 0, y 0 σ X, σ Y) < displaystyle (Ax_ <0>, y_ <0> sigma _, sigma _)> .

El método más común para estimar los parámetros gaussianos es tomar el logaritmo de los datos y ajustar una parábola al conjunto de datos resultante. [6] [7] Si bien esto proporciona un procedimiento de ajuste de curva simple, el algoritmo resultante puede estar sesgado al ponderar excesivamente los valores de datos pequeños, lo que puede producir grandes errores en la estimación del perfil. Se puede compensar parcialmente este problema mediante la estimación de mínimos cuadrados ponderados, reduciendo el peso de los valores de datos pequeños, pero esto también puede estar sesgado al permitir que la cola del gaussiano domine el ajuste. Para eliminar el sesgo, se puede utilizar en su lugar un procedimiento de mínimos cuadrados reponderados iterativamente, en el que los pesos se actualizan en cada iteración. [7] También es posible realizar una regresión no lineal directamente sobre los datos, sin involucrar la transformación logarítmica de datos para más opciones, ver ajuste de distribución de probabilidad.

Precisión de parámetros Editar

Una vez que se tiene un algoritmo para estimar los parámetros de la función gaussiana, también es importante saber qué tan precisas son esas estimaciones. Cualquier algoritmo de estimación de mínimos cuadrados puede proporcionar estimaciones numéricas para la varianza de cada parámetro (es decir, la varianza de la altura, posición y ancho estimados de la función). También se puede utilizar la teoría de la cota de Cramér-Rao para obtener una expresión analítica para la cota inferior de las varianzas de los parámetros, dados ciertos supuestos sobre los datos. [8] [9]

  1. El ruido en el perfil medido es i.i.d. Gaussiano, o el ruido está distribuido por Poisson.
  2. El espaciado entre cada muestreo (es decir, la distancia entre los píxeles que miden los datos) es uniforme.
  3. El pico está "bien muestreado", de modo que menos del 10% del área o volumen debajo del pico (área si es un gaussiano 1D, volumen si es un gaussiano 2D) se encuentra fuera de la región de medición.
  4. El ancho del pico es mucho mayor que la distancia entre las ubicaciones de las muestras (es decir, los píxeles del detector deben ser al menos 5 veces más pequeños que el FWHM gaussiano).

y en el caso del ruido de Poisson,

donde las varianzas de los parámetros individuales vienen dadas por los elementos diagonales de la matriz de covarianza.


5 respuestas 5

Si queremos ajustar un gaussiano a un solo punto de datos usando la máxima probabilidad, obtendremos un gaussiano muy puntiagudo que "colapsa" hasta ese punto. La varianza es cero cuando solo hay un punto, que en el caso gaussiano multivariable, conduce a una matriz de covarianza singular, por lo que se llama problema de singularidad.

Cuando la varianza llega a cero, la probabilidad del componente gaussiano (fórmula 9.15) llega al infinito y el modelo se sobreajusta. Esto no ocurre cuando ajustamos solo un gaussiano a varios puntos, ya que la varianza no puede ser cero. Pero puede suceder cuando tenemos una mezcla de gaussianos, como se ilustra en la misma página de PRML.

Actualizar:
El libro sugiere dos métodos para abordar el problema de la singularidad, que son

1) restablecer la media y la varianza cuando ocurre la singularidad

2) usar MAP en lugar de MLE agregando un anterior.

Esta respuesta dará una idea de lo que está sucediendo que conduce a una matriz de covarianza singular durante el ajuste de un GMM a un conjunto de datos, por qué sucede esto y qué podemos hacer para evitarlo.

Por lo tanto, es mejor comenzar recapitulando los pasos durante el ajuste de un modelo de mezcla gaussiana a un conjunto de datos.


0. Decida cuántas fuentes / clústeres (c) desea ajustar a sus datos
1. Inicialice los parámetros medios $ mu_c $, covarianza $ Sigma_c $ y fracción_por_clase $ pi_c $ por clúster c

    Calcule para cada punto de datos $ x_i $ la probabilidad $ r_$ ese punto de datos $ x_i $ pertenece al clúster c con:

$ r_ = frac < pi_c N ( boldsymbol | boldsymbol < mu_c>, boldsymbol < Sigma_c>)> < Sigma_^ K pi_k N ( boldsymbol, boldsymbol < Sigma_k >>)> $ donde $ N ( boldsymbol | boldsymbol < mu>, boldsymbol < Sigma>) $ describe el gaussiano multivariado con:

$ r_$ nos da para cada punto de datos $ x_i $ la medida de: $ frac$ por lo tanto, si $ x_i $ está muy cerca de una c gaussiana, obtendrá un $ r_ alto$ valor para este gaussiano y valores relativamente bajos de lo contrario.

Para cada clúster c: Calcule el peso total $ m_c $ (en términos generales, la fracción de puntos asignados al clúster c) y actualice $ pi_c $, $ mu_c $ y $ Sigma_c $ usando $ r_$ con:

$ m_c = Sigma_i r_ic $
$ pi_c = frac$
$ boldsymbol < mu_c> = frac <1> Sigma_i r_ boldsymbol $
$ boldsymbol < Sigma_c> = frac <1> Sigma_i r_( boldsymbol- boldsymbol < mu_c>) ^ T ( boldsymbol- boldsymbol < mu_c>) $
Tenga en cuenta que debe utilizar los medios actualizados en esta última fórmula.

Repita iterativamente los pasos E y M hasta que la función de probabilidad logarítmica de nuestro modelo converja donde la probabilidad logarítmica se calcula con:

Entonces, ahora que hemos derivado los pasos individuales durante el cálculo, tenemos que considerar lo que significa que una matriz sea singular. Una matriz es singular si no es invertible. Una matriz es invertible si hay una matriz $ X $ tal que $ AX = XA = I $. Si no se da, se dice que la matriz es singular. Es decir, una matriz como:

no es invertible y sigue al singular. También es plausible, que si asumimos que la matriz anterior es la matriz $ A $, no podría haber una matriz $ X $ que dé punteada con esta matriz la matriz identidad $ I $ (simplemente tome esta matriz cero y el producto punto con cualquier otra matriz de 2x2 y verá que siempre obtendrá la matriz cero). Pero, ¿por qué es esto un problema para nosotros? Bueno, considere la fórmula de la normal multivariante anterior. Allí encontrará $ boldsymbol < Sigma_c ^ <-1>> $ que es el invertible de la matriz de covarianza. Dado que una matriz singular no es invertible, esto nos arrojará un error durante el cálculo.
Entonces, ahora que sabemos cómo se ve una matriz singular, no invertible, y por qué esto es importante para nosotros durante los cálculos de GMM, ¿cómo podríamos encontrarnos con este problema? En primer lugar, obtenemos esta matriz de covarianza $ boldsymbol <0> $ anterior si el Gaussiano multivariante cae en un punto durante la iteración entre el paso E y M. Esto podría suceder si tenemos, por ejemplo, un conjunto de datos en el que queremos ajustar 3 gaussianos pero que en realidad consta solo de dos clases (grupos) de modo que, hablando libremente, dos de estos tres gaussianos capturan su propio grupo mientras que el último gaussiano solo lo administra. para atrapar un solo punto en el que se asienta. Veremos cómo se ve a continuación. Pero paso a paso: suponga que tiene un conjunto de datos bidimensional que consta de dos grupos, pero no lo sabe y desea ajustar tres modelos gaussianos, es decir, c = 3. Inicializa sus parámetros en el paso E y grafica los gaussianos en la parte superior de sus datos, lo que parece poco. como (tal vez pueda ver los dos grupos relativamente dispersos en la parte inferior izquierda y superior derecha): Una vez inicializado el parámetro, realiza iterativamente los pasos E, T. Durante este procedimiento, los tres gaussianos deambulan y buscan su lugar óptimo. Si observas los parámetros del modelo, es decir $ mu_c $ y $ pi_c $ observarás que convergen, que después de cierto número de iteraciones ya no cambiarán y con ello el correspondiente gaussiano ha encontrado su lugar en el espacio. En el caso de que tenga una matriz de singularidad, encontrará algo. como: Donde he rodeado el tercer modelo gaussiano con rojo. Como puede ver, este gaussiano se encuentra en un solo punto de datos mientras que los otros dos reclaman el resto. Aquí tengo que notar que para poder dibujar la figura así ya he usado la regularización de covarianza, que es un método para evitar matrices de singularidad y se describe a continuación.

Ok, pero ahora todavía no sabemos por qué y cómo nos encontramos con una matriz de singularidad. Por lo tanto, tenemos que mirar los cálculos de $ r_$ y $ cov $ durante los pasos E y M. Si miras el $ r_$ fórmula de nuevo:
$ r_ = frac < pi_c N ( boldsymbol | boldsymbol < mu_c>, boldsymbol < Sigma_c>)> < Sigma_^ K pi_k N ( boldsymbol, boldsymbol < Sigma_k >>)> $ ves que ahí el $ r_

Motivación y ejemplo simple: ajustar datos al perfil gaussiano¶

Comencemos con un ejemplo simple y común de ajuste de datos a un pico gaussiano. Como veremos, hay una clase GaussianModel incorporada que puede ayudar a hacer esto, pero aquí crearemos la nuestra. Comenzamos con una definición simple de la función del modelo:

Queremos usar esta función para ajustarla a los datos (y (x) ) representados por las matrices y y x. Con scipy.optimize.curve_fit, esto sería:

Es decir, creamos datos, hacemos una suposición inicial de los valores del modelo y ejecutamos scipy.optimize.curve_fit con la función del modelo, las matrices de datos y las suposiciones iniciales. Los resultados devueltos son los valores óptimos para los parámetros y la matriz de covarianza. Es simple y útil, pero pierde los beneficios de lmfit.

Con lmfit, creamos un modelo que envuelve la función del modelo gaussiano, que genera automáticamente la función residual apropiada y determina los nombres de los parámetros correspondientes a partir de la propia firma de la función:

Como puede ver, el modelo gmodel determinó los nombres de los parámetros y las variables independientes. De forma predeterminada, el primer argumento de la función se toma como la variable independiente, mantenido en independent_vars, y el resto de los argumentos posicionales de las funciones (y, en ciertos casos, los argumentos de palabras clave, ver más abajo) se utilizan para los nombres de los parámetros. Por lo tanto, para la función gaussiana anterior, la variable independiente es x, y los parámetros se denominan amp, cen y wid, y todos se toman directamente de la firma de la función modelo. Como veremos a continuación, puede modificar la asignación predeterminada de variables / argumentos independientes y especificar usted mismo cuál es la variable independiente y qué argumentos de función deben identificarse como nombres de parámetros.

Los parámetros son no creado cuando se crea el modelo. El modelo sabe cómo se deben nombrar los parámetros, pero nada sobre la escala y el rango de sus datos. Normalmente tendrá que hacer estos parámetros y asignar valores iniciales y otros atributos. Para ayudarlo a hacer esto, cada modelo tiene un método make_params () que generará parámetros con los nombres esperados:

Esto crea los parámetros pero no les da automáticamente valores iniciales ya que no tiene idea de cuál debería ser la escala. Puede establecer valores iniciales para parámetros con argumentos de palabras clave para make_params ():

o asignarlos (y otras propiedades de los parámetros) después de que se haya creado la clase Parameters.

Un modelo tiene varios métodos asociados. Por ejemplo, se puede usar el método eval () para evaluar el modelo o el método fit () para ajustar los datos a este modelo con un objeto Parameter. Ambos métodos pueden tomar argumentos de palabras clave explícitas para los valores de los parámetros. Por ejemplo, se podría usar eval () para calcular la función predicha:

Es cierto que esta es una forma un poco larga de calcular una función gaussiana, dado que podría haber llamado directamente a su función gaussiana. Pero ahora que el modelo está configurado, podemos usar su método fit () para ajustar este modelo a los datos, como con:

Poner todo junto, incluido en la carpeta de ejemplos con el código fuente, es:

que es bastante compacto y al grano. El resultado devuelto será un objeto ModelResult. Como veremos a continuación, esto tiene muchos componentes, incluido un método fit_report (), que mostrará:

Como muestra el script, el resultado también tendrá init_fit para el ajuste con los valores de parámetro iniciales y un best_fit para el ajuste con los valores de parámetro de mejor ajuste. Estos se pueden utilizar para generar la siguiente gráfica:

que muestra los datos en puntos azules, el mejor ajuste como una línea roja sólida y el ajuste inicial como una línea negra discontinua.

Tenga en cuenta que el ajuste del modelo se realizó realmente con:

Estas líneas expresan claramente que queremos convertir la función gaussiana en un modelo de ajuste y luego ajustar los datos de (y (x) ) a este modelo, comenzando con valores de 5 para amp, 5 para cen y 1 para wid. Además, se incluyen todas las demás características de lmfit: Los parámetros pueden tener límites y restricciones y el resultado es un objeto rico que se puede reutilizar para explorar el ajuste del modelo en detalle.


De los gaussianos multivariantes a la inferencia

Ahora que hemos cubierto las propiedades de los gaussianos, podemos hablar sobre cómo funcionan los médicos de cabecera. En primer lugar, recordemos que tenemos una tarea general de regresión, tenemos un conjunto de datos de trenes de (x, y) pares. Como he dicho anteriormente:

Un proceso gaussiano está completamente especificado por la función media μ y la función del kernel k

La siguiente ecuación solo dice que la distribución de probabilidad de la función f se distribuye de acuerdo con el GP:

La función del kernel será una medida de similitud de puntos de datos, o mejor dicho k (X₁, X₂) nos dice qué tan cerca están y₁ y y₂. En esencia, al especificar la función media y la función del núcleo, estamos especificando la distribución previa sobre un número infinito de funciones. Podemos pensar en esta distribución GP como un marcador de posición para una normal multivariada, porque al final, solo trataremos con distribuciones normales multivariadas, pero la forma en que calculamos la media y la covarianza de esta distribución normal multivariada es la belleza de Procesos gaussianos. Esto puede ser más claro cuando expandimos un poco la ecuación anterior:

Podemos ver que para calcular el vector medio y la matriz de covarianza de esta distribución normal multivariante, solo necesitamos aplicar la función media a cada punto en el conjunto de trenes y la función de kernel a todos los pares de puntos en el conjunto de trenes, que produce la matriz de covarianza. Vale la pena señalar aquí que, obviamente, no podemos usar ninguna función como función del núcleo, la matriz de covarianza tiene que ser definida positiva, por lo que la función del núcleo debe elegirse en consecuencia.

Me gustaría volver a centrar su atención ahora en la frase "distribución sobre funciones”. ¿Por qué lo vemos así? Para que esto sea más claro, mire la figura a continuación. La X El eje define las variables de entrada y el eje y el valor de la función. En azul, vemos las diferentes realizaciones de la función para un valor específico de X. Una línea roja especifica una realización de muestra de la función sobre X. ¿Cómo realizaríamos tal muestreo? Está bastante claro a partir de la definición de GP. Podemos simplemente muestrear de la distribución conjunta sobre variables un cierto conjunto de Y, es decir f (X). Dijimos que la distribución marginal de un gaussiano multivariado también es gaussiano, esta es la razón por la que obtenemos múltiples valores f (x) del mismo X, porque X se distribuye normalmente.

Así es como se vería si tuviéramos más datos, más xs, nuevamente, es solo un muestreo de una distribución conjunta definida por el Gaussiano multivariado.

Pero, por supuesto, todavía no hicimos ninguna inferencia adecuada, ¿verdad? Acabamos de ver que podemos muestrear un número infinito de funciones y queremos predecir el valor de una función en un punto desconocido. X. Esto es exactamente lo que logramos mediante el condicionamiento, supongamos que nuestro conjunto de datos de trenes contiene las variables x₂ y X₄. Y queremos predecir el valor de la función en x₁ y x₃. Lo lógico es condicionar los valores conocidos. Al condicionar reducimos la incertidumbre (posibles valores de función F) en los puntos cercanos. Lo que realmente significa "cerrar" está definido por la función del núcleo.

O se muestra con un poco más de funciones (al decir más, no hay un número fijo de funciones, simplemente sacamos N funciones del conjunto infinito de funciones):

Quizás se esté preguntando: "Pero espere, estamos condicionando algún tipo de valores f (x), pero f (x) ni siquiera aparece en la definición de distribución ”. Admito que, cuando se habla de médicos de cabecera, esto puede resultar confuso. Pero, de hecho, f (x), es decir y, aparece. Aparece en forma cerrada soluciones a la media y covarianza de la distribución condicional y los puntos de predicción. Las ecuaciones se ven así (en el caso de que nuestra función media μ sea 0):

Como se puede ver, y es esencial para calcular la nueva media, que es básicamente el punto en el que tenemos más confianza en nuestra predicción. Este es el caso en el que no asumimos datos ruidosos. Pero, ¿y si nuestros datos son realmente ruidosos? Tales casos son bastante estándar cuando se trabaja con aplicaciones robóticas, a menudo asumimos que el ruido se distribuye normalmente con una media de 0. El cambio en las ecuaciones condicionales es mínimo, como puede ver, solo agregamos varianza diagonal a la matriz de diseño. Intuitivamente, ¿qué significa esto? Significa que estamos aumentando la incertidumbre de nuestros marginales, que son exactamente nuestros puntos de datos de entrenamiento, y esto es lo que queremos hacer en presencia de ruido.

Ahora podemos graficar la distribución condicional sobre funciones después de hacer este pequeño fragmento de álgebra lineal:


Aplicaciones prácticas de los modelos de mezcla gaussiana

El procesamiento de imágenes digitales es una técnica para realizar operaciones específicas en una imagen, con el fin de obtener una imagen mejorada o extraer información útil de ella. La segmentación de imágenes, una fase importante en el procesamiento de imágenes, es el proceso de dividir una imagen en conjuntos de píxeles que corresponden a diferentes objetos o partes de objetos. El objetivo de la segmentación de imágenes es simplificar el procesamiento adicional para las fases posteriores del procesamiento de imágenes digitales. Es ampliamente utilizado en la detección de objetos, comprensión de las interacciones entre objetos, compresión de imágenes, edición de imágenes, etc.

Usando GMM, es posible realizar una segmentación de imágenes. A medida que aumenta el número de componentes en el modelo, la imagen particionada se vuelve más definida. En la siguiente parte, tomamos una imagen jpeg de muestra de un automóvil y la dividimos en tres componentes usando GMM en Python.

Para esta parte, se requieren los paquetes opencv-python, numpy y scikit-learn.

Cambie la forma de la imagen multiplicando las 2 primeras dimensiones y manteniendo la última dimensión como está.

Defina el modelo GMM especificando el número de componentes y el tipo de covarianza. En este caso, hemos dividido la imagen en 3 componentes y hemos utilizado el tipo de covarianza "vinculado". La imagen particionada se almacena como "output.jpg" usando el método imwrite


Esta página ahora está obsoleta. Para calcular errores en los flujos, consulte el modelo cflux.

Entonces, en su lugar, usamos un método para seleccionar conjuntos de parámetros que los extraerá de una distribución de probabilidad que debería aproximarse a los contornos de confianza. Luego podemos calcular el flujo para cada conjunto de parámetros, ordenar los flujos y determinar el rango en el que caen el 90% de los valores. Entonces, esta es una estimación para la región de confianza del 90%. Por lo tanto, solo queda encontrar una manera de seleccionar conjuntos de parámetros apropiados. Usamos la matriz de covarianza. En la posición de mejor ajuste, las primeras derivadas del estadístico de ajuste con respecto a los parámetros son, por definición, cero. La matriz de las segundas derivadas se denomina matriz de covarianza (y su inversa a menudo se denomina matriz de información de Fisher). Dibujamos conjuntos de parámetros de una distribución Normal multidimensional cuya media está dada por el mejor ajuste y cuya sigma es la matriz de covarianza. Es importante señalar que se trata de una aproximación y si el estadístico de ajuste depende de manera complicada de los valores de los parámetros, puede ser muy erróneo. Estamos desarrollando un mejor algoritmo basado en el uso de Markov Chain Monte Carlo.

Calcular el error en el flujo de parte del modelo

Como ejemplo, hemos proporcionado una secuencia de comandos que se puede utilizar para calcular el intervalo de confianza del 90% en el flujo no absorbido, es decir, el flujo para el modelo sin un componente de absorción galáctica inicial. Para usar este script, descárguelo dentro de xspec: Esto ejecuta 500 realizaciones de los parámetros, establece el primer parámetro en cero (es decir, apaga la absorción galáctica), luego calcula el flujo. <> Es una lista Tcl de parámetros para poner a cero para que otros componentes se puedan apagar poniendo a cero sus normalizaciones.

¡HEASARC está contratando! - Ahora se aceptan solicitudes para que un científico con gran experiencia e interés en los aspectos técnicos de la investigación astrofísica trabaje en HEASARC en el Centro de Vuelo Espacial Goddard de la NASA (GSFC) en Greenbelt, MD. Consulte el registro de trabajos de AAS para obtener todos los detalles.


1 respuesta 1

Primero, recomendaría usar lmfit.models.GaussianModel, y no usar set_param_hint (), solo sea explícito, no inteligente, como con:

Las incertidumbres en los parámetros de mejor ajuste se estiman observando cómo cambiar los valores de los parámetros cambiaría el ajuste. Con chi-cuadrado definido como la suma de cuadrados de la matriz residual (ajuste de datos) / data_uncertainty, las incertidumbres para cada parámetro (y las correlaciones parámetro-parámetro) se estiman como valores que aumentan el chi-cuadrado en 1. Hay muchos recursos más detallados disponibles sobre cómo funciona el ajuste por mínimos cuadrados no lineales.


Procesos gaussianos para tontos

Siempre me sorprende cómo puedo escuchar una declaración pronunciada en el espacio de unos segundos sobre algún aspecto del aprendizaje automático que luego me lleva incontables horas entender. Escuché por primera vez sobre los procesos gaussianos en un episodio del podcast Talking Machines y pensé que sonaba como una buena idea. Rápidamente me compré una copia del texto clásico sobre el tema, Procesos gaussianos para el aprendizaje automático de Rasmussen y Williams, pero mi tenue comprensión del enfoque bayesiano del aprendizaje automático significó que me quedé perplejo con bastante rapidez. Eso y rsquos cuando comencé el viaje que describí en mi último post, Desde ambos lados ahora: la matemática de la regresión lineal.

Los procesos gaussianos (GP) son el siguiente paso natural en ese viaje, ya que proporcionan un enfoque alternativo a los problemas de regresión. Esta publicación tiene como objetivo presentar los aspectos esenciales de los médicos de cabecera sin ir demasiado lejos en los diversos agujeros de conejo a los que pueden llevarlo (por ejemplo, comprender cómo obtener la raíz cuadrada de una matriz).

Recuerde que en la configuración de regresión lineal simple, tenemos una variable dependiente y que asumimos que se puede modelar como una función de una variable independiente x, es decir, $ y = f (x) + epsilon $ (donde $ epsilon $ es la error irreducible) pero asumimos además que la función $ f $ define una relación lineal y, por lo tanto, estamos tratando de encontrar los parámetros $ theta_0 $ y $ theta_1 $ que definen la intersección y la pendiente de la línea respectivamente, es decir, $ y = theta_0 + theta_1x + epsilon $. La regresión lineal bayesiana proporciona un enfoque probabilístico para esto al encontrar una distribución sobre los parámetros que se actualiza cada vez que se observan nuevos puntos de datos. El enfoque de GP, por el contrario, es un no paramétrico enfoque, en el sentido de que encuentra una distribución sobre el posible funciones $ f (x) $ que sean consistentes con los datos observados. Al igual que con todos los métodos bayesianos, comienza con una distribución previa y la actualiza a medida que se observan los puntos de datos, lo que produce la distribución posterior sobre las funciones.

Para hacerse una idea de lo que esto significa, piense en la línea MCO simple definida por una intersección y una pendiente que hace todo lo posible para ajustarse a sus datos.

El problema es que esta línea simplemente no es adecuada para la tarea, ¿verdad? Realmente te gusta una línea curva: en lugar de solo 2 parámetros $ theta_0 $ y $ theta_1 $ para la función $ hat = heta_0 + heta_1x$ it looks like a quadratic function would do the trick, i.e. $ hat = heta_0 + heta_1x + heta_2x^2 $. Now we&rsquod need to learn 3 parameters. But what if we don&rsquot want to specify upfront how many parameters are involved? We&rsquod like to consider every possible function that matches our data, with however many parameters are involved. That&rsquos what non-parametric means: it&rsquos not that there aren&rsquot parameters, it&rsquos that there are infinitely many parameters.

But of course we need a prior before we&rsquove seen any data. What might that look like? Well, we don&rsquot really want ALL THE FUNCTIONS, that would be nuts. So let&rsquos put some constraints on it. First of all, we&rsquore only interested in a specific domain &mdash let&rsquos say our x values only go from -5 to 5. Now we can say that within that domain we&rsquod like to sample functions that produce an output whose mean is, say, 0 and that are not too wiggly. Here&rsquos an example of a very wiggly function:

And here&rsquos a much smoother function:

There&rsquos a way to specify that smoothness: we use a covariance matrix to ensure that values that are close together in input space will produce output values that are close together. This covariance matrix, along with a mean function to output the expected value of $ f(x) $ defines a Gaussian Process.

Here&rsquos how Kevin Murphy explains it in the excellent textbook Machine Learning: A Probabilistic Perspective:

A GP defines a prior over functions, which can be converted into a posterior over functions once we have seen some data. Although it might seem difficult to represent a distrubtion over a function, it turns out that we only need to be able to define a distribution over the function&rsquos values at a finite, but arbitrary, set of points, say ( x_1,dots,x_N ) . A GP assumes that ( p(f(x_1),dots,f(x_N)) ) is jointly Gaussian, with some mean $ mu(x) $ and covariance $ sum(x) $ given by $ sum_ = k(x_i, x_j) $, where k is a positive definite kernel function. The key idea is that if ( x_i ) and ( x_j) are deemed by the kernel to be similar, then we expect the output of the function at those points to be similar, too.

The mathematical crux of GPs is the multivariate Gaussian distribution.

It&rsquos easiest to imagine the bivariate case, pictured here. The shape of the bell is determined by the covariance matrix. If we imagine looking at the bell from above and we see a perfect circle, this means these are two independent normally distributed variables &mdash their covariance is 0. If we assume a variance of 1 for each of the independent variables, then we get a covariance matrix of $ Sigma = egin 1 & 0 0 & 1 end $. The diagonal will simply hold the variance of each variable on its own, in this case both 1&rsquos. Anything other than 0 in the top right would be mirrored in the bottom left and would indicate a correlation between the variables. This would give the bell a more oval shape when looking at it from above.

If we have the joint probability of variables $ x_1 $ and $ x_2 $ as follows:

it is possible to get the conditional probability of one of the variables given the other, and this is how, in a GP, we can derive the posterior from the prior and our observations. It&rsquos just that we&rsquore not just talking about the joint probability of two variables, as in the bivariate case, but the joint probability of the values of $ f(x) $ for all the $ x $ values we&rsquore looking at, e.g. real numbers between -5 and 5.

So, our posterior is the joint probability of our outcome values, some of which we have observed (denoted collectively by $f$ ) and some of which we haven&rsquot (denoted collectively by $f_<*>$ ):

Here, $K$ is the matrix we get by applying the kernel function to our observed $x$ values, i.e. the similarity of each observed $x$ to each other observed $x$ . $K_<*>$ gets us the similarity of the training values to the test values whose output values we&rsquore trying to estimate. $K_<**>$ gives the similarity of the test values to each other.

I&rsquom well aware that things may be getting hard to follow at this point, so it&rsquos worth reiterating what we&rsquore actually trying to do here. There are some points $x$ for which we have observed the outcome $f(x)$ (denoted above as simply $f$ ). There are some points $x_<*>$ for which we would like to estimate $f(x_<*>)$ (denoted above as $f_<*>$ ). So we are trying to get the probability distribution $p(f_ <*>| x_<*>,x,f)$ and we are assuming that $f$ and $f_<*>$ together are jointly Gaussian as defined above.

About 4 pages of matrix algebra can get us from the joint distribution $p(f, f_<*>)$ to the conditional $p(f_ <*>| f)$ . I am conveniently going to skip past all that but if you&rsquore interested in the gory details then the Kevin Murphy book is your friend. At any rate, what we end up with are the mean, $mu_<*>$ and covariance matrix $Sigma_<*>$ that define our distribution $f_ <*>sim mathcal, Sigma_<*> ight) >$

Now we can sample from this distribution. Recall that when you have a univariate distribution $x sim mathcal$ you can express this in relation to standard normals, i.e. as $x sim mu + sigma(mathcal) $ . And generating standard normals is something any decent mathematical programming language can do (incidently, there&rsquos a very neat trick involved whereby uniform random variables are projected on to the CDF of a normal distribution, but I digress&hellip) We need the equivalent way to express our multivariate normal distribution in terms of standard normals: $f_ <*>sim mu + Bmathcal<(0, I)>$ , where B is the matrix such that $BB^T = Sigma_<*>$ , i.e. the square root of our covariance matrix. We can use something called a Cholesky decomposition to find this.

OK, enough math &mdash time for some code. The code presented here borrows heavily from two main sources: Nando de Freitas&rsquo UBC Machine Learning lectures (code for GPs can be found here) and the PMTK3 toolkit, which is the companion code to Kevin Murphy&rsquos textbook Machine Learning: A Probabilistic Perspective.

Below we define the points at which our functions will be evaluated, 50 evenly spaced points between -5 and 5. We also define the kernel function which uses the Squared Exponential, a.k.a Gaussian, a.k.a. Radial Basis Function kernel. It calculates the squared distance between points and converts it into a measure of similarity, controlled by a tuning parameter. Note that we are assuming a mean of 0 for our prior.

Note that the K_ss variable here corresponds to $K_<**>$ in the equation above for the joint probability. It will be used again below, along with $K$ and $K_<*>$

Now we&rsquoll observe some data. The actual function generating the $y$ values from our $x$ values, unbeknownst to our model, is the $sin$ function. We generate the output at our 5 training points, do the equivalent of the above-mentioned 4 pages of matrix algebra in a few lines of python code, sample from the posterior and plot it.

See how the training points (the blue squares) have &ldquoreined in&rdquo the set of possible functions: the ones we have sampled from the posterior all go through those points. The dotted red line shows the mean output and the grey area shows 2 standard deviations from the mean. Note that this is 0 at our training points (because we did not add any noise to our data). Also note how things start to go a bit wild again to the right of our last training point $x = 1$ &mdash that won&rsquot get reined in until we observe some data over there.

This has been a very basic intro to Gaussian Processes &mdash it aimed to keep things as simple as possible to illustrate the main idea and hopefully whet the appetite for a more extensive treatment of the topic such as can be found in the Rasmussen and Williams book.


Ver el vídeo: Covarianza en Excel (Diciembre 2022).