First page Back Continue Last page Overview Graphics

Exercise: Using the Real Distance

The previous approach took only the ranking of the neighbors according to their distance in account. We can improve the voting by using the actual distance. To this purpos we will write a new voting function:

def vote_distance_weights(neighbors, all_results=True):

class_counter = Counter()

number_of_neighbors = len(neighbors)

for index in range(number_of_neighbors):

dist = neighbors[index][1]

label = neighbors[index][2]

class_counter[label] += 1 / (dist**2 + 1)

labels, votes = zip(*class_counter.most_common())

winner = class_counter.most_common(1)[0][0]

votes4winner = class_counter.most_common(1)[0][1]

if all_results:

total = sum(class_counter.values(), 0.0)

for key in class_counter:

class_counter[key] /= total

return winner, class_counter.most_common()

else:

return winner, votes4winner / sum(votes)