2016-07-01 3 views
0

이 코드파이썬 KeyError를 1.0

from math import sqrt 
import numpy as np 
import warnings 
from collections import Counter 
import pandas as pd 
import random 

def k_nearest_neighbors(data,predict, k =3): 
if len(data) >= k: 
    warnings.warn('K is set to a value less than total voting groups') 
distances = [] 
for group in data: 
    for features in data[group]: 
    eucliden_distance = np.linalg.norm(np.array(features)-np.array(predict)) 
    distances.append([eucliden_distance,group]) 
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 

df = pd.read_csv('bc2.txt') 
df.replace('?',-99999,inplace=True) 
df.drop(['id'],1,inplace = True) 
full_data = df.astype(float).values.tolist() 

random.shuffle(full_data) 
test_size = 0.2 
train_set = {2:[],4:[]} 
test_set = {2:[],4:[]} 
train_data = full_data[:-int(test_size*len(full_data))] 
test_data = full_data[-int(test_size*len(full_data)):] 


for i in train_data: 
train_set[i[-1]].append(i[:-1]) 

for i in train_data: 
test_set[i[-1]].append(i[:-1]) 

correct = 0 
total = 0 

for group in test_set: 
for data in test_set[group]: 
    vote = k_nearest_neighbors(train_set,data, k=5) 
    if group == vote: 
    correct += 1 
    total += 1 

print ('Accuracy:',correct/total) 

는이 오류 MSG

File "ml8.py", line 38, in <module> 
    train_set[i[-1]].append(i[:-1]) 
KeyError: 1.0 

파일 m18.py 나옵니다을 실행하기 위해 노력하고있어이

아래이 위의 코드 파일입니다 txt 파일의 샘플입니다.

id,clump_thickness,unif_cell_size,unif_cell_shape,marg_adhesion,single_epith_cell_size,bare_nuclei,bland_chrom,norm_nucleoli,mitoses,class 
1000025,2,5,1,1,1,2,1,3,1,1 
1002945,2,5,4,4,5,7,10,3,2,1 
1015425,2,3,1,1,1,2,2,3,1,1 
1016277,2,6,8,8,1,3,4,3,7,1 
1017023,2,4,1,1,3,2,1,3,1,1 
1017122,4,8,10,10,8,7,10,9,7,1 
1018099,2,1,1,1,1,2,10,3,1,1 
1018561,2,2,1,2,1,2,1,3,1,1 
1033078,2,2,1,1,1,2,1,1,1,5 
1033078,2,4,2,1,1,2,1,2,1,1 
1035283,2,1,1,1,1,1,1,3,1,1 
1036172,2,2,1,1,1,2,1,2,1,1 
1041801,4,5,3,3,3,2,3,4,4,1 

그 샘플 수업이 15을 반면

+0

안녕하세요, 여기에 입력하신 내용에 대해 'full_data'가 정의되어 있지 않습니다. 둘째로, 출력물은'ml8.py'라는 파일에 대해 말하고 있습니다 ... 어디에 있습니까? –

+0

질문이 편집되었습니다 – gllow

+0

당신의 열쇠가 존재하지 않는 것 같습니다 - "stackoverflow.com/questions/10116518/im-getting-key-error-in-python –

답변

2

당신의 train_set 만, 키 24을 포함 2.7.11 버전을 사용하고 있습니다. 대신 당신이 defaultdict와 함께 더 나은 행운을 가질 수

train_set = {2:[],4:[]} 

를 사용

:

from collections import defaultdict 
train_set = defaultdict(list) 

존재하지 않는 키에 처음 액세스에 새로운 빈리스트로 초기화됩니다 이런 식으로.