机器学习——OpenCV实现K-NN
2019-02-26 21:57
211 查看
k-NN是最简单的机器学习算法之一,简单而言k-NN算法认为一个数据点很可能与它近邻点同属于一类,sklearn实现k-NN算法后面再复习一下,这次先学习OpenCV当中cv2.ml.KNearest_create()实现k-NN。
步骤:
- 得到一些训练数据
- 指定K值,创建对象
- 找到想要分类的新数据点的k个最近邻的点
- 使用多数投票来分配新数据点的类标签
- 画出结果图
特别注意:OpenCV当中必须要求吧数据点的类型转换成np.float32!
问题背景:一个古老的问题,小镇熵红蓝球迷们的分类问题。
先看代码:
[code]# ——创建时间:2019.2.26—— # OpenCV实现kNN # 问题背景:区分小镇红蓝不同的球迷 import numpy as np import cv2 import matplotlib.pyplot as plt # 设置绘图属性 plt.style.use('ggplot') # 生成训练数据 # 输入:每个点的个数和每个数据点的特征数 def generate_data(num_samples, num_features): 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 # 确保将数据转换成np.float32 train_data, labels = generate_data(11, 2) # 分红和蓝色分别作图 def plot_data(all_blue,all_red): 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 coordinate (feature 1)') plt.ylabel('y coordinate (feature 2)') print("train_data:",train_data) # 观察数据集 # 平面化数据 bule = train_data[labels.ravel()== 0] red = train_data[labels.ravel() == 1] plot_data(bule,red) plt.show() # 训练分类器 knn = cv2.ml.KNearest_create() # 实例化 knn.train(train_data, cv2.ml.ROW_SAMPLE,labels) # 利用findNearest发现新的数据点 newcomer,_ = generate_data(1,2) plot_data(bule,red) plt.plot(newcomer[0,0],newcomer[0,1],'go',markersize=14) plt.show()
看输出:
train_data:
train_data: [[23. 2.]
[24. 49.]
[61. 48.]
[55. 0.]
[17. 10.]
[82. 32.]
[17. 2.]
[16. 69.]
[52. 6.]
[ 5. 6.]
[62. 77.]]
原图:
KNN分类后的图:
绿色点是距离红点、蓝点距离相同的点,即为KNN预测值
相关文章推荐
- OpenCV机器学习概观、资源、实现
- 机器学习:k-NN(k近邻法)kd树实现
- 机器学习(11.4)--神经网络(nn)算法的深入与优化(4) -- CorssEntropyCost(交叉熵代价函数)数理分析与代码实现
- [机器学习]基于OpenCV实现最简单的数字识别
- OpenCV机器学习:SVM分类器实现MNIST手写数字识别
- 机器学习(11.5)--神经网络(nn)算法的深入与优化(5) -- softmax的代码实现
- [机器学习]基于OpenCV实现最简单的数字识别
- 机器学习---opencv实现简单的KNN算法
- OpenCV机器学习(1):贝叶斯分类器实现代码分析
- [机器学习]基于OpenCV实现最简单的数字识别
- [机器学习]基于OpenCV实现最简单的数字识别
- OpenCV机器学习概观、资源、实现
- 基于机器学习的捡球机器人设计与实现(探索)第3篇——opencv基础知识学习(2019-02-02)
- [机器学习]基于OpenCV实现最简单的数字识别
- OpenCV实现人脸检测
- OpenCV图像增强算法实现(直方图均衡化、拉普拉斯、Log、Gamma)
- 基于python、dlib和opencv的200行代码实现的换脸
- OpenCV学习第三篇:图片的掩膜操作(实现图像的对比度调整)
- Opencv实现图像旋转
- 《机器学习》+周志华+第五章习题+5.5实现标准BP算法和累积BP算法