OpenCV自学笔记二十三:K近邻算法

**K近邻算法(K-Nearest Neighbors,简称KNN)是一种常用的监督学习算法,可以用于分类和回归问题。**在OpenCV中,KNN算法有相应的函数实现,主要包含在ml模块中。

KNN算法的原理很简单,它基于样本之间的距离来进行分类或回归。对于分类问题,KNN算法将未知样本与训练集中的样本逐个比较距离,并选择距离最近的K个邻居样本,根据这K个邻居样本的标签进行投票,将未知样本归类为票数最多的标签。对于回归问题,KNN算法将未知样本与训练集中的样本逐个比较距离,并选择距离最近的K个邻居样本,然后取这K个邻居样本的平均值作为未知样本的预测值。

在OpenCV中,KNN算法的函数为`cv.ml.KNearest_create()`。下面是一个使用KNN算法进行分类的示例代码:

复制代码
import cv2 as cv

import numpy as np

# 创建KNN对象

knn = cv.ml.KNearest_create()

# 准备训练数据

trainData = np.array([[1, 1], [1, 3], [2, 2], [2, 4]], dtype=np.float32)

responses = np.array([0, 0, 1, 1], dtype=np.float32)

# 训练KNN模型

knn.train(trainData, cv.ml.ROW_SAMPLE, responses)

# 准备测试数据

testData = np.array([[3, 1]], dtype=np.float32)

# 使用KNN分类

_, results, _, _ = knn.findNearest(testData, 1)

print("结果:", results)

在上述示例中,我们首先创建了一个KNN对象。然后,准备训练数据`trainData`和对应的标签`responses`。接下来,使用`train()`函数对KNN模型进行训练。最后,准备测试数据`testData`,并使用`findNearest()`函数进行分类预测,其中参数1表示选择距离最近的1个邻居样本。

运行以上代码,将输出结果为`结果: [[0.]]`,表示测试数据被分类为标签0。

除了分类问题,KNN算法还可以用于回归问题。回归问题与分类问题类似,只是需要使用`cv.ml.KNearest_create()`创建的KNN对象设置`cv.ml.KNearest_REGRESSOR`标志,并且使用`findNearest()`函数的返回值来得到预测的连续值。

相关推荐
( ˶˙⚇˙˶ )୨⚑︎2 分钟前
【学习笔记】DiffFNO: Diffusion Fourier Neural Operator
笔记·神经网络·学习
ModestCoder_18 分钟前
【学习笔记】Diffusion Policy for Robotics
论文阅读·人工智能·笔记·学习·机器人·强化学习·具身智能
im_AMBER2 小时前
Leetcode 57
笔记·学习·算法·leetcode
im_AMBER2 小时前
Leetcode 58 | 附:滑动窗口题单
笔记·学习·算法·leetcode
伯明翰java2 小时前
Redis学习笔记-List列表(2)
redis·笔记·学习
AA陈超3 小时前
使用UnrealEngine引擎,实现鼠标点击移动
c++·笔记·学习·ue5·虚幻引擎
扶尔魔ocy4 小时前
【QT opencv】使用创建副本.clone()的场景
人工智能·opencv·计算机视觉
yy_xzz4 小时前
VCPKG && Tesseract OCR
c++·图像处理·opencv
IMPYLH5 小时前
Lua 的 assert 函数
开发语言·笔记·junit·单元测试·lua
离离茶5 小时前
【笔记1-8】Qt bug记录:QListWidget窗口的浏览模式切换为ListMode后,滚轮滚动速度变慢
笔记·qt·bug