十五天掌握OpenCV——机器学习—K近邻(k-Nearest Neighbour)

魏老师学生——Cecil:学习OpenCV-机器视觉之旅

  • KNN原理
  • OpenCV中的kNN

KNN原理

  1. 最简单的监督学习分类器,找出测试数据在特征空间中的最近邻居。
  2. 简单近邻:查看新数据最近的邻居属于哪个家族,就被分到哪个家族。
  3. kNN:对测试数据的k个最近邻居进行检测,k数据中哪个类占多数,新成员就属于哪个类。为了避免产生相等情况,最好取奇数,避免死结。
  4. 修改后的kNN:对最近的k个邻居按照距离赋予不同权重,从而得到判断结果。
  5. 方法:测量新元素到现存每个元素之间的距离,再找出最近的所需个数元素。数据集越大,时间复杂度和空间复杂度越高。

OpenCV中的kNN

#coding=utf-8
import cv2
import numpy as np
from matplotlib import pyplot as plt

#先对导入图片内容进行分类标记,在用随机数产生器,最后绘制出点。
trainData=np.random.randint(0,100,(25,2)).astype(np.float32)
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')

"""
kNN算法分类器的初始化:
1.传入一个训练数据集,与训练数据对应的分类来训练kNN分类器(构建搜索树)
2.使用opencv中的kNN分类器进行分类。
测试数据:大小为数据数目乘以特征数目的浮点型数组
返回值:
1.由kNN算法计算得到的测试数据的类别标志。0或1
2.k个最近邻的类别标志
3.每个最近邻到测试数据的距离
"""

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

knn=cv2.KNearest()
knn.train(trainData,responses)
ret,results,neighbours,dist=knn.find_nearest(newcomer,3)
print("result:",results,"\n")
print("neighbours:",neighbours,"\n")
print("distance:",dist,"\n")
plt.show()

你可能感兴趣的:(机器视觉)