Я пытаюсь установить простую реализацию задачи KNN с набором данных из трех классов, но всякий раз, когда я пытаюсь выполнить функцию поезда, я сохраняю сказанное (-215:Assertion failed) new_samples.type() == CV_32F in function 'cv::ml::Impl::train error.
Я попытался преобразовать массив ответов во множество разных вещей, поскольку большинство ошибок происходило из той части кода, которая переходит из матрицы 1 x n
в один список. Я следую этому уроку. Я могу сделать это с двумя классами, определяя свои собственные данные, как я делаю с тремя классами, но мне не удается тренироваться с тремя классами.
import numpy as np
import cv2 as cv
classA=([(10,1,1),(9,2,2),(11,1,2),(8,3,2),(7,2,3),(8,5,4),(9,3,4),(6,6,5),(8,6,6),(9,7,7)])
classB=([(5,1,20),(5,2,19),(5,1,21),(4,2,18),(4,1,19),(6,3,20),(6,2,19),(4,4,18),(4,5,21),(6,4,19)])
classC=([(5,14,10),(6,13,9),(4,12,11),(6,11,9),(6,7,12),(7,6,13),(7,7,10), (7,8,11),(8,8,12),(7,6,11)])
points = classA + classB + classC
responses = ([0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2])
# Using numpy's array?
points_np = np.asarray(points)
responses_np = np.asarray(responses).reshape((30,1))
#print(points_np)
#print(responses_np)
knn = cv.ml.KNearest_create()
knn.train(points_np, cv.ml.ROW_SAMPLE, responses_np)
Я знаю, что и образец, и данные ответа должны следовать схожей структуре, чтобы функция могла связывать каждую точку с классом, но я думаю, что моя проблема связана с типом структуры, которую я использую для переменной ответов. Как мне сформировать или установить переменную ответов, чтобы ее можно было прочитать для функции поезда?