本帖最后由 guguli 于 2024-7-31 23:22 编辑
#申请原创# 在MCU上部署机器学习算法的尝试(一) 随着人工智能在生活应用的越来越多,机器学习就走进了大众的视野,机器学习是人工智能的一个重要分支,它专注于开发算法和技术,使计算机系统能够从数据中学习和改进。机器学习的核心目标是让计算机系统能够从经验中学习,机器学习依赖于大量的数据作为学习的基础。
现在机器学习已经广泛应用于许多领域,那么如何在MCU上部署机器学习呢?在 MCU上,通常使用的确实是C语言作为主要的编程语言,MCU相比传统计算机平台有一些限制和特殊需求,MCU通常具有有限的处理能力、内存和存储空间。这意味着需要精简和优化机器学习模型,以适应这些资源限制。选择适合MCU的机器学习算法和模型结构至关重要。通常会选择轻量级的模型,如基于线性模型或小型神经网络的模型,而不是复杂的深度神经网络。同时,需要平衡模型的复杂度和性能要求。将机器学习部署到MCU上需要综合考虑计算能力、能效、数据处理和实时性等多方面的因素。
想要在MCU上部署机器学习算法,考虑到MCU的局限性,我的第一个想法就是尝试在MCU上运行我认为机器学习最简单的算法:K邻近算法;K邻近(K-Nearest Neighbors, KNN)算法是一种简单而有效的监督学习算法,用于分类和回归问题。KNN算法基于一个简单的假设:与一个样本最相似的样本,其标签也应该是相似的。换句话说,样本的类别可以通过其最近邻的类别来决定。对于分类问题,给定一个未标记的样本,KNN算**从训练集中找到与该样本最接近(最相似)的K个样本(即最近邻)。然后,通过多数表决的方式,将该未标记样本分配给K个最近邻中最常见的类别。KNN算法使用距离度量来确定最近邻。常用的距离度量包括欧式距离、曼哈顿距离等。K是KNN算法的一个关键参数,决定了最终预测的准确性。选择合适的K值通常通过交叉验证来确定,以避免过拟合或欠拟合问题。KNN算法通常适用于以下情况:数据集中类别的分布比较均匀的分类问题。对计算效率要求不是特别高的场景。
由于之前的KNN算法的实现,是使用Python在计算机上训练的,在MCU上并不允许,所以我想到的第一个方法就是,使用C语言实现KNN算法,代码如下:
首先定义一个结构体,用于存储分类的点x和y坐标,以及所属的标签,然后定义函数去计算目标点和参考点的距离,然后比较目标点和多个参考点的距离
将目标点和参考点之间的距离计算完毕后,对计算的距离进行排序,选出和目标点最小距离的参考点,确定目标点的分类
要将目标点进行分类,就要选取参考点进行训练,这里只选取了四个点进行训练,将待分类的点进行2分类,最后通过串口打印分类结果
要保证分类的准确,就要使数据集足够大,当数据集足够大,MCU的资源就产生了限制。虽然这种方法属于是在没事找事,但也算是进行了一个小小的实验。
|
此文章已获得独家原创/原创奖标签,著作权归21ic所有,未经允许禁止转载。
一次机器学习算法在MCU上的部署尝试,作者通过使用C语言实现KNN算法,并在MCU上实现。
感谢大佬的文章分享~后续申请原创请@21小跑堂,以便跑堂及时安排审核~~~