## Description

Implement k nearest neighbors (kNN) from scratch in Python. You may use any of the standard packages in the Anaconda distribution (e.g., numpy). Your kNN should use the p-norms to measure distance.

The public interface consists of three methods.

- The constructor. This should take as optional arguments

k, the number of neighbors to use, with the default value 5, and

p, specifying which p-norm to use. The value p = 1 should be an acceptable value.

- The fit() method. This builds the classi er from the training data. The training data are numpy arrays. The features are organized with one instance per row.

- The predict() method. This makes predictions. The input is a numpy array of features, one instance per row. This method should return a numpy array containing the predicted class labels.

You are free to implement any internal methods that you wish.

c l a s s kNN : | |||||||||||||||||||||||||||||

def | i n i t | ( s e l f , | k=5, | p =2): | |||||||||||||||||||||||||

’ ’ ’ | |||||||||||||||||||||||||||||

k : t h e number | o f n e i g h b o r s | used i n | c l a s s i f i c a t i o n | ||||||||||||||||||||||||||

p : s p e c i f i e s | t h e p | norm | t o | u s e | |||||||||||||||||||||||||

’ ’ ’ | |||||||||||||||||||||||||||||

pass | |||||||||||||||||||||||||||||

def | f i t ( s e l f | , X | t r a i n , | y | t r a i n ) : | ||||||||||||||||||||||||

’ ’ ’ | |||||||||||||||||||||||||||||

X | t r a i n : numpy | a r r a y | o f | f e a t u r e s , | one i n s t a n c e p e r row | ||||||||||||||||||||||||

y | t r a i n : | numpy | a r r a y | o f | l a b e l s | ||||||||||||||||||||||||

’ ’ ’ | |||||||||||||||||||||||||||||

pass | |||||||||||||||||||||||||||||

def | p r e d i c t ( s e l f | , | X | t e s t ) : |

’ ’ ’

X: numpy a r r a y o f f e a t u r e s , one i n s t a n c e p e r row

’ ’ ’

pass

1