Advertisement
Guest User

Untitled

a guest
Nov 12th, 2018
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.19 KB | None | 0 0
  1. from numpy.linalg import norm
  2.  
  3. class KNN(object):
  4.     def __init__(self, n_neighbours=3, classes = None):
  5.         self.n_neighbours = n_neighbours
  6.         self.classes = classes
  7.        
  8.     def fit(self, X_train, y_train):
  9.         self.X_train = X_train
  10.         self.y_train = y_train
  11.         self.min_y = min(y_train)
  12.         self.max_y = max(y_train)
  13.         if not self.classes:
  14.             self.classes = range(self.min_y, self.max_y + 1)
  15.        
  16.        
  17.     def predict(self, X_test):
  18.         predictions = []
  19.        
  20.         for x_test in X_test:
  21.             distances = []
  22.             for x_, y_ in zip(self.X_train, self.y_train):
  23.                 distances.append((norm(x_test - x_), y_))
  24.             distances.sort(key=lambda x: x[0])
  25.            
  26.             cls_dict = {}
  27.             for k in self.classes:
  28.                 cls_dict[k] = 0
  29.                
  30.             for dist, y in distances[:self.n_neighbours]:
  31.                 cls_dict[y] += 1
  32.             predictions.append(max(cls_dict, key=cls_dict.get))
  33.                
  34.         return np.array(predictions)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement