Gracias por el A2A.
Usaría el núcleo polinomial no homogéneo para hacer esto, que se da como:
[matemáticas] k_d (x, x ‘) = (x ^ Tx’ + c) ^ d [/ matemáticas]
- ¿Qué enfoques utilizaron los participantes en Quora ML CodeSprint 2013?
- ¿Cómo deberíamos acelerar el procesamiento de datos del lenguaje R?
- ¿Cuáles son las ventajas y desventajas de cada método de regresión no lineal existente?
- ¿Cómo se asegura que el aprendizaje automático no aprenda la correlación cuando no hay causalidad, especialmente para la predicción?
- ¿Qué tipo de algoritmo de aprendizaje profundo utiliza IBM Watson para la clasificación del lenguaje natural? ¿Utiliza CNN o RNN?
Para una transformación polinómica de orden [math] d [/ math]:
[matemáticas] \ phi_d (x) = [a_0, \ a_1x ^ 1, \ a_2x ^ 2, \…, \ a_dx ^ d] ^ T [/ matemáticas]
Es sencillo demostrar que:
[matemáticas] \ phi_d (x) ^ T \ phi_d (x ‘) = K (x, x’) = (x ^ Tx ‘+ c) ^ d [/ matemáticas]
para alguna constante apropiada [matemáticas] c [/ matemáticas]. Así que aquí hay una función rápida de Matlab que acepta una matriz de datos [math] X \ in \ mathbb {R} ^ {n \ times p} [/ math] ([math] n [/ math] ejemplos en dimensión [math] p [ / math]), un orden polinomial [math] d [/ math] y un hiperparámetro [math] c [/ math] (que debe ajustar para sus fines) y devuelve la matriz del núcleo polinomial correspondiente [math] K [/ math], de modo que [math] K (i, j) = k_d (x_i, x_j) [/ math]:
función [K] = polynomialKernelMatrix (X, d, c)
K = (X * X ‘+ c). ^ D;
fin
Esto podría hacerse más eficiente al darse cuenta de que el núcleo es simétrico y solo computa para la diagonal superior / inferior, etc., pero si no está utilizando conjuntos de datos masivos, esto estaría bien.