-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathKNearNeighbors.py
More file actions
73 lines (63 loc) · 2.1 KB
/
KNearNeighbors.py
File metadata and controls
73 lines (63 loc) · 2.1 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
import os
import cv2
import numpy as np
import matplotlib.pyplot as plt
import time
import random
images = []
labels = []
targets = []
def find_K_Nearest_Neighbors(X, T, k): # X = data, T = new image to be added to data
distances = []
for i in range(len(X)):
distances.append(np.linalg.norm(X[i] - T))
distances = np.array(distances)
indices = distances.argsort()[:k]
return indices
def find_class(X, T, k):
indices = find_K_Nearest_Neighbors(X, T, k)
class_counting_list = [0, 0, 0]
for indice in indices:
class_counting_list[labels[indice]-1] += 1
return np.argmax(class_counting_list)
def add_Image_To_Dataset(data, labels, image):
data.append(image)
labels.append(find_class(data, image, 3))
return data, labels
def error(labels, targets):
return 1/2 * (np.array(labels) - np.array(targets))**2
def reset():
x = []
return x
train_folder_path_cats = r"/afhq/train/cat"
train_folder_path_dogs = r"/afhq/train/dog"
train_folder_path_wild = r"/afhq/train/wild"
images, targets = load_images(train_folder_path_cats, [1,0,0])
res = load_images(train_folder_path_dogs, [0,1,0])
images.extend(res[0])
targets.extend(res[1])
res = load_images(train_folder_path_wild, [0,0,1])
images.extend(res[0])
targets.extend(res[1])
def load_images(folder_path, class_name = None, size=(64, 64)):
images = []
image_class = []
for filename in os.listdir(folder_path):
img = cv2.imread(os.path.join(folder_path, filename))
if img is not None:
img = cv2.resize(img, size) # Resize image
images.append(img)
image_class.append(class_name)
return images, image_class #targets
#Reducing image size
images = [cv2.resize(img, (32, 32)) for img in images]
for i in range(1,11):
k = i
print("K = ", k)
data = reset()
data = images[:8]
labels = reset()
labels = targets[:8]
for i in range(8, len(images)):
data, labels = add_Image_To_Dataset(data, labels, images[i])
print("Error: ", error(labels, targets))