机器学习-KNN算法实现垃圾分类(2020-12-6)
引子
整个KNN已经完成,可视化的完成在该文章当中暂时不涉及,毕竟我理解的也还不完全,所以等到之后有空,敲完注释之后再在另外一篇博客里讲,或许那时候我还写出了,我现在所设想的图片像素块变化较大的检测并分割的函数呢。。。

在全篇代码当中引用的库(tkinter系列可以不用管,那是可视化的库)

全部的文件样式为:

前期数据预处理

以上是主函数里的变量准备,之后将会在函数当中使用

这个第一个函数–统一更改图片的名字,大小,并且保存在一个文件夹下,例:名字统一为:有害垃圾_1.jpg

第二个函数,是最重要的函数之一,理解它的功能就为之后理解我的整个思路打下了基础,
传入的地址只需要为大头文件即可(如印子中的文件截图)
我采用列表储存训练集和测试集的方式,将收集来统一命名的图片统一灰度化,再一致转化为矩阵,最后铺平,储存到训练集的大列表当中,最后的效果为,例:
【【【图片1矩阵】,图片1标签(有害垃圾),图片1的图片名,】【【图片2矩阵】,图片2标签(有害垃圾),图片2的图片名,】……】
KNN算法核心,排序,取前K个

这个是最主要的函数,实现KNN算法的核心,计算欧氏距离,然后将欧氏距离储存在训练集后方,运算完后效果为:【【【图片1矩阵】,图片1标签(有害垃圾),图片1的图片名,测试集1的欧氏距离,测试集2的欧氏距离……】【【图片2矩阵】,图片2标签(有害垃圾),图片2的图片名,测试集1的欧氏距离,测试集2的欧氏距离……】……】

这个是排序函数,对刚刚计算完的欧氏距离进行排序,取前K个后,用字典来储存结果,最后得到某个测试集图片的预测结果(这个排序函数用法:取一个列表当中的最小单元中的某一位数来进行排序,我这里取的是第test_1个欧氏距离进行排序),当然,这个函数每次调用只能对一张图片进行排序,得到一张测试集图片的预测成功与否,所以,在外部调用的之后要使用一个函数来遍历整个测试集
主函数部分(调用函数)

再放一边我准备的变量,但是这些变量很大一部分都是可视化部分,接口标签更改所要用到的专有变量,所以,大致有个印象就好了

这个是前期数据的准备和KNN算法的核心实现

这一段就是计算出在多个K当中最高的准确率,和最高准确率的K值
当然,后面的输出因为可视化没在控制台上显示,如果需要你们就print(K_Max,K_success)即可
可视化的结果展示
可视化的博客待我保证全部理解透了再一起敲出来,然后现在展示一下可视化结果的效果:






以及一些小彩蛋




后记
说实话KNN算法是真的很简单,但是在前期数据处理上倒是比较难的,还有排序,算法实现真的不难,我完成全部基础内容,在控制台上输出结果也就的75行代码左右就实现了,但是当我敲上可视化,敲上接口这些,代码就变成了三百多行。。。
唉~~挺累的,但是可算是完成作品全部内容啦!
我展示的代码大概总共90行左右,其他省略的(也许)会在不久的将来一起敲出来,暂时还不能发源代码,因为作品还没有验收
总之,我还有一个图像识别切割可以做。。。之后见
————软件部-机器学习-小麦
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
