让我们把问题简化一下,只需要识别出一个数字——例如,数字5。这个“5-检测器”将是一个二元分类器的例子,它能够区分出两个类别,是5和不是5。让我们为这个分类任务创建目标向量[target vertor]:
y_train_5 = (y_train == 5) # True for all 5s, False for all other digits.
y_test_5 = (y_test == 5)
好,现在让我们选择一个分类器并进行训练。一个好的开始是使用一个随机梯度下降[ Stochastic Gradient Descent ](SGD)分类器,使用Scikit-Learn的SGDClassifier类。这个分类器的优点是能够有效地处理非常大的数据集。这在一定程度上是因为SGD独立地处理训练样本,一次一个(这也使得SGD非常适合在线学习),我们稍后会看到。让我们创建一个SGDClassifier,并在整个训练集上训练它:
from sklearn.linear_model import SGDClassifier
sgd_clf = SGDClassifier(random_state=42)
sgd_clf.fit(X_train, y_train_5)
SGDClassifier在训练时依赖于随机性(因此得名“随机”)。如果需要可重复的结果,则应该设置random_state参数。
现在你可以用它来检测数字5的图像:
>>> sgd_clf.predict([some_digit])
array([ True], dtype=bool)
分类器猜测这个图像表示一个5 (True)。在这个特殊的案例中,看起来是正确的!现在,让我们来评估这个模型的性能。