Tengo un array numpy con m columnas y n filas, siendo las columnas dimensiones y las filas puntos de datos.
Ahora tengo que calcular los valores del núcleo para cada combinación de puntos de datos.
Para un núcleo lineal $K(\mathbf{x}_i,\mathbf{x}_j) = \langle \mathbf{x}_i,\mathbf{x}_j \rangle$ Simplemente puedo hacer dot(X,X.T)
¿Cómo puedo calcular eficazmente todos los valores del núcleo gaussiano? $K(\mathbf{x}_i,\mathbf{x}_j) = \exp{-\frac{\|\mathbf{x}_i-\mathbf{x}_j\|_2^2}{s^2}}$ con un determinado s ?
1 votos
Bueno, si no te importa demasiado el aumento de un factor de dos en los cálculos, siempre puedes hacer $\newcommand{\m}{\mathbf} \m S = \m X \m X^T$ y luego $K(\m x_i, \m x_j ) = \exp( - (S_{ii} + S_{jj} - 2 S_{ij})/s^2 )$ donde, por supuesto, $S_{ij}$ es el $(i,j)$ elemento de $\m S$ . Esto es probablemente no tampoco es el más estable numéricamente.
2 votos
(Años más tarde) para grandes matrices dispersas, véase sklearn.metrics.pairwise.pairwise_distances.html en scikit-learn .