基于OpenCV-python的机器学习(Understanding K-Nearest Neighbour编)

基于OpenCV-python的机器学习(Understanding K-Nearest Neighbour编)

  • 摘要
  • 代码
  • 后记

摘要

大家都知道,现在学习机器学习,sklearn是标配。
不过在OpenCV里,同样也有一些机器学习的知识。
由于更新换代太快了,连官网上的Demo也是运行不起来的。
而且网友大神们也不做更新,只能自己探究记录了。

代码

import cv2
import matplotlib.pyplot as plt
import numpy as np
# %matplotlib

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')
# plt.show()
newcomer = np.random.randint(0, 100, (1, 2)).astype(np.float32)
plt.scatter(newcomer[:, 0], newcomer[:, 1], 80, 'g', 'o')
# knn = cv2.KNearest()  # 官网错误1:对象位置换了
knn = cv2.ml.KNearest_create()
# knn.train(trainData, responses)  # 官网错误2:需要加多类型
knn.train(trainData, cv2.ml.ROW_SAMPLE, responses)
# ret, results, neighbours ,dist = knn.find_nearest(newcomer, 3)  # 官网错误3:方法名字换了
ret, results, neighbours, dist = knn.findNearest(newcomer, 3)
print('result:', results)
print('neighbours:', neighbours)
print('distance', dist)
plt.show()

基于OpenCV-python的机器学习(Understanding K-Nearest Neighbour编)_第1张图片
结果:

result: [[1.]]
neighbours: [[1. 1. 1.]]
distance [[ 89. 149. 337.]]

后记

还是sklearn好用。train完后,一句score就清楚准确率了。

你可能感兴趣的:(人工智能,Python,机器学习,机器学习)