8.4 示例:识别验证码

上一章提过,MNIST是一个入门级的计算机视觉数据集,包含各种手写数字图片,也包含每一张图片对应的标签,告诉我们这个是数字几。我们使用逻辑回归来识别由MNIST组成的验证码。完整演示代码请见本书GitHub上的8-3.py。

1.数据搜集和数据清洗

使用MNIST离线版的数据,具体下载地址以及数据集的介绍请参考第3章相关内容:


def load_data():
    with gzip.open('../data/MNIST/mnist.pkl.gz') as fp:
        training_data, valid_data, test_data = pickle.load(fp)
    return training_data, valid_data, test_data

2.特征化

MNIST已经将24×24的图片特征化成长度为784的一维向量。

3.训练模型

使用逻辑回归训练:


training_data, valid_data, test_data=load_data()
x1,y1=training_data
x2,y2=test_data
logreg = linear_model.LogisticRegression(C=1e5)
logreg.fit(x1, y1)

4.效果验证

验证效果:


print cross_validation.cross_val_score(logreg, x2, y2, scoring="accuracy")

准确率80%左右,效果还不错,但是离可以实际使用还是有距离:


[ 0.76423008  0.85238524  0.86272154]