Skip to content

Instantly share code, notes, and snippets.

@codeboy101
Last active March 24, 2017 18:10
Show Gist options
  • Select an option

  • Save codeboy101/0d89fd4a2f13abdc91e2fb148f50eded to your computer and use it in GitHub Desktop.

Select an option

Save codeboy101/0d89fd4a2f13abdc91e2fb148f50eded to your computer and use it in GitHub Desktop.
import numpy as np
import loader
train_features, train_labels, test_features, test_labels = loader.load_images('TrainImages')
train_features = np.reshape(train_features,(500, 4000))
train_labels = np.reshape(train_labels, (500, 2))
test_features = np.reshape(test_features, (550, 4000))
test_labels = np.reshape(test_labels, (550, 2))
train_data = zip(train_features, train_labels)
test_data = zip(test_features, test_labels)
train_data = list(train_data)
test_data = list(test_data)
def normalize(array):
return [i/255 for i in array]
train_features = normalize(train_features)
test_features = normalize(test_features)
def get_index(labels):
if labels[0] == 1: return 0
else: return 1
def l1_distance(img1, img2):
return np.sum(np.abs(img1.ravel() - img2.ravel()))
def nearest_neighbor(img, data):
all_dists = []
labels = []
minimum = data[0][0]
min_distance = l1_distance(img, minimum)
for each in data:
l1_dist = l1_distance(img, each[0][0])
all_dists.append(l1_dist)
labels.append(get_index(each[1]))
if l1_dist < min_distance:
minimum = each[0]
min_index = all_dists.index(min(all_dists))
return labels[min_index], minimum
def k_mins(array, k):
nn = nearest_neighbor(array[0], train_data)
for i,j in train_data:
if check_eq(nn[1], i):
return 0
def check_eq(arr1, arr2):
counter = 0
for i, j in zip(arr1, arr2):
if i == j:
counter += 1
if counter == len(arr1):
return True
return False
def run_model(test, k):
classification = []
for entry in test:
classification.append((k_mins(entry, k), entry[1]))
return sum(i == j for i, j in classification)
k = 5
x = run_model(test_data, k)
print((x/len(test_data)) * 100)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment