Python,OpenCV中的K近邻(knn K-Nearest Neighbor)及改进版的K近邻

  • 1. 效果图
  • 2. 源码
  • 参考

这篇博客将介绍将K-最近邻 (KNN K-Nearest Neighbor) 算法及改进版的K近邻,并演示如何根据K近邻进行简单的分类;

KNN 是可用于监督学习的最简单的分类算法之一,是在特征空间中搜索测试数据的最接近匹配。

KNN & 改进的KNN

  • 分类时,仅考虑距离,最好将 k 作为奇数,称之为 k-Nearest Neighbor,K近邻
  • 同样的,对于靠近它的人获得更高的权重,而远离它的人获得更低的权重。 谁的总权重最高,新人就会进入哪个类,这称为改进的 KNN。


如上图有俩个类(红色三角和蓝色方形),假设新进来一个绿色圆,那么仅考虑K近邻,如果k=1,则绿色圆属于红色;
如果k=3,则绿色圆属于红色;如果k=7,则绿色圆属于蓝色方形。那么k=4时,2个方形、2个三角,这应该怎么分类呢?

因此K近邻中最好k为奇数,以及使用改进的KNN。

1. 效果图

随意生成若干点图如下:
任意生成25个点,0:红色三角,1:蓝色方形;

随意增加一个绿色点,并预测其属于哪种类别,效果图如下:

result: [[0.]]
neighbours: [[0. 0. 0.]]
distance: [[ 25. 122. 1765.]]

可以看到下图中绿色近邻3个点为红色,预测结果也为0红色;

随意增加10个新加入的绿色点,效果图如下:
可以看到如下的预测结果中,10个点中9个的近邻点多为0:红色三角,1个点的3个近邻点多为1:蓝色方形。

result: [[0.]
[0.]
[0.]
[0.]
[0.]
[0.]
[0.]
[1.]
[0.]
[0.]]

2. 源码

# K近邻 & 改进版的K近邻(权重)# K近邻,随机生成一堆点分类为0:红色三角,1:蓝色方形。并训练KNN模型
# 然后对新加入的一个点或者多个点寻找K近邻,并预测其属于哪个分类。
# K必须为奇数,因此当3近邻时,平均法确保能找到属于固定的哪个类别;
# 改进的KNN,K为奇数,且不同的类别具有不同的权重.import cv2
import matplotlib.pyplot as plt
import numpy as np# 随机构建25个点,用于测试
trainData = np.random.randint(0, 100, (25, 2)).astype(np.float32)# 随机分类标签为 0:红色,1:蓝色
responses = np.random.randint(0, 2, (25, 1)).astype(np.float32)# 拿到属于红色类别的数据,并绘制为红色
red = trainData[responses.ravel() == 0]
plt.scatter(red[:, 0], red[:, 1], 80, 'r', '^')# 拿到绿色类别的数据,并绘制为蓝色
blue = trainData[responses.ravel() == 1]
plt.scatter(blue[:, 0], blue[:, 1], 80, 'b', 's')# 先不展示,等根据近邻点预估新加入者属于哪个类别在展示
# plt.show()# 增加1个新来者,根据k近邻3近邻来确定属于哪个分组
# newcomer = np.random.randint(0, 100, (1, 2)).astype(np.float32)
# 增加10个新来者
newcomer = np.random.randint(0,100,(10,2)).astype(np.float32)
plt.scatter(newcomer[:, 0], newcomer[:, 1], 80, 'g', 'o')knn = cv2.ml.KNearest_create()
print('knn: ', knn)print(type(trainData))
knn.train(trainData, cv2.ml.ROW_SAMPLE, responses)
ret, results, neighbours, dist = knn.findNearest(newcomer, 3)print("ret: ", ret)
print("result: ", results)
print("neighbours: ", neighbours)
print("distance: ", dist)plt.show()

参考

  • https://docs.opencv.org/3.0-beta/doc/py_tutorials/py_ml/py_knn/py_knn_index.html#knn

