机器学习 KNN 算法之手写数字识别( 二 )
代码运行部分截图如下
文章插图
当K = 3时 , 准确率达到了 98.94%, 只有10个数字预测错误 , 对于这个模型而言 , 准确率是十分可观的 , 但运行效率却比较低 , 接近30秒的运行时间 。 因为每个测试数据都要与近2000个训练数据进行距离计算 , 而每次计算又包含1024个维度浮点运算 , 高次数多维度的计算是导致模型运行效率低的主要原因 。
K值
下图是K值与模型准确率的关系变化图 , K = 3时 , 模型准确率达到峰值 , 随着K增大 , 准确率越来越小 , 所以这份数据的噪声还是比较小的 。
文章插图
手写数字测试
【机器学习 KNN 算法之手写数字识别】建模完成了 , 模型的准确率也不错 , 为何自己手写的数字测试一下呢?所以偶就手动写了几个数字
文章插图
正常拍出的图片是RGB彩色图片 , 并且像素也各不相同 , 所以需要对图片做两项处理:转化成黑白图片、将像素转化为32x32 , 这样才符合我们上文算法的要求;对于像素点 , 数值一般位于0-255 , 255代表白、0代表黑 , 但因为手写数字像素点颜色并不规范 , 所以我们设置一个阈值( 170 )用以判断黑白之分 。 图片转文本代码如下:
def pic_txt():for i in range(0,10):img = Image.open('.\handwritten\%s.png'%i)#将图片像素更改为32X32img = img.resize((32,32))#将彩色图片变为黑白图片img = img.convert('L')#保存path = '.\handwritten\%s_new.jpg'%iimg.save(path)for i in range(0,10):fb = open('.\hand_written\%s_handwritten.txt'%i,'w')new_img = Image.open('.\handwritten\%s_new.jpg'%i)#读取图片的宽和高width,height = new_img.sizefor i in range(height):for j in range(width):# 获取像素点color = new_img.getpixel((j, i))#像素点较高的为图片中的白色if color>170:fb.write('0')else:fb.write('1')fb.write('\n')fb.close()
整体代码运行截图如下:
文章插图
正确率为 70%, 毕竟测试数据很小 , 10个数字中4、7、8三个数字预测错误 , 还算可观;由于光线问题 , 有几个数字左下角会有一些黑影 , 也会对测试结果产生一定的影响 , 若避免类似情况 , 并且多增加一些测试数据 , 正确率定会得到提升的 。
- 机器人|网络里面的假消息忽悠了非常多的小喷子和小机器人
- 跑腿|机器人“小北”上岗 让办事群众少跑腿
- 计算机学科|机器视觉系统是什么
- 机器人|外骨骼康复训练机器人助力下肢运动功能障碍患者康复训练
- 教学|机器人教学的目标方案
- 体验|VR\/AR体验、3D打印、机器人“对决”……松江这所中学人工智能创新实验室真的赞
- 输送|新时达:“用于机器人码垛的输送系统”获发明专利
- 操作|[LIVE On]黄敏贤和郑多彬充满心碎的下午:机器操作每次都不能通过测试
- 用于|用于半监督学习的图随机神经网络
- 顶级|内地高校凭磁性球体机器人首获机器人顶级会议最佳论文奖