Initial commit
Initial commit of code. It seems to run for the samples I tested, so hopefully its mostly working. As bugs are found, I will try to fix them.
Updated readme.
Fixed behavior when the normalize parameter is set

The normalization method wasn't being called; instead the stats
printouts were inside that if block.
Also, I added vim backup and swap files to the gitignore.
Fixed problem with opening VS Project file in VS 2010

The only problem was the targeted version of the .NET Framework. I
changed it from 4.5 to 4.0 and it works just fine.
Added Perceptron Learner Class

It doesn't do anything at this point, but I'm trying to figure out how
things work still.
Implemented a Simple Perceptron

It won't work for outputs other than binary yet, but we're getting
there.
A Little Code Cleanup

Fixed a misspelling in a comment and pulled some duplicate code into a
method that prints usage instructions and exits the program.
Removed Temporary Variables for Parsed Command-Line Arguments

I think it makes more sense to just use the property on the ArgParser
object. The temporary variables smell like premature optimization to me.
Prettied up the output a bit.

Moved the normalization line down so there's not a big gap in the
output.
Added a try-catch in the main method so that errors/exceptions don't
barf their stack trace.
Added some validity checks to the perceptron learner
Added Learning Rate as a command line parameter
Added an output file to the command line arguments for plot output

The decision line and data points are sent to it at this point.
Added randomization of the data between epochs
Added command line option to seed random number generator

This will make it easier to debug things, since it'll give deterministic
results without having to comment/uncomment lines in the source and then
recompile.
Fixed up Perceptron and PerceptronLearner classes

The most important change here was the stopping criteria. Because we
were only checking to see if the newAccuracy was less than or equal to
the old accuracy, it wasn't stopping soon enough (it would go for
hundreds of thousands of epochs regularly on the voting task). The fix
was simple (once I figured it out): find the difference/change in the
accuracy since last epoch and see if it's less than 0.1 (any small
threshold value would probably work). This way, if it's "improving
accuracy" but only slightly, it will still stop before it starts
overfitting the data or getting wildly off course.
Other than that, I prettied up the plotting a bit, added a second plot
for the misclassification rate as it changes through the epochs, added
labels, etc.
I also changed the weight vector in the Perceptron class to be a C#
style Property with a private setter and public getter. That way I could
move the printing of the final weights and things down into the
PerceptronLearner class.
Added checks for plotting prerequisite conditions

There's some cases when our graphs wouldn't make sense, and so I put
checks in to make sure that the plots only get output when and if they
make sense.
Implemented Perceptron Learning for Non-Binary Outputs
Pulled out a LinearUnit class from Perceptron

Perceptron just adds thresholding. For now I'm not going to integrate
the use of the Linear Unit for the delta rule, though.
Refactoring to allow for easier implementation of Backprop

I pulled LinearUnit into a separate file and created a ThresholdedUnit
that can take any kind of thresholding function (wrapped in a class
implementing the IThresholder interface).
I also made the PerceptronThresholder take a high and a low value for
what values it returns, with the defaults being 1 and 0, respectively.
This allows us to use 1 and -1 like in the book if we want to.