我正在构建一个计算机视觉实时应用程序,对于这个项目,我想以一种非常不寻常的方式使用著名的KNN(K-最近邻)算法。 我需要管理传入的数据流(可以描述为带标签的点),因此我的想法是向KNN提供我目前拥有的数据,要求对一些未知点进行分类。当新数据出现时,用这些新数据更新KNN,并重复一次又一次。 一般来说,我会重新训练KNN上百次,每次都会多加几分(少于5分)
我在整个项目中使用Python(3.83.)和OpenCV(4.1.3),将来我需要将所有的东西转换成C++,所以我希望能找到这些技术的解决方案。p>
我在cv::ml::KNearest
方面遇到了问题,它允许我训练模型,但每次训练都完全忽略了以前的训练,它会忘记数据,因此我无法“更新KNN”。我怎样才能解决它
updateBase
,但在版本4中它似乎消失了李>classify
函数,如果前面两个问题没有解决方案,您建议如何改进此实现李>class MyKNN:
def __init__(self):
self.knnPoints = []
self.knnLabels = []
def train(self, points, labels) -> None:
if len(points) != len(labels):
print("Error: len(points) != len(labels)")
else:
[ self.knnPoints.append(el) for el in points ]
[ self.knnLabels.append(el) for el in labels ]
def classify(self, query, k: int=5) -> "label":
distances = []
for point in self.knnPoints:
dist = spatial.distance.sqeuclidean(query, point)
distances.append(dist)
topK = heapq.nsmallest(k, zip(distances, self.knnLabels, self.knnPoints))
for (i, (score, label, point)) in enumerate(topK):
print("The {} match has score {:.3f} and label {}".format(i+1, score, str(label)))
print("")
return(topK)
目前没有回答
相关问题 更多 >
编程相关推荐