Tengo una matriz numpy con m columnas yn filas, siendo las columnas dimensiones y los puntos de datos de las filas.
Ahora necesito calcular los valores del núcleo para cada combinación de puntos de datos.
Para una lineal del núcleo  puedo simplemente hacerdot(X,X.T)
                    
                        python
                                kernel-trick
                                numpy
                                
                    
                    
                        Peter Smit
fuente
                
                fuente

Respuestas:
Creo que el problema principal es obtener las distancias por pares de manera eficiente. Una vez que tienes eso, el resto es elemento sabio.
Para hacer esto, probablemente quieras usar scipy. La función
scipy.spatial.distance.pdisthace lo que necesita yscipy.spatial.distance.squareformposiblemente le facilitará la vida.Entonces, si quieres la matriz del núcleo, haz
La documentación se puede encontrar aquí .
fuente
K = scipy.exp(-pairwise_dists**2 / s**2)pdistes muy simple: es solo un bucle implementado en C que calcula directamente las distancias de la manera obvia , el bucle se realiza aquí ; no hay vectorización sofisticada ni nada más allá de lo que el compilador pueda lograr automáticamente.Como una pequeña adición a la respuesta de bayerj, la
pdistfunción de scipy puede calcular directamente las normas euclidianas cuadráticas llamándolas comopdist(X, 'sqeuclidean'). El código completo se puede escribir de manera más eficiente comofuente
pairwise_sq_dists = cdist(X, X, 'sqeuclidean')que da lo mismo.También puedes escribir forma cuadrada a mano:
PD pero esto funciona un 30% más lento
fuente
einsumllamada para suX2.que es igual a
Puede calcular efectivamente el RBF a partir de la nota del código anterior que indica que el valor gamma es 1, ya que es una constante, la que solicitó también es la misma constante.
fuente
Creo que esto ayudará:
fuente