Je ne suis pas sûr que je classerais une transformée de Fourier comme une technique de réduction de dimensionnalité en soi , bien que vous puissiez certainement l'utiliser de cette façon.
Comme vous le savez probablement, une transformée de Fourier convertit une fonction de domaine temporelf(t)dans une représentation du domaine fréquentielF(ω). Dans la fonction d'origine, letindique généralement le temps: par exemple, f (1) peut désigner le solde du compte de quelqu'un le premier jour, ou le volume du premier échantillon de l'enregistrement d'une chanson, tandis que f (2) indique le solde / la valeur d'échantillon du jour suivant). Cependant, l'argumentω dans F(ω) indique généralement la fréquence: F (10) indique la mesure dans laquelle le signal fluctue à 10 cycles / seconde (ou quelles que soient vos unités temporelles), tandis que F (20) indique la mesure dans laquelle il fluctue deux fois plus vite. La transformée de Fourier "fonctionne" en reconstruisant votre signal d'origine sous la forme d'une somme pondérée de sinusoïdes (vous obtenez en fait un "poids", généralement appelé amplitude, et un "décalage", généralement appelé phase, valeurs pour chaque composante de fréquence). L'article de wikipedia est un peu complexe, mais il existe un tas de tutoriels décents qui flottent sur le Web.
La transformée de Fourier, en soi, ne vous permet pas de réduire la dimensionnalité. Si votre signal est de longueurN, vous obtiendrez N/2 amplitudes et N/2phases de retour (1), ce qui n'est clairement pas une énorme économie. Cependant, pour certains signaux, la plupart de ces amplitudes sont proches de zéro ou sont a priori réputées non pertinentes. Vous pourriez alors éliminer les coefficients de ces fréquences, car vous n'en avez pas besoin pour reconstruire le signal, ce qui peut entraîner des économies d'espace considérables (là encore, selon le signal). C'est ce que le livre lié décrit comme une «réduction de dimensionnalité».
Une représentation de Fourier pourrait être utile si:
- Votre signal est périodique, et
- Les informations utiles sont codées dans la périodicité du signal.
Par exemple, supposons que vous enregistrez les signes vitaux d'un patient. Le signal électrique de l'électrocardiogramme (ou le son d'un stéthoscope) est un signal de grande dimension (disons, 200+ échantillons / seconde). Cependant, pour certaines applications, vous pourriez être plus intéressé par la fréquence cardiaque du sujet , qui est probablement l'emplacement du pic dans la FFT, et donc représentable par un seul chiffre.
Une limitation majeure de la FFT est qu'elle prend en compte la totalité du signal à la fois - elle ne peut pas localiser ses changements. Par exemple, supposons que vous regardiez le coefficient associé à 10 cycles / seconde. Vous obtiendrez des valeurs d'amplitude similaires si
- Il y a une oscillation constante mais modérée de 10 Hz dans le signal,
- Cette oscillation est deux fois plus importante dans la première moitié du signal, mais totalement absente dans la seconde moitié, et
- L'oscillation est totalement absente en première mi-temps, mais deux fois plus importante que n ° 1 en 2ème mi-temps.
- (etc)
Je ne connais évidemment pas grand-chose de votre entreprise, mais j'imagine que ces fonctionnalités pourraient être très pertinentes. Une autre limitation majeure de la FFT est qu'elle fonctionne sur une seule échelle de temps. Par exemple, supposons qu'un client visite religieusement votre entreprise tous les deux jours: il a une "fréquence" de 0,5 visite / jour (ou une période de 2 jours). Un autre client peut également venir régulièrement pendant deux jours consécutifs, en retirer deux, puis revenir à nouveau pour les deux prochains. Mathématiquement, le deuxième client "oscille" deux fois plus lentement que le premier, mais je parie que ces deux-là sont également susceptibles de se retourner.
Une approche temps-fréquence permet de contourner ces problèmes en localisant les changements de fréquence et de temps. Une approche simple est la FFT de courte durée, qui divise votre signal en petites fenêtres, puis calcule la transformée de Fourier de chaque fenêtre. Cela suppose que le signal est stationnaire dans une fenêtre, mais change à travers eux. L'analyse en ondelettes est une approche plus puissante (et mathématiquement rigoureuse). Il y a beaucoup de tutoriels sur les ondelettes - les ondelettes au nom charmant pour les enfants sont un bon point de départ, même si c'est un peu beaucoup pour tous, mais les enfants les plus intelligents. Il existe plusieurs packages d'ondelettes pour R, mais leur syntaxe est assez simple (voir page 3 du package d'ondelettesdocumentation pour un). Vous devez choisir une ondelette appropriée pour votre application - cela ressemble idéalement à la fluctuation de l'intérêt pour votre signal, mais une ondelette Morlet peut être un point de départ raisonnable. Comme la FFT, la transformée en ondelettes elle-même ne vous donnera pas beaucoup de réduction de dimensionnalité. Au lieu de cela, il représente votre signal d'origine en fonction de deux paramètres ("échelle", qui est analogue à la fréquence, et "translation", qui s'apparente à la position dans le temps). Comme les coefficients FFT, vous pouvez éliminer en toute sécurité les coefficients dont l'amplitude est proche de zéro, ce qui vous permet de réduire efficacement la dimensionnalité.
Enfin, je voudrais conclure en vous demandant si la réduction de la dimensionnalité est vraiment ce que vous voulez ici. Les techniques que vous avez posées sont essentiellement des moyens de réduire la taille des données tout en les préservant le plus fidèlement possible. Cependant, pour obtenir les meilleures performances de classification, nous voulons généralement collecter et transformer les données pour rendre les fonctionnalités pertinentes aussi explicites que possible, tout en éliminant tout le reste.
Parfois, l'analyse de Fourier ou d'ondelettes est exactement ce qui est nécessaire (par exemple, transformer un signal ECG de haute dimension en une seule valeur de fréquence cardiaque); d'autres fois, vous seriez mieux avec des approches complètement différentes (moyennes mobiles, dérivés, etc.). Je vous encourage à avoir une bonne réflexion sur votre problème réel (et peut-être même à réfléchir aux vendeurs / fidélisation des clients pour voir s'ils ont des intuitions) et à utiliser ces idées pour générer des fonctionnalités, au lieu d'essayer aveuglément un tas de transformations.