Алгоритм KNN, также известный как алгоритм классификации K-ближайших соседей.

Алгоритм K-NN проверяет новую запись данных, сравнивая ее со значениями, представленными в предоставленном наборе данных, состоящем из различных классов или категорий. Оценивая его близость или сходство с определенным диапазоном (K) соседних точек данных, алгоритм относит новые данные к классу или категории в наборе данных.

Ниже приведены шаги, которые необходимо выполнить для алгоритма KNN.

Шаг 1. Подготовьте набор данных с различными категориями или классами.

Шаг 2. Определите значение K.

K — это не что иное, как квадратный корень из общего количества записей в наборе данных. K не должно делиться на количество категорий, существующих в наборе данных, и K всегда должно быть нечетным.

Шаг 3. Определите данные запроса

Шаг 4. Рассчитайте расстояние между точкой запроса и каждым элементом набора данных и сохраните его в списке.

Шаг 5. Отсортируйте список

Шаг 6. Выберите из списка первые K элементов.

Шаг 7: Определяем режим категорий верхних K элементов, который и будет нашим ответом.

Давайте возьмем в качестве примера две группы точек, такие как красная группа и зеленая группа, у нас есть точка запроса, и нам нужно определить, к какой группе принадлежит эта группа.

Зеленая группа

[(2,3), (1,2), (1,4), (2,4), (1,3), (3,2), (3.5,1), (1,3.5), (0.5,1.5)]

Красная группа

[(6,3), (5,2), (4,4), (3.5,4.5), (5,4), (6,3), (5,3)]

Точка запроса

(3.5,3.5)

def myFunc(a):
    return a[1]
a=[(2,3),(1,2),(1,4),(2,4),(1,3),(3,2),(3.5,1),(1,3.5),(0.5,1.5)]
b=[(6,3),(5,2),(4,4),(3.5,4.5),(5,4),(6,3),(5,3)]
n=int((len(a)+len(b))**0.5)
if n%2==0: n+=1
print("N for the following data sets is:",n)
c=(3.5,3.5)
print("Data Set (A):",a)
print("Data Set (B):",b)
print("Query Point (C):",c)
frequencyList=[]
for i in a: frequencyList.append(('A',((c[0]-i[0])**2+(c[1]-i[1])**2)**0.5))
for i in b: frequencyList.append(('B',((c[0]-i[0])**2+(c[1]-i[1])**2)**0.5))
frequencyList.sort(key=myFunc)
frequencyList=frequencyList[:n]
print(frequencyList)
ans=None
aa=0
bb=0
for i in frequencyList:
    if i[0]=='A':aa+=1
    if i[0]=='B':bb+=1
    if aa>bb: ans='A'
    else: ans='B'
print()
print(f"{c} belongs to {ans} group")

Мы ясно видим, что есть 5 ближайших точек, из которых 3 принадлежат красной (A) группе и 2 принадлежат зеленой (B) группе, таким образом, ответ A