OpenCV与机器学习:使用opencv实现KNN

这篇具有很好参考价值的文章主要介绍了OpenCV与机器学习:使用opencv实现KNN。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

KNN算法,即K-Nearest Neighbor,是一种简单的机器学习算法。它的基本思想是:如果一个样本在特征空间中的K个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。KNN算法通过计算待分类样本与已知类别样本的距离,找出距离最近的K个样本,根据这K个样本的类别,通过投票的方式确定待分类样本的类别。

在KNN算法中,距离的度量方式主要有欧式距离、曼哈顿距离、余弦相似度等。其中,欧式距离是最常用的距离度量方式,计算的是两点之间的直线距离。

KNN算法的优点包括简单直观、易于实现、对异常点不敏感等。但同时,KNN算法也存在一些局限性,如对数据分布敏感、K值选择主观等。此外,对于大规模数据集和高维数据,KNN算法的效率可能会较低。

总的来说,KNN算法是一种基础且重要的机器学习算法,在数据分类、回归分析、聚类等领域都有广泛的应用。

OpenCV实现KNN

生成随机数据

import numpy as np

def generate_data(num_samples, num_features=2):
    data_size = (num_samples, num_features)
    train_data = np.random.randint(0, 100, size=data_size)
    labels_size = (num_samples, 1)
    labels = np.random.randint(0, 2, size=labels_size)
    return train_data.astype(np.float32), labels

我们构建了一个函数来生成数据集,num_samples代表的是数据量,num_features默认为2代表的是数据有两个特征。通过随机数生成数据和标签。

train_data, labels = generate_data(11)
train_data

生成的数据如下:
OpenCV与机器学习:使用opencv实现KNN,OpenCV机器学习,opencv,机器学习,人工智能

  • 注:由于随机种子的不同生成的数据很有可能不同,以实际运行结果为准(下面的画图也一样)

下面以第0个数据为例看一下数据和标签的对应

train_data[0], labels[0]

OpenCV与机器学习:使用opencv实现KNN,OpenCV机器学习,opencv,机器学习,人工智能

使用matplotlib绘制数据

import matplotlib.pyplot as plt

plt.style.use('ggplot')
plt.plot(train_data[0, 0], train_data[0, 1], color='r', marker='^', markersize=10)
plt.xlabel('x coordinate')
plt.ylabel('y coordinate')

在代码中plt.style.use(‘ggplot’)的作用是为了使得画图更加好看。随后随便画了数据中的一个点的效果如下:
OpenCV与机器学习:使用opencv实现KNN,OpenCV机器学习,opencv,机器学习,人工智能
为了方便展示数据,我们在下面构建一个绘图函数用不同的颜色和不同的形状表示不同类别的数据。

def plot_data(all_blue, all_red):
    plt.figure(figsize=(10, 6))
    plt.scatter(all_blue[:, 0], all_blue[:, 1], c='b', marker='s', s=180)
    plt.scatter(all_red[:, 0], all_red[:, 1], c='r', marker='^', s=180)
    plt.xlabel('x coordinate')
    plt.ylabel('y coordinate')

现在我们有了数据和展示函数,那么如何区分数据的类别呢,我们可以根据标签(labels)来选择不同类别的数据。不过生成的标签使用其实并不方便,在这里我们使用ravel()将数据展平。效果对比如下:

labels, labels.ravel()

OpenCV与机器学习:使用opencv实现KNN,OpenCV机器学习,opencv,机器学习,人工智能
现在我们已经有了数据的选择方式和画图方式,现在我们来画一下不同类别的数据。

blue = train_data[labels.ravel()==0]
red = train_data[labels.ravel()==1]
plot_data(blue, red)

OpenCV与机器学习:使用opencv实现KNN,OpenCV机器学习,opencv,机器学习,人工智能

OpenCV用于KNN训练

在cv2中的ml模块中有一些常见的机器学习方法,使用KNearest_create可以创建一个KNN的分类器,训练时需要传入的数据有数据、数据组织方式、标签

import cv2

knn = cv2.ml.KNearest_create()
knn.train(train_data, cv2.ml.ROW_SAMPLE, labels)

在代码中使用的数据组织方式为cv2.ml.ROW_SAMPLE,即每一行就是一条数据。

生成新数据并观察

训练完之后我们再生成一个不含标签的数据

newcomer, _ = generate_data(1)
newcomer

OpenCV与机器学习:使用opencv实现KNN,OpenCV机器学习,opencv,机器学习,人工智能
画出原始数据和新生成的不含标签的数据,一起进行对比。

plot_data(blue, red)
plt.plot(newcomer[0, 0], newcomer[0, 1], 'go', markersize=14)

在下面的图中,绿色的圆形就是新的数据,这个数据不含标签。我们观察到这个数据和蓝色方块很近,所以大概率是属于蓝色方块的。即属于第0类。
OpenCV与机器学习:使用opencv实现KNN,OpenCV机器学习,opencv,机器学习,人工智能

预测

我们先来使用最近的一个点来进行预测,这里findNearest第二个参数是1

ret, results, neighbor, dist = knn.findNearest(newcomer, 1)
results, neighbor, dist

OpenCV与机器学习:使用opencv实现KNN,OpenCV机器学习,opencv,机器学习,人工智能
然后使用最近的三个点来进行预测,这里findNearest第二个参数是3

ret, results, neighbor, dist = knn.findNearest(newcomer, 3)
results, neighbor, dist

