资讯专栏INFORMATION COLUMN

OpenCV闯关记——kNN算法在OpenCV中的实践

baihe / 2962人阅读

摘要:什么是算法邻近算法,或者说最近邻,分类算法是数据挖掘分类技术中最简单的方法之一。方法在类别决策时,只与极少量的相邻样本有关。

什么是kNN算法

邻近算法,或者说K最近邻(kNN,k-NearestNeighbor)分类算法是数据挖掘分类技术中最简单的方法之一。所谓K最近邻,就是k个最近的邻居的意思,说的是每个样本都可以用它最接近的k个邻居来代表。
kNN算法的核心思想是如果一个样本在特征空间中的k个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特性。该方法在确定分类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。 kNN方法在类别决策时,只与极少量的相邻样本有关。由于kNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属类别的,因此对于类域的交叉或重叠较多的待分样本集来说,kNN方法较其他方法更为适合。

环境准备

安装Ubuntu16.04桌面版 or 安装好桌面的服务器版

OpenCV闯关记——Ubuntu16.04 OpenCV Python开发环境搭建

安装numpy,numpy是什么

pip install numpy
# 在国内往往会安装失败,如果安装失败,可通过先wget xxx.whl在运行pip install解决
# 比如:
wget https://pypi.python.org/packages/5e/d5/3433e015f3e4a1f309dbb110e8557947f68887fe9b8438d50a4b7790a954/numpy-1.11.2-cp27-cp27mu-manylinux1_x86_64.whl#md5=fa62a11922a9e0776963508fb5254d3d
pip install numpy-1.11.2-cp27-cp27mu-manylinux1_x86_64.whl

安装matplotlib,matplotlib是什么

pip install matplotlib
# 如安装失败的话,解决办法参考安装numpy的解决办法
Coding
# encoding: utf-8

import cv2
import numpy as np
import matplotlib.pyplot as plt

train_data = np.random.randint(0, 100, (25, 2)).astype(np.float32)

responses = np.random.randint(0, 2, (25, 1)).astype(np.float32)

red = train_data[responses.ravel() == 0]
plt.scatter(red[:,0], red[:,1], 80, "r", "^")

blue = train_data[responses.ravel() == 1]
plt.scatter(blue[:,0], blue[:,1], 80, "b", "s")

# plt.show()

newcomer = np.random.randint(0, 100, (1, 2)).astype(np.float32)
plt.scatter(newcomer[:,0], newcomer[:,1], 80, "g", "o")

knn = cv2.ml.KNearest_create()
knn.train(train_data, cv2.ml.ROW_SAMPLE, responses)
ret, results, neighbours, dist = knn.findNearest(newcomer, 5)

print("result: ", results)
print("neighbours: ", neighbours)
print("distance: ", dist)

plt.show()
运行结果

代码解释

生成待训练的数据和标签

train_data = np.random.randint(0, 100, (25, 2)).astype(np.float32)

responses = np.random.randint(0, 2, (25, 1)).astype(np.float32)

在图中标记红色样本

red = train_data[responses.ravel() == 0]
plt.scatter(red[:,0], red[:,1], 80, "r", "^")

在图中标记蓝色样本

blue = train_data[responses.ravel() == 1]
plt.scatter(blue[:,0], blue[:,1], 80, "b", "s")

产生待分类数据

newcomer = np.random.randint(0, 100, (1, 2)).astype(np.float32)
plt.scatter(newcomer[:,0], newcomer[:,1], 80, "g", "o")

训练样本并产生分类

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

给新数据分类

ret, results, neighbours, dist = knn.findNearest(newcomer, 5)

在图中显示所有数据

plt.show()
Referer

Understanding k-Nearest Neighbour

wikipedia: k-nearest neighbors algorithm

kNN(K-Nearest Neighbor)最邻近规则分类

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/38274.html

相关文章

  • opencv python K最近邻

    Understanding k-Nearest Neighbour 我们将Red系列标记为Class-0(由0表示),将Blue 系列标记为Class-1(由1表示)。 我们创建了25个系列或25个训练数据,并将它们标记为0级或1级.在Matplotlib的帮助下绘制它,红色系列显示为红色三角形,蓝色系列显示为蓝色方块. import numpy as np import cv2 import ...

    ThinkSNS 评论0 收藏0
  • opencv+mtcnn+facenet+python+tensorflow 实现实时人脸识别

    摘要:实现实时人脸识别本文记录了在学习深度学习过程中,使用,开发环境为,实现局域网连接手机摄像头,对目标人员进行实时人脸识别,效果并非特别好,会继续改进这里是项目地址项目中用到的大文件地址如果各位老爷看完觉得对你有帮助的话,请给个小星星,当前时间 opencv+mtcnn+facenet+python+tensorflow 实现实时人脸识别 Abstract:本文记录了在学习深度学习过程中,...

    megatron 评论0 收藏0

发表评论

0条评论

baihe

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<