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 "masses/README.perceptron" for more details.
See RescoringProcess for further details.