OpenCV与机器学习:使用opencv实现KNN,OpenCV机器学习,opencv,机器学习,人工智能
可以看到预测结果是正确的

与此同时我们也可以使用predict方法进行预测。但是,首先我们需要设置k,我们要根据最近的k个
数据点来判断新数据具体属于哪一类。

使用方式如下:

knn.setDefaultK(1)
knn.predict(newcomer)

OpenCV与机器学习:使用opencv实现KNN,OpenCV机器学习,opencv,机器学习,人工智能

knn.setDefaultK(3)
knn.predict(newcomer)

OpenCV与机器学习:使用opencv实现KNN,OpenCV机器学习,opencv,机器学习,人工智能文章来源地址https://www.toymoban.com/news/detail-834144.html

到了这里,关于OpenCV与机器学习:使用opencv实现KNN的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • python机器学习入门之opencv的使用(超详细,必看)

    python机器学习入门之opencv的使用(超详细,必看)

    源码及图片请点赞关注收藏后私信博主要  opencv 广泛用于多种于计算机视觉和机器学习相关的算法 其用C++语言编写 ,主要接口也是C++语言 但也有 python等环境的接口 接下来我们着重介绍他的使用。 opencv python是一个用于解决计算机视觉问题的python库  opencv python与numpy兼容 数

    2024年02月15日
    浏览(8)
  • 【使用OpenCV进行视频人脸检测】------机器学习(附完整代码和数据集)

    【使用OpenCV进行视频人脸检测】------机器学习(附完整代码和数据集)

    上篇文章介绍了OpenCV进行照片人脸检测,今天学习的是OpenCV进行视频人脸检测,所有的参考博文、文献、视频、代码都会在文末附上链接或文件压缩包。 本文的目录如下: detectMultiScale()函数 核心部分用到的同样是detectMultiScale(),具体参数解释见上篇博客OpenCV进行照片人脸检

    2023年04月08日
    浏览(8)
  • (机器学习)——使用KNN进行水果分类
  • 实战指南:使用OpenCV 4.0+Python进行机器学习与计算机视觉

    实战指南:使用OpenCV 4.0+Python进行机器学习与计算机视觉

    💂 个人网站:【办公神器】【游戏大全】【神级源码资源网】 🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】 💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 计算机视觉和机器学习的融合为我们带来了前所未有的机会和挑战。从智能助手到

    2024年02月13日
    浏览(21)
  • 机器学习 | Python实现KNN(K近邻)模型实践

    机器学习 | Python实现KNN(K近邻)模型实践

    基本介绍 一句话就可以概括出KNN(K最近邻算法)的算法原理:综合k个“邻居”的标签值作为新样本的预测值。更具体来讲KNN分类过程,给定一个训练数据集,对新的样本Xu,在训练数据集中找到与该样本距离最邻近的K(下图k=5)个样本,以这K个样本的最多数所属类别(标签

    2024年02月13日
    浏览(13)
  • Python与OpenCV环境中,借助SIFT、单应性、KNN以及Ransac技术进行实现的图像拼接算法详细解析及应用

    一、引言 在当今数字化时代,图像处理技术的重要性不言而喻。它在无人驾驶、计算机视觉、人脸识别等领域发挥着关键作用。作为图像处理的一个重要部分,图像拼接算法是实现广阔视野图像的重要手段。今天我们将会讲解在Python和OpenCV环境下,如何使用SIFT、单应性、K

    2024年02月15日
    浏览(17)
  • OpenCV实战(30)——OpenCV与机器学习的碰撞

    随着人工智能的发展,许多机器学习算法开始用于解决机器视觉问题。机器学习是一个广泛的研究领域,包含许多重要的概念,本节我们将介绍一些主要的机器学习技术,并介绍如何使用 OpenCV 在计算机视觉系统中应用这些技术。 机器学习的核心是开发可以自行学习如何对数

    2024年02月10日
    浏览(11)
  • 人工智能-OpenCV+Python实现人脸识别(人脸检测)

    在OpenCV中使用Haar特征检测人脸,那么需要使用OpenCV提供的xml文件(级联表)在haarcascades目录下。这张级联表有一个训练好的AdaBoost训练集。首先要采用样本的Haar特征训练分类器,从而得到一个级联的AdaBoost分类器。Haar特征值反映了图像的灰度变化情况。例如:脸部的一些特征

    2024年02月06日
    浏览(50)
  • 竞赛 python 机器视觉 车牌识别 - opencv 深度学习 机器学习

    竞赛 python 机器视觉 车牌识别 - opencv 深度学习 机器学习

    🔥 优质竞赛项目系列,今天要分享的是 🚩 基于python 机器视觉 的车牌识别系统 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分 工作量:3分 创新点:3分 🧿 更多资料, 项目分享: https://gitee.com/dancheng-senior/postgraduate 车牌识别其实是个经典的机器视觉任务了,

    2024年04月11日
    浏览(18)
  • opencv机器学习车牌识别系统

    opencv机器学习车牌识别系统

    文章目录 0 前言+ 1 课题介绍+ 1.1 系统简介+ 1.2 系统要求+ 1.3 系统架构 2 实现方式+ 2.1 车牌检测技术+ 2.2 车牌识别技术+ 2.3 SVM识别字符+ 2.4 最终效果 3 最后 这两年开始,各个学校对毕设的要求越来越高,难度也越来越大… 毕业设计耗费时间,耗费精力,甚至有些题目即使是专

    2024年02月05日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包