Python,OpenCV中的K近邻(knn K-Nearest Neighbor)及改进版的K近邻相关推荐

  1. 番外3. Python OpenCV 中如何绘制各种图形?

    本系列专栏写作方式 本系列专栏写作将采用首创的问答式写作形式,快速让你学习到 OpenCV 的初级.中级.高级知识. 3. Python OpenCV 中如何绘制各种图形? 本篇博客主要分享一下在 P ...

  2. cv2.cornerHarris()详解 python+OpenCV 中的 Harris 角点检测

    原文作者:aircraft 原文地址:https://www.cnblogs.com/DOMLX/p/8763369.html 参考文献----------OpenCV-Python-Toturial ...

  3. Python OpenCV中色彩空间的转换类型

    OpenCV中具有的色彩空间转换类型有很多,编写一个简单的Python程序,OpenCV下所支持的色彩空间转换类型 Python程序: # -*- coding: utf-8 -*-import cv ...

  4. python drawline_基于python,OPenCv中基本的绘图函数

    (一)OpenCv中,python接口的基本的绘图函数 1-用于绘制直线的--------cv2.line()函数 2-用于绘制椭圆的--------cv2.ellipse()函数 3-用于绘制矩形的 ...

  5. python opencv 中bmp转raw格式图片并展示

    python中bmp转raw格式图片并展示 import numpy as np import cv2 img = cv2.imread('data/04/04(1).bmp') # 这里需要我们在当 ...

  6. python ransac_如何在Python OpenCV中应用RANSAC

    有人能告诉我如何应用RANSAC来找到最好的4个特征匹配点及其对应的(x,y)坐标,以便我可以在我的单应码中使用它们吗? 特征匹配点由SIFT获得,代码如下:import numpy as np im ...

  7. python+opencv中imread函数第二个参数的含义

    = 0: 灰度图 0:三通道彩色图 <0:原图,带alpha通道

  8. Python OpenCV中的Stitcher.stitch图像拼接方法介绍(详细)

    目录 create stitch 示例 create 作用:创建一个Stitcher实例 函数原型: cv.Stitcher_create( [, mode]) -> retval 参数: mo ...

  9. Python+OpenCV图像处理(一篇全)

    参考:1.网易云课堂 Python+OpenCV图像处理 - 网易云课堂 2.[在水一方xym的博客]业精于勤荒于嬉,行成于思毁于随 - CSDN博客 https://blog.csdn.net/za ...

  10. 【图像处理】——Python+opencv实现提取图像的几何特征(面积、周长、细长度、区间占空比、重心、不变矩等)

    转载请注明详细地址 本文简单介绍了图像常见几何特征的概念以及求解方法 本文介绍了Python和opencv求解几何特征的常用方法 目录 其他形状外接轮廓的方法可以参考:<OpenCV-Pytho ...

最新文章

  1. how to write Makefile
  2. 如何在Gihub上面精准搜索开源项目?
  3. Access快速连接SQL Server的方法(VB代码为例)
  4. zTree 显示为‘aa’,当选择aa时,传的参数为‘22’
  5. 前端八大灵感设计,代码变为现实
  6. 新东方年会diss老板节目爆红!俞敏洪:奖励12万
  7. java json删除指定元素_简洁而优雅,Python Tablib实现将数据导出为Excel, Json等N种格式...
  8. opencv 图片叠加_基于OpenCV的红绿灯识别代码解析
  9. Chrome 52的变化
  10. R与Python手牵手:数据框的构建、读取与基本描述
  11. 面试C++后台开发考察哪些问题?
  12. 【CITE】C#默认以管理员身份运行程序实现代码
  13. 非平衡电桥电阻计算_用非平衡电桥测量电阻
  14. NAS(Network Attached Storage)协议
  15. web木马检测系统的设计与实现
  16. scipy库 signal 导入_Python scipy.signal方法代码示例
  17. 十大战略工具(4)—— SCQA架构
  18. android友盟埋点,友盟数据埋点前,你要知道这些
  19. 提取视频关键帧和关键帧的时间点信息
  20. 晋城一中oj 神奇的序列

热门文章

  1. 2021年大数据HBase(十五):HBase的Bulk Load批量加载操作
  2. 2021年大数据HBase(三):HBase数据模型!!!【建议收藏】
  3. CentOs7中安装python3.7.6
  4. mysql屏蔽关键字实现方法_PHP屏蔽过滤指定关键字的方法
  5. Python 算术运算符
  6. Failure [INSTALL_FAILED_ALREADY_EXISTS
  7. 一些js代码,自己备用的。高手不要笑话我。。(跨浏览器基础事件,浏览器检测,判断浏览器的名称、版本号、操作系统)...
  8. makefile学习(转载)
  9. 【模拟】不高兴的津津
  10. 2022-2028年中国动力电池行业深度调研及投资前景预测报告