Simone Salerno from Eloquent Arduino has released a new linear-time implementation of a partial Fourier transform for machine learning data sets, allowing Python programmers to enjoy a major accuracy boost.
"Fourier Transform is probably the most well known algorithm for feature extraction from time-dependent data (in particular speech data), where frequency holds a great deal of information," Salerno explains. "Sadly, computing the transform over the whole spectrum of the signal still requires O(NlogN) with the best implementation (FFT - Fast Fourier Transform); we would like to achieve faster computation on our microcontrollers."
Salerno's proposed solution: A novel partial, naive, linear-time implementation tailored specifically for extracting features from data for the purposes of machine learning, dubbed Principal FFT.
The Principal FFT implementation has been tested across a range of common data types, including human activity classification from smartphone data, gesture classification from inertial measurement unit (IMU) data, the MNIST handwritten digits data set, and speech data.
"We can note a couple findings: Principal FFT is almost on par with PCA [Principal Component Analysis] after a certain number of components," Salerno writes, "[and] PrincipalFFT definitely leaves PCA behind on audio data. From even this simple analysis you should be convinced that Principal FFT can be (under certain cases) a fast, performant features extractor for your projects that involve time-dependant data."
Full details on how Principal FFT works, along with instructions for installing the Python package via Pip and trying it yourself, can be found on the Eloquent Arduino website. The source code, meanwhile, is available on GitHub.