First page Back Continue Last page Overview Graphics

Exercise

Write a new vote function (vote_harmonic_weights), which weights the neighbors according to the previously described approach.

def vote_harmonic_weights(neighbors, all_results=True):

class_counter = Counter()

number_of_neighbors = len(neighbors)

for index in range(number_of_neighbors):

class_counter[neighbors[index][2]] += 1/(index+1)

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

#print(labels, votes)

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)