SpamAssassin's scores were assigned using a genetic algorithm in versions up to 3.0.0. A good intro on genetic algorithms can be found here: http://lancet.mit.edu/~mbwall/presentations/IntroToGAs/
Versions since 3.0.0 are now using a perceptron, written by Henry Stern, to perform the same task (but a lot faster); his program 'implements the "Stochastic Gradient Descent" method of training a neural network. It uses a single perceptron with a logsig activation function and maps the weights to [SpamAssassin] score space.' See the file "\[http://www.spamassassin.org/full/3.0.x/dist/masses/README.perceptron masses/README.perceptron\]" for more details. Wiki Markup
See RescoringProcess for further details.