No estoy seguro de clasificar la transformada de Fourier como técnica de reducción de la dimensionalidad. propiamente dicho aunque sí que puedes utilizarlo de esa manera.
Como probablemente sepas, una transformada de Fourier convierte un dominio del tiempo función $f(t)$ en un dominio de frecuencia representación $F(\omega)$ . En la función original, el $t$ normalmente denota tiempo: por ejemplo, f(1) podría denotar el saldo de la cuenta de alguien el primer día, o el volumen de la primera muestra de la grabación de una canción, mientras que f(2) indica el valor del saldo/muestra del día siguiente). Sin embargo, el argumento $\omega$ en $F(\omega$ ) suele indicar la frecuencia: F(10) indica hasta qué punto la señal fluctúa a 10 ciclos/segundo (o cualquiera que sean sus unidades temporales), mientras que F(20) indica hasta qué punto fluctúa el doble de rápido. La transformada de Fourier "funciona" reconstruyendo la señal original como una suma ponderada de sinusoides (para cada componente de frecuencia se obtiene un "peso", normalmente llamado amplitud, y un "desplazamiento", normalmente llamado fase). El artículo de wikipedia es un poco complejo, pero hay un montón de tutoriales decentes dando vueltas por la red.
La transformada de Fourier, por sí sola, no consigue reducir la dimensionalidad. Si su señal es de longitud $N$ obtendrá alrededor de $N/2$ amplitudes y $N/2$ fases de vuelta (1), lo que evidentemente no supone un gran ahorro. Sin embargo, para algunas señales, la mayoría de esas amplitudes son próximas a cero o son a priori se sabe que son irrelevantes. A continuación, se podrían desechar los coeficientes de estas frecuencias, ya que no se necesitan para reconstruir la señal, lo que puede suponer un ahorro considerable de espacio (de nuevo, dependiendo de la señal). Esto es lo que el libro enlazado describe como "reducción de dimensionalidad".
Una representación de Fourier podría ser útil si:
- Su señal es periódica, y
- La información útil está codificada en la periodicidad de la señal.
Por ejemplo, supongamos que está registrando las constantes vitales de un paciente. La señal eléctrica del electrocardiograma (o el sonido de un estetoscopio) es una señal de alta dimensión (digamos, más de 200 muestras/segundo). Sin embargo, para algunas aplicaciones, podría interesarle más el corazón del sujeto tarifa que probablemente sea la ubicación del pico en la FFT y, por tanto, representable por un solo dígito.
Una limitación importante de la FFT es que considera toda la señal a la vez: no puede localizar cambios en ella. Por ejemplo, supongamos que observa el coeficiente asociado a 10 ciclos/segundo. Obtendrá valores de amplitud similares si
- Hay una oscilación consistente, pero de tamaño moderado, de 10 Hz en la señal,
- Esa oscilación es dos veces mayor en la primera mitad de la señal, pero totalmente ausente en la segunda mitad, y
- La oscilación está totalmente ausente en la primera mitad, pero es dos veces mayor que la nº 1 en la segunda mitad.
- (y así sucesivamente)
Obviamente no sé mucho sobre su negocio, pero me imagino que estas podrían ser características muy relevantes. Otra limitación importante de la FFT es que funciona en una única escala temporal. Por ejemplo, supongamos que un cliente visita religiosamente su negocio cada dos días: tiene una "frecuencia" de 0,5 visitas/día (o un periodo de 2 días). Otro cliente también puede venir sistemáticamente dos días seguidos, tomarse dos de descanso y volver a visitarle los dos siguientes. Matemáticamente, el segundo cliente "oscila" el doble de despacio que el primero, pero yo apostaría a que estos dos tienen las mismas probabilidades de darse de baja.
Un enfoque de tiempo-frecuencia ayuda a sortear estos problemas localizando los cambios tanto en frecuencia como en tiempo. Un método sencillo es la FFT en tiempo corto, que divide la señal en pequeñas ventanas y calcula la transformada de Fourier de cada ventana. Esto supone que la señal es estacionaria dentro de una ventana, pero cambia a través de ellas. El análisis de ondículas es un método más potente (y matemáticamente riguroso). Hay muchos tutoriales sobre las ondículas: el encantadoramente llamado Wavelets para niños es un buen punto de partida, aunque sea demasiado para todos los niños, salvo para los más listos. Existen varios paquetes wavelet para R, pero su sintaxis es bastante sencilla (véase la página 3 de paquete wavelet documentación para uno). Lo ideal es que se parezca a la fluctuación de interés de la señal, pero una ondícula Morlet podría ser un punto de partida razonable. Al igual que la FFT, la transformada wavelet en sí misma no reduce mucho la dimensionalidad. En su lugar, representa la señal original como una función de dos parámetros ("escala", que es análoga a la frecuencia, y "traslación", que es similar a la posición en el tiempo). Al igual que los coeficientes de la FFT, se pueden descartar con seguridad los coeficientes cuya amplitud sea cercana a cero, lo que proporciona una reducción efectiva de la dimensionalidad.
Por último, quiero concluir preguntándole si la reducción de la dimensionalidad es realmente lo que quiere aquí. Las técnicas por las que has preguntado son esencialmente formas de reducir el tamaño de los datos conservándolos lo más fielmente posible. Sin embargo, para obtener el mejor rendimiento en la clasificación, normalmente queremos recoger y transformar los datos para que las características relevantes sean lo más explícitas posible, descartando todo lo demás.
A veces, el análisis de Fourier o de Wavelet es exactamente lo que se necesita (por ejemplo, convertir una señal de electrocardiograma de alta dimensionalidad en un único valor de frecuencia cardiaca); otras veces, sería mejor utilizar enfoques completamente distintos (medias móviles, derivadas, etc.). Te animo a que reflexiones sobre tu problema real (e incluso a que hagas una lluvia de ideas con el personal de ventas/retención de clientes para ver si tienen alguna intuición) y utilices esas ideas para generar funciones, en lugar de probar a ciegas un montón de transformaciones.