2016-12-25 2 views
1

программы K ближайшего соседа MLIndexError: индекс списка из диапазона в питона K ближайшего соседа

import numpy as np 
    import math 
    import matplotlib.pyplot as plt 
    from matplotlib import style 
    from collections import Counter 

    dataset={'k':[[1,2],[2,3],[3,1]], 'r':[[6,5],[7,7],[8,6]]} 
    new_features=[5,7] 

    def k_nearest_neigh(data,predict,k=3): 
     distances = [] 
     if len(data)>=k: 
      warnings.warn('jerk') 
      for group in data: 
       for features in data[group]: 
        eu_dist=np.linalg.norm(np.array(features)-np.array(predict)) 
        distances.append([eu_dist,group]) 
        print(distances) 
     votes=[i[1] for i in sorted(distances)[:k]] 
     print(Counter(votes).most_common(1)) 
     vote_result=Counter(votes).most_common(1)[0][0] 
     return vote_result    

    result=k_nearest_neigh(dataset,new_features,k=3) 
    print(result) 

Программа бросает ошибку

line 32, in k_nearest_neigh 
    vote_result=Counter(votes).most_common(1)[0][0] 

IndexError: list index out of range 

Пробовал различные способы и методы много раз, но ошибка упорный.

+0

Кажется, что 'vote' является пустой итерируемой! – Kasramvd

+0

Возможно, вы забыли 'else' после строки' warning.warn', чтобы циклы фактически выполнялись? – tihom

ответ

0

Ваш отступ выключен: вы должны либо предупредить, либо запустить цикл. вот одна версия, как вы могли исправить это:

def k_nearest_neigh(data,predict,k=3): 
    if len(data)>=k: 
     warnings.warn('jerk') 
     return 
    distances = [] 
    for group in data: # do this whenever you issue no warning. 
     ....