如何使用Arduino KNN库进行简单的机器学习?

除了像tensorflow for arduino这样强大的深度学习架构外,还有一些经典的ml方法适用于嵌入式设备上的较小数据集,这些方法有用且易于理解-最简单的方法之一就是knn。
knn的一个优势在于,一旦arduino获得了一些示例数据,就可以立即对其进行分类。我们已经发布了一个新的arduino库,可以快速轻松地将knn导入在程序中,且无需进行设备外培训或其他工具。
在本文中,我们将使用颜色分类器示例来介绍knn。之前在深度学习中我们展示过相同的应用程序,相比之下,knn是一种更快、更轻量的方法,但无法扩展到更大,更复杂的数据集。
颜色分类示例
在本教程中,我们将介绍如何使用arduino nano 33 ble sense上的arduino_knn库按颜色对其对象进行分类。
在进行配置时我们将需要进行以下准备:
arduino nano 33 blesense开发板
microusb数据线
打开arduino ide或arduino create的云端编译器
安装arduino_knn库
从文件》示例》 arduino_knn中选择colorclassifier
编译程序并上传到您的arduino开发板
arduino_knn库
该示例使用了arduino_knn库,该库提供了一个简单的界面,可在我们自己的程序中使用knn:
#include 《arduino_knn.h》 // create a new knnclassifierknnclassifier myknn(inputs);
在本示例中,inputs = 3 用来表示颜色传感器的r、g和b值。
采样对象颜色
当打开串行监视器时会看到以下消息:
arduino knn color classifiershow me an example apple
arduino开发板已准备好采样对象颜色。如果你没有苹果,梨或者橙子,则可能需要通过编辑程序来放置不同的标签。颜色传感器最好在光线充足的房间中处理粗糙,无光泽的物体,并且每个类别都必须具有不同的颜色!(颜色传感器并不是区分橙色和橘子的理想选择,但是它可以检测到橙子的成熟程度。如果要按形状对物体进行分类,则可以始终使用相机。)
当arduino开发板靠近对象时,它将对颜色进行采样并将其添加到knn示例中,并带有标记对象所属类的数字(即代表苹果,橙子或梨的数字0、1或2)。提供标记的示例数据的ml技术也称为监督学习。
程序中用于将示例数据添加到knn函数的代码如下:
readcolor(color); // add example color to the knn modelmyknn.addexample(color, currentclass);
颜色样本的红色,绿色和蓝色级别也通过串口输出:
程序为每个对象获取30个颜色样本。可以向其显示一个对象,它将对颜色进行30次采样-本教程不需要30个苹果!(尽管更广泛的数据集将使模型更通用)
分类
通过获取示例样品,程序现在将要求猜测该对象。该示例的使用与获取训练数据时是相同的功能读取颜色传感器,只是这一次它调用分类函数,当显示颜色时,它将分类对象类:
readcolor(color); // classify the object classification = myknn.classify(color, k);
您可以尝试向其显示一个对象,然后查看其效果:
let me guess your object0.44,0.28,0.28you showed me an apple
注意:这不是100%准确的,尤其是在物体表面变化或照明条件变化的情况下。我们也可以尝试使用不同数量的实例、k的值以及不同的对象和环境,以查看其如何影响结果。 knn如何运作?尽管arduino_knn库完成了数学运算,但在为应用程序选择ml算法时,了解ml算法的工作原理很有用。简而言之,knn算法通过比较对象与先前看到的示例的接近程度来对对象进行分类。下面是一个示例图表,其中包含平均每日温度和湿度数据点。每个示例都标有一个季节:
为了对新对象(图表上的“?”)进行分类,knn分类器将查找它所看到的最相似的先前示例。由于在我们的示例中有两个输入,因此算法通过计算新对象与每个先前示例之间的距离来实现此目的。上面最接近的示例标记为“winter”。 knn中的k只是算法考虑的最接近示例的数量。在k = 3的情况下,它会计算三个最接近的示例。在上面的图表中,该算法将对spring投2票,对winter投1票-因此结果将变为spring。
knn的一个缺点是训练示例数据的数量越大,每次对对象进行分类时,knn算法需要花费的检查时间就越长。这使得knn对于大型数据集不太可行,并且是knn与基于深度学习的方法之间的主要区别。
按颜色分类的对象
在我们的颜色分类器示例中,来自颜色传感器的三个输入。每个对象的示例颜色可被视为位于r、g和b轴上的三维空间中的点。像往常一样,knn算法通过检查输入与先前看到的示例的接近程度来猜测对象,但是由于这次有3个输入,因此必须计算三维空间中的距离。数据的维数越多,计算分类结果的工作就越多。
进一步的想法
这只是对knn可能实现的快速了解。我们可以在库示例中找到一个有关电路板方向的示例,以及一个可以继续使用的简单示例。你也可以将ble sense板上的任何传感器用作输入,甚至可以将knn与其他ml技术结合使用。
当然,还有其他可用于arduino的机器学习资源,包括tensorflow lite教程以及专业工具(如edge impulse和qeexo)的支持。在接下来我们将更多的在arduino上探索机器学习。
原文标题:使用arduino knn进行简单的机器学习
文章出处:【微信公众号:fpga入门到精通】欢迎添加关注!文章转载请注明出处。


BGA返修台取代热风枪,优势在哪里?
宝雅新能源15亿元获一汽吉林70.5%的股权 将顺利获得生产资质
手表镜片玻璃如何测量尺寸
LED神奇的面光源 光效更高更省电
轻量应用服务器到底有多好?华为云云耀云服务器 L 实例来告诉你
如何使用Arduino KNN库进行简单的机器学习?
区块链技术用于食品行业将从根本去改变我们的饮食卫生条件
人工智能在视频时代能做些什么
LogiCORE IP JESD204内核概述
双绕组变压器差动保护中电流互感器的接线知识
什么是CPU 64位技术
深度访谈全球新任首富马斯克全文
可穿戴设备在消防领域有哪些应用
昆仑芯临港办公区正式启用
先楫发布RISC-V微控制器HPM6200 支持双精度浮点运算及DSP扩展
京东方巩固全球第一的地位,贸易战无法改变其行业地位
基于原型验证系统的高清视频编解码样例设计
三相稳压器的作用与功效是什么?三相稳压器的主要用途有哪些?
浅显易懂地讲清楚什么是电磁兼容
荷兰国际集团ING正在探索各种利用区块链的方式