-
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathEuclideanDistance.py
More file actions
94 lines (69 loc) · 2.45 KB
/
EuclideanDistance.py
File metadata and controls
94 lines (69 loc) · 2.45 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
import numpy as np
from math import sqrt
import matplotlib.pyplot as plt
from collections import Counter
from matplotlib import style
import warnings
import random
import pandas as pd
style.use('fivethirtyeight')
dataset={'k':[[1,2],[2,3],[3,1]], 'r':[[6,5],[7,7],[8,6]]}
new_features=[5,7]
#for i in dataset:
#for ii in dataset[i]:
#plot1=[1,3]
#plot2=[2,5]
#euclidean_distance=sqrt((plot1[0]-plot2[0]**2 + plot1[1]-plot2[1])**2)
#print(euclidean_distance)
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]:
#euclidean_distance=np.sqrt(np.sum((np.array(features)-np.array(predict))**2))
euclidean_distance=np.linalg.norm(np.array(features)-np.array(predict))
distances.append([euclidean_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]
confidence=Counter(votes).most_common(1)[0][1]/k
print(vote_result,confidence)
return vote_result,confidence
result=k_nearest_neighbors(dataset,new_features,k=3)
print(result)
[[plt.scatter(ii[0], ii[1], s=100, color=i) for ii in dataset[i]] for i in dataset]
plt.scatter(new_features[0],new_features[1],color=result)
plt.show()
accuracies=[]
for i in range(5):
df=pd.read_csv("breast-cancer-wisconsin.data.txt")
df.replace('?',-99999, inplace=True)
df.drop(['id'],1,inplace=True)
print(df.head())
full_data=df.astype(float).values.tolist()
random.shuffle(full_data)
test_size=0.4
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 test_data:
test_data=[i[-1]].append(i[:-1])
correct=0
total=0
for group in test_set:
for data in test_set[group]:
vote,confidence=k_nearest_neighbors(train_set, data, k=5)
if group == vote:
correct+=1
else:
print(confidence)
total+=1
print('Accuracy:', correct/total)
accuracies.append(correct/total)
print(20*'#')
print(full_data[:10])
print(sum(accuracies)/len(accuracies))