解析C++版OpenCV里的机器学习

磐创AI
关注

使用openCV的Knn

定义

在人工智能中,更确切地说在机器学习中,k最近邻方法是一种有监督的学习方法。在这个框架中,我们有一个由N个“输入-输出”对组成的训练数据库。为了估计与新输入x 相关联的输出,k最近邻方法包括根据要定义的距离(以相同的方式)考虑k个训练样本,其输入最接近新输入x。由于此算法基于距离,因此归一化可以提高其准确性。

方法

因此,要使用KNN方法进行分类,我们必须首先声明训练样本,或者可以说输入数据。

在声明了0和1矩阵之后,我们必须使用函数“RNG”将它们填充为随机值。

现在我们需要将两个类连接起来,以便进行学习。

训练

要进行训练,你必须首先使用以下代码行创建模型:

现在,我们将进行遍历整个图像的循环(我们选择的平面为500x500像素,以绘制不同类别的区域,当然也将点放置在它们的位置),然后学习模型的输出对于第一类将为0,对于第二类将为1。通过查找(或者可以说通过计算距离),我们用定义该像素属于此类的颜色填充图像的每个像素,这样就可以使边框可视化。因此,要进行训练,你必须首先使用以下代码行创建模型:

因此,你可以看到我们具有find_nearest函数,该函数计算入口点与其他点之间的距离以查找邻居,然后该函数为第一个类返回0或为第二个返回1。最后,我们使用了条件块if,为每个类赋予特定的颜色。因此,通过执行这些步骤,我们进行了学习,找到了两个类,并且我们当然划定了边界,如图:

现在,如果我们想展示用于学习的样本,我们只需要把每个要点放在适当的位置即可,这样我们就可以了解学习是否做得很好。

这是样本表示后的输出图像:

可以看出,这两个类的界限是明确的,有一些点没有很好地分类,但总的来说,学习效果不错。

声明: 本文由入驻OFweek维科号的作者撰写,观点仅代表作者本人,不代表OFweek立场。如有侵权或其他问题,请联系举报。
侵权投诉

下载OFweek,一手掌握高科技全行业资讯

还不是OFweek会员,马上注册
打开app,查看更多精彩资讯 >
  • 长按识别二维码
  • 进入OFweek阅读全文
长按图片进行保存