稀里糊涂学AI(一)依葫芦画瓢-------利用THE MNIST DATABASE of handwritten digits基于scikit-learn模块实现简单的手写数字识别

下载相应的数据库http://yann.lecun.com/exdb/mnist/

train-images-idx3-ubyte.gz:  training set images (9912422 bytes) 
train-labels-idx1-ubyte.gz:  training set labels (28881 bytes) 

其数据库有60000的训练库,可以将训练库取其中的几千条作为训练,随机抽一些其他的作为训练完后的测试实例

其中,images的文件格式为

[offset] [type]          [value]          [description] 
0000     32 bit integer  0x00000803(2051) magic number 
0004     32 bit integer  60000            number of images 
0008     32 bit integer  28               number of rows 
0012     32 bit integer  28               number of columns 
0016     unsigned byte   ??               pixel 
0017     unsigned byte   ??               pixel 
........ 
xxxx     unsigned byte   ??               pixel

简单点说,就是直接越过文件的前16个字节,之后,按照28*28字节的size,读取文件

labels文件的格式为

[offset] [type]          [value]          [description] 
0000     32 bit integer  0x00000801(2049) magic number (MSB first) 
0004     32 bit integer  10000            number of items 
0008     unsigned byte   ??               label 
0009     unsigned byte   ??               label 
........ 
xxxx     unsigned byte   ??               label

同样,跳过前8个字节,读取60000个byte,写入一个list中

实现代码如下:

def LoadMNISTData():
    imagefile = "D:\\sciLearn\\train-images-idx3-ubyte\\train-images.idx3-ubyte"
    labelfile = "D:\\sciLearn\\train-labels-idx1-ubyte\\train-labels.idx1-ubyte"
    fpimg = open(imagefile, "rb")
    fplab = open(labelfile, "rb")
    fpimg.read(16)
    imgvec = []
    while True:
        aimg = fpimg.read(28*28)
        if len(aimg)<28*28:
            break;

        imgvec.append([aimg[i] for i in range(0, 28*28)])
    fplab.read(8)
    veclab = fplab.read(60000)
    veclab = [veclab[i] for i in range(0, 60000)]
    return imgvec,veclab

 

获取数据后,就可以进行数据训练了,代码如下

X_train,y_label=LoadMNISTData()
clf = knn()
clf = clf.fit(X_train[1:3000],y_label[1:3000])

训练完成后,取部分训练数据作为测试数据进行测试,

print("将要预测的结果是"+str(y_label[3000:3003]))
result = clf.predict(X_train[3000:3003])
print(str(result ))

至此,knn的机器学习即完成。

依托这个例子,可以自己构建其他文字识别的例子。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值