龙空技术网

机器学习笔记:OpenCV和Python实现k-NN算法

狮范客 223

前言:

眼前我们对“openmv算法”大致比较注意,看官们都需要了解一些“openmv算法”的相关文章。那么小编在网上搜集了一些有关“openmv算法””的相关内容,希望兄弟们能喜欢,小伙伴们一起来了解一下吧!

在OpenCV中,可以使用cv2.ml.KNearest_create()函数来创建一个k-NN模型。实现的步骤主要分为以下几步:

生成训练数据。指定k值,创建一个k-NN对象。找到想要分类的新数据点的k个最近邻的点。使用多数投票来分配新数据点的类标签。绘制结果图。

# -*- coding:utf-8 -*-"""OpenCV实现k-NN算法"""import numpy as npimport cv2import matplotlib.pyplot as plt# 生成训练数据(使用numpy的随机数生成器random实现)np.random.seed(42) # 固定随机数生成器的种子为42def generate_data(num_samples, num_features=2): """ 生成数据函数。 :param num_samples: 需要生成的数据点个数 :param num_features: 需要生成的数据点特征数(x坐标和y坐标) :return: 训练数据和标签 """ # 创建数据矩阵:有num_samples行,num_features列,每个元素是[0,100]范围内的随机整数 data_size = (num_samples, num_features) data = np.random.randint(0, 100, size=data_size)  # 创建标签向量:0,1两种类型 label_size = (num_samples, 1) labels = np.random.randint(0, 2, size=label_size)  # 指定数据类型为float32 return data.astype(np.float32), labels  # 生成训练数据train_data, labels = generate_data(11)def plot_data(all_blue, all_red): """ 绘制数据函数 :param all_blue: 蓝色数据 :param all_red: 红色数据 :return: None """ 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 坐标') plt.ylabel('y 坐标') plt.show()  # ravel():平面化数组blue = train_data[labels.ravel() == 0]red = train_data[labels.ravel() == 1]# 绘制所有的数据点plot_data(blue, red)# 训练分类器knn = cv2.ml.KNearest_create()knn.train(train_data, cv2.ml.ROW_SAMPLE, labels)# 预测新数据点的类别newcomer, _ = generate_data(1) # 使用_让python忽略输出值plot_data(blue, red)plt.plot(newcomer[0, 0], newcomer[0, 1], 'go', markersize=14)# 设置k值等于7ret, results, neighbor, dist = knn.findNearest(newcomer, 7)print("预测标签: ", results)print("邻居标签: ", results)print("和邻居的距离: ", results)

来源网络,侵权删除

标签: #openmv算法