Hoy he estado en un seminario y el profesor ha dicho que la distribución gaussiana es isótropa. ¿Qué significa que una distribución sea isótropa? Parece que está utilizando esta propiedad para la pseudo-independencia de los vectores donde cada entrada se muestrea a partir de la distribución normal.
Respuestas
¿Demasiados anuncios?TLDR: Una gaussiana isotrópica es aquella cuya matriz de covarianza está representada por la matriz simplificada $\Sigma = \sigma^{2}I$ .
Algunas motivaciones:
Consideremos la distribución gaussiana tradicional:
$$ \mathcal{N}(\mu,\,\Sigma) $$
donde $\mu$ es la media y $\Sigma$ es la matriz de covarianza.
Considere cómo crece el número de parámetros libres en esta gaussiana a medida que aumenta el número de dimensiones.
$\mu$ tendrá un crecimiento lineal. $\Sigma$ ¡tendrá un crecimiento cuadrático!
Este crecimiento cuadrático puede ser muy costoso computacionalmente, por lo que $\Sigma$ suele restringirse como $\Sigma = \sigma^{2}I$ donde $\sigma^{2}I$ es una varianza escalar multiplicada por una matriz de identidad.
Tenga en cuenta que esto da como resultado $\Sigma$ donde todas las dimensiones son independientes y donde la varianza de cada dimensión es la misma. Por tanto, la gaussiana será circular/esférica.
Descargo de responsabilidad: no soy matemático y acabo de enterarme de esto, así que puede que me falten algunas cosas :)
Espero que le sirva de ayuda.
Me gustaría añadir algo visual a las otras respuestas.
Cuando las variables son independientes, es decir, la distribución es isótropa, significa que la distribución está alineada con el eje.
Por ejemplo, para $\Sigma = \begin{pmatrix}1 & 0 \\ 0 & 30\end{pmatrix}$ obtendrías algo como esto:
Entonces, ¿qué ocurre cuando se no ¿isotrópico? Por ejemplo, cuando $\Sigma = \begin{pmatrix}1 & 15 \\ 15 & 30\end{pmatrix}$ la distribución aparece "girada", ya no alineada con los ejes:
Tenga en cuenta que esto es sólo un ejemplo, el $\Sigma$ anterior no es válido, ya que no es PSD.
Código:
import numpy as np
from matplotlib import pyplot as plt
pts = np.random.multivariate_normal([0, 0], [[1,15],[15,31]], size=10000, check_valid='warn')
plt.scatter(pts[:, 0], pts[:, 1], s=1)
plt.xlim((-30,30))
plt.ylim((-30,30))
No soy un estudiante de matemáticas pero intentaré describir lo que yo entiendo: una distribución gaussiana isotrópica significa una distribución gaussiana multidimensional con su matriz de varianza como una matriz identidad multiplicada por el mismo número en su diagonal. Cada dimensión puede verse como una distribución gaussiana unidimensional independiente (no existe covarianza).
Gracias a Tomoiaga, valiosa oportunidad de aprendizaje. Explicación para psd
en su respuesta.
en relación con material del curso Aprendizaje profundo probabilístico con TensorFlow 2 en coursera.
la definición de semidefinido positivo:
Una matriz simétrica $M \in \mathbb{R}^{d\times d}$ es positivo semidefinida si cumple $b^TMb \ge 0$ para todo $b\in\mathbb{R}^d$ . Si, además, tenemos $b^TMb = 0 \Rightarrow > b=0$ entonces $M$ es positiva definida.
En una palabra: la matriz de covarianza válida debe ser simetría y positiva (semi)definida . Sin embargo, ¿cómo comprobar el $\Sigma$ satisfecho con el requisito?
Aquí viene La descomposición de Cholesky
Para toda matriz simétrica positiva-definida de valor real $M$ existe una única matriz de diagonal inferior $L$ que tiene entradas diagonales positivas para las que
\begin{equation} LL^T = M \end{equation} Esto se denomina Descomposición Cholesky de $M$
Construyamos algunos códigos.
Dada una matriz psd $ \Sigma = \begin{bmatrix} 10 & 5 \\ 5 & 10 \end{bmatrix}$ y un no-psd $ \Sigma = \begin{bmatrix} 10 & 11 \\ 11 & 10 \end{bmatrix}$ como la matriz de covarianza
sigma = [[10., 5.],[5., 10.]]
np.linalg.cholesky(sigma)
Salida:
<tf.Tensor: shape=(2, 2), dtype=float32, numpy= array([[3.1622777, 0. ],
[1.5811388, 2.738613 ]], dtype=float32)>
bad_sigma = [[10., 11.], [11., 10.]]
try:
scale_tril = tf.linalg.cholesky(bad_sigma)
except Exception as e:
print(e)
Salida:
Cholesky decomposition was not successful. The input might not be valid.
Para mayor comodidad, un matriz triangular inferior es más fácil de crear.
Por último, la demostración con gaussianas isótropas y no isótropas.
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
## isotropic normal
sigma = [[1., 0.],[0., 1.]]
lower_triangular = np.linalg.cholesky(sigma)
print(lower_triangular)
sigma = np.matmul(lower_triangular, np.transpose(lower_triangular))
##
bivariate_normal = np.random.multivariate_normal([0, 0], sigma, size=10000, check_valid='warn')
x1 = bivariate_normal[:, 0]
x2 = bivariate_normal[:, 1]
sns.jointplot(x1, x2, kind='kde', space=0, color='b')
# #non-isotropic normal
# sigma = [[1. , 0.6], [0.6, 1.]]
4 votos
En general, una distribución normal multivariante puede ser anisótropa en función de la matriz de covarianza. Es evidente que ha habido algún error de comunicación.