KNN最近邻分类算法

如题所示,该算法简称KNN,采用的方法是最近邻,目的是分类。

KNN算法概述

在已有数据集中已将数据分为n类,那么如果此时再进来一个新的数据如何给他分类呢?

应该选取距离他最近的k个邻居(k由你定),选择范围内样本数量最多的类别作为新数据的类别。

如果多个类别的样本数量同时最多时,根据距离权重来判断,离的近的决定其类别。

OpenCv中的KNN

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

# 包含(x,y)值的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)
# 新来物
newcomer = np.random.randint(0,100,(1,2)).astype(np.float32)

# KNN
knn = cv.ml.KNearest_create()
knn.train(trainData, cv.ml.ROW_SAMPLE, responses)
ret, results, neighbours ,dist = knn.findNearest(newcomer, 5)

print( "result:  {}\n".format(results) )
print( "neighbours:  {}\n".format(neighbours) )
print( "distance:  {}\n".format(dist) )

# 绘图方面:
# 取红色族并绘图
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.scatter(newcomer[:,0],newcomer[:,1],80,'g','o')
plt.show()


其他参考:

python散点图绘制scatter

cv::ml::StatModel::train

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东东咚咚东

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值