使用 OpenCV 实现 k-NN

标题

使用k-NN算法进行预测类别

根据已知的的两种(蓝队和红队)数据坐标点用k-NN算法进行判别:
离哪一队越近,越有可能是哪队
import numpy as np
import cv2
import matplotlib.pyplot as plt

#生成训练数据
plt.style.use(‘ggplot’)
np.random.seed(42) # 固定随机数生成器的种子值
single_data_point = np.random.randint(0, 100, 2)
single_label = np.random.randint(0, 2)
#把上述过程包装成函数,输入是要生成数据点个数和特征数
def generate_data(num_samples, num_features=2):
data_size = (num_samples, num_features)
data = np.random.randint(0, 100, size=data_size)
labels_size = (num_samples, 1)
labels = np.random.randint(0, 2, size=labels_size)
return data.astype(np.float32), labels
train_data, labels = generate_data(11)
#一次显示所有训练数据集:
def plot_data(all_blue, all_red):
plt.scatter(all_blue[:, 0], all_blue[:, 1], c=‘b’, marker=‘s’, s=180) # 'c’代表颜色, 's’表示size in points^2 默认为20, ‘marker’表示MarkerStyle 默认为’o’。
plt.scatter(all_red[:, 0], all_red[:, 1], c=‘r’, marker=’^’, s=180) # 同理
plt.xlabel(‘x coordinate (feature 1)’)
plt.ylabel(‘y coordinate (feature 2)’)
plt.show()

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)
plot_data(blue, red)
plt.plot(newcomer[0, 0], newcomer[0, 1], ‘go’, markersize=10);
plt.show()
ret, results, neighbor, dist = knn.findNearest(newcomer, 1)
print(“Predicted label:\t”, results)
print(“Neighbor’s label:\t”, neighbor)
print(“Distance to neighbor:\t”, dist)
#运行结果(对应图片):
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
#此为本人第一遍博客如果有什么不足之处请留言指出,希望大家多多包涵,共同进步。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值