Какое k выбрать для классификатора? Способ «исключи по одному» (leave-one-out): каждую точку по очереди убираем из выборки, классифицируем по остальным и сравниваем с настоящей меткой. Доля угаданных — точность для данного k. Функция best_k(data, candidates) должна вернуть k с наибольшей точностью, а при равенстве — наименьшее. Классификатор classify написан верно, но в loo_accuracy и best_k есть по одной ошибке. Найдите и исправьте их.
Пример
data = [
([0, 0], "A"), ([0, 1], "A"), ([1, 0], "A"), ([1, 1], "A"),
([5, 5], "B"), ([5, 6], "B"), ([6, 5], "B"), ([6, 6], "B"),
([0.5, 0.5], "B"), # шум внутри скопления A
]
loo_accuracy(data, 1) # 0.444…: шум сбивает всех соседей из A
loo_accuracy(data, 3) # 0.888…
best_k(data, [1, 3, 5]) # 3 — у k = 3 и k = 5 точность одинаковая, берём меньшее