(Warning: This entry has absolutely nothing to do with massively multiuser online entertainment, if that’s what you’re here for)
In my research project at the moment, I’m using a nifty little program to aid my pattern recognition.
A major part of my project involves me taking recordings of a signal (in this case, electrochemical spikes from a neuron) and discriminating them from the noise inherent in the system. Sometimes the noise is loud, and sometimes there is more than one signal (i.e. multiple neurones). In a recent case, I had eight different signals and a significant amount of noise.
Now, the way most people would go about discriminating the signal from the case I described is through hardware; they’d hook their recording apparatus up to a black box, and they would set a value X on that black box. Anything in their recording that went above value X would be recorded (on a separate channel) as a spike. Now, this seems reasonable enough since spikes are just that – they are spikes in voltage, and if you have a good recording with only one signal and little noise, you can be 100% confident in getting all of the spikes and no false positives.
But if you have lots of noise, and the signal is weak, you will have to set value X such that you may miss some of the spikes and get some false positives (because the spikes are only a bit above the level of the noise). Maybe you might not care about this if you’re just doing a simple analysis of the spike rate, but I’m not – I’m doing something a bit more complicated that involves information theory and it really is important for me to try and get all the spikes and no noise. Thus, a simple hardware discrimation of the spikes just ain’t good enough*.
(*Hardware discrimination can actually be a bit more complicated than this, but essentially it all boils down to seeing if the voltage goes above X and/or below Y or Z or whatever)
So what you really have to do is to look at the shape of a spike. A neural spike is quite distinctive – it generally has a slight bump, then a sharp peak, then a little trough. In other words, it doesn’t look like random noise. This means that you can do some software analysis of the shape.
The more computer-savvy of you readers are probably thinking – aha, no problem, we’ll just get some spike recognition neural network kerjigger in, and then that’s it. Well, you know, it’s not as easy as that, because spike shape can change over time and sometimes noise looks like a spike, and vice versa. It turns out that the best way to check whether a spike is really a spike is by looking at it – after all, the human brain is a pretty powerful neural net. Unfortunately, if you’re looking at a spike train with 50,000 spikes, this isn’t really feasible.
So a guy in my lab has made a nifty piece of software that will analyse each of the putative spikes in a recording (putative because they pass a trigger level – just like how a hardware discriminator works). Using a mathematical method of your choice (FFT, PCA, wavelet, cursor values, etc) it will assign a numerical value to each spike. You can then plot these values against each other to get a 2D scattergram. You do this three times, and hopefully you get three scattergrams that graphically isolate your chosen signal from the noise (or from other signals) on the basis of the analysis method you chose.
Next, you go and mark out which spikes you want (each spike is represented by a scatter point) by drawing ellipses, and finally you use Boolean algebra to say, ‘OK, I want all the points I circled in plot A, but not those that are shared with plot B or plot C’. At any point, you can check out what a particular spike or group of spikes looks like on a graph. And then you can export your freshly discriminated spikes.
It works surprisingly well, and I think this is because it is a marriage of the supreme pattern recognition abilities of humans with the brute force processing power of computers. I’m fairly sure it’s one of the best methods in current use for discriminating spikes from a recording, and it’s a shame that people don’t think that this is a worthwhile thing to do (but that’s a story for another time).
Hold on, though: this wouldn’t be a proper mssv.net post if it didn’t have any wild speculation. So, humans are good at pattern recognition in general. But we’re incredibly, uncannily good at facial recognition. We can distinguish two near identical faces and recognise someone we’ve only seen for a second out of thousands of faces. Pretty damn good.
It turns out that facial recognition and plain old pattern/object recognition are governed by different systems in the brain; we know this because there is something called a double dissocation between them. In other words, there are people who, for some reason, cannot recognise faces but can recognise objects fine, and vice versa. This strongly suggests that they run on different systems.
So how about we leverage our skills at facial recognition by converting other forms of information (say, spike trains, weather patterns, stockmarket data) into facial features? How might that work, eh? It could allow us to sense subtle differences in information and aid our recognition by no end.
Of course, I have no real idea whether this would work, or exactly how to do it – maybe you can take a recording of data (or real time data, I don’t know) and use different methods to analyse it and use the output values to describe different facial parameters. Hmm…