美文网首页Python
机器学习之识别手写数字

机器学习之识别手写数字

作者: 刘小白DOER | 来源:发表于2021-10-09 23:02 被阅读0次

    前几天准备把机器学习的二元分类器来测试一番,但是发现MNIST数据集很久都加载不进来,于是到sklearn官网上搜索,发现有个 8x8 像素的数字图像组成数据集,于是乎用它的案例来测试验证。

    先看看数据集的组成。手写数字数据集有1797个,每幅图像存储 8x8 阵列的灰度值。

        看一下其他几个字典的第一个值,target表明这个数字是0,images是8*8的格式,data是64*1的格式 。数组的每个元素都是一副图像,该图像由一个8x8数值矩阵标识,矩阵中的数值代表从0(白色)到15(黑色)的灰度。

    下面的代码可以可视化的查看手写的数字图形,并且可以查看像素中每个小格的灰度值。

    详细的案例的在Recognizing hand-written digits。整个案例分为以下的四个部分,代码就不再详细阐述了。

1、加载数字数据集。

2、要在此数据上应用分类器,digits.images.reshape预处理将图像平整为一行多列的机器学习算法可用的数据。

3、分类指标的文本报告。

4、绘制真实数字值和预测数字值的混淆矩阵,是一个误差矩阵,通常我们可以通过混淆矩阵来评定监督学习算法的性能,清晰的反映出真实值与预测值相互吻合的部分。

    下面是输出的混淆矩阵,那真实值6来说,有90次预测正确,但是有一次预测为1,从手写数字来说,这个是有可能的 。

        笔者使用joblib模块将训练后的模型保存下来,模型大小为337kb 。在后面就可以使用load这个训练好的模型 。

        import joblib

        joblib.dump(clf,"my_train_model.pkl")

        my_model=joblib.load('my_train_model.pkl')

        那么最后笔者就来自己检测本地的手写数字了,注意plt.imread之后也需要按照案例里面的代码一样将数据平化处理。

        my_image = plt.imread('test.png')

        my_image_after = my_image.reshape(len(my_image),-1)

       my_predicted=clf.predict(my_image_after)

       print('my own PNG predicted:',my_predicted)

    但是发现提示错误,只能检测8x8 阵列,那么图片也需要压缩处理为这个格式才能使用这个模型,在实际运用中就需要前端来完成这个工作 。

    K-均值聚类可以对图像进行分组。详情参考A demo of K-Means clustering on the handwritten digits data

相关文章

网友评论

    本文标题:机器学习之识别手写数字

    本文链接:https://www.haomeiwen.com/subject/dbufoltx.html