A linear classifier cuts the input space with the hyperplane y(x) = wTx + w0 = 0. Least squares fits the 1-of-K targets by linear regression, which is convenient but treats the targets as Gaussian: a few far-away points tilt the boundary, and with three classes one class can be masked altogether. Fisher's discriminant chooses the direction w that makes the projected classes far apart relative to their spread, J(w) = (wTSBw) / (wTSWw). The perceptron adds tnφn to w for each misclassified point and stops after finitely many updates on separable data.
code/ch04_linear_classification.py (functions least_squares_classifier, fisher_two_class, fisher_criterion, perceptron, irls_logistic, multiclass_irls; Figures 4.4 to 4.7) and the checks in code/checks_ch04.py.