疫情继续,单纯学图像越学越迷,越感觉图像离不开机器学习神经网络这些,虽然感觉做的东西已经太杂了,但是还是该学学这方面。故正式开始学,不管能不能做很深,先要了解一下入个门。
开始,第一个测试
如图,已经有一些随机数据了,导入另一个新的数据(绿点),根据其邻居的属性来对其进行分类,k为选取邻居的数量,在本次实验中选取3个邻居,一般要选奇数个邻居,与邻居的距离采用欧式距离计算公式
理解knn:根据k个邻居的属性判断自己的属性,一般选奇数个邻居,被修改过得knn,根据与邻居远近的不同改变权重
贴上代码,抄自《OpenCV-Python-Tutorial-中文版20160814》
import cv2
import numpy as np
import matplotlib.pyplot as plt
traindata = np.random.randint(0, 100, (25, 2)).astype(np.float32)
resonses = np.random.randint(0, 2, (25, 1)).astype(np.float32)
red = traindata[resonses.ravel() == 0]
plt.scatter(red[:, 0], red[:, 1], 80, 'r', '^')
blue = traindata[resonses.ravel() == 1]
plt.scatter(blue[:, 0], blue[:, 1], 80, 'b', 's')
newcomer = np.random.randint(0, 100, (1, 2)).astype(np.float32)
plt.scatter(newcomer[:, 0], newcomer[:, 1], 80, 'g', 'o')
# 新来一个数组
# newcomer = np.random.randint(0, 100, (10, 2)).astype(np.float32)
# plt.scatter(newcomer[:, 0], newcomer[:, 1], 80, 'g', 'o')
knn = cv2.ml.KNearest_create()
knn.train(traindata, cv2.ml.ROW_SAMPLE, resonses)
ret, result, neighbours, dist = knn.findNearest(newcomer, 3)
print("result", result, "\n")
print("neighbours", neighbours, "\n")
print("distance", dist)
plt.show()