El año pasado en NIPS 2017 Ali Rahimi y Ben Recht ganan el premio a la prueba del tiempo por su papel "Características aleatorias para máquinas de núcleo a gran escala" donde introdujeron características aleatorias, más tarde codificadas como algoritmo de fregaderos aleatorios. Como parte de la publicidad de su artículo, mostraron que su modelo podía implementarse en 5 líneas de matlab.
% Approximates Gaussian Process regression
% with Gaussian kernel of variance gamma^2
% lambda: regularization parameter
% dataset: X is dxN, y is 1xN
% test: xtest is dx1
% D: dimensionality of random feature
% training
w = randn(D,d);
b = 2 * pi * rand(D, 1);
Z = cos(gamma * w * X + b * ones(1,N));
alpha = (lambda * eye(D) +Z * Z') \ (Z * y);
% testing
ztest = alpha' * cos(gamma * w * xtest + b);
No me queda claro cómo aprende algo el algoritmo anterior. ¿Cómo funciona un fregadero aleatorio? ¿Cómo se aproxima a los procesos gaussianos y a las máquinas de vectores soporte?
Editar
Volviendo a ver la charla de Rahimi, el término fregaderos aleatorios no se introduce en el artículo por el que ganaron el premio, sino al final de la trilogía de artículos que comienza con "Random Features for Large-Scale Kernel Machines". Los otros artículos son:
Creo que el fragmento de código introducido más arriba es una especialización del Algoritmo 1 del último artículo.