使用matlab基于knn算法实现图片的识别遇到的问题总结

计算方法作业要求,使用knn算法,实现对手写数字的识别,并对比在L1,L2和L∞三种范数(范数我的前面博文讲过)下的对某一个手写数字图片的识别率。

在得到题目前,一脸懵,毕竟之前没有怎么写过这种“高逼格”的程序(除了之前在计算机组成原理老师的帮助和教导下才做好扫雷破解程序)。于是,先搜索一下knn算法是啥?总的来说就是:k个最邻近的有了确定标签(或者说是label?)的元素对没有标签的元素做表决,表决最多的标签就被打到没有标签的元素上了。特别地,当k为1时,离未知元素最近的已知元素标签就打给它了。其中,临近多少的量化的标准由所使用的范数计算而来。举一个例子,当k=1,现有手写的10张图片(0-9),它们的标签已知也为0-9(这可不是明知故问,因为电脑不知道这张图是啥东西,只知道它们是像素矩阵),小刘手写了20张的数字7图片,准备让电脑在已知前面被打上标签的10张图片的前提下,也给这20张图来打标签,如果打上的标签正确(也就是标签为7)的次数为11,那么识别准确率也就为55%。那么把镜头靠近,就有俩问题,k=1是如何体现的呢?范数在哪儿?首先,k=1的意思是,只需要1个最邻近已知元素来为未知元素打标签即可。翻译直白就是,这10个已知元素的距离与未知元素最近的那个已知元素的标签就是未知元素的标签,那么这个距离怎么评判呢?这便需要范数来作为依据,这便需要清楚两点。1.前面说到或者各位已经知道,图片在电脑中是怎么存的 这里就不赘述了。2.像素矩阵的二值化,如其字面意思,矩阵中只有2种值,我的图片是300300像素的,又因为是白底黑字图片。所以二值矩阵中的值从像素矩阵可以获得(0或255,当然你也可以使用其他数字,但是0或1这一组合建议别用,因为为0或1,用什么范数就没意义了),这时在一张未知元素图的识别中,经历了下列数学过程,一个300300的二值矩阵与10个300300的二值矩阵做了L1范数的运算,该运算为将矩阵中对应的两个元素相减取绝对值,之后将300300个结果相加则得到了判定为这个标签的L1范数距离,由于1张由10张判定便可以得到10个对应的标签的L1范数距离,给他们起个名叫判定为n(n为判定标签)的L1距离,这10个距离排序,由于k=1,故未知元素标签仅由距离最短的那个表决。类似地,使用什么范数就计算什么范数距离。
当k>1,要将已知元素一类多弄几张(上例为一类已知元素有1张,k=1也可以多弄几张,主要我的时间不够),之后给对应标签范数距离排序,最小的k个标签中,哪类标签最多,就将标签赋予未知元素。
写在后面的话,之前我对k的理解是不完备的,今天与老师讨论后 ,k与元素标签数量无关,与排序后,最小的k个距离的标签多寡有关。让我对knn算法的思想更加理解深入。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值