import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs
from sklearn.model_selection import train_test_split
class KNN:
def __init__(self, n_neighbors=5):
self.n = n_neighbors
def fit(self, X, y):
self.X = X
self.y = y
def get_point(self, point):
dist = np.sqrt(((self.X - point) ** 2).sum(axis=1))
idx = dist.argsort()
near_idx = idx[:self.n]
opt = self.y[near_idx]
values, freq = np.unique(opt, return_counts=True)
return values[freq.argmax()]
def predict(self, X):
result = []
for point in X:
result.append(self.get_point(point))
return np.array(result)
def main():
X, y = make_blobs(n_samples=1000, centers=4, random_state=0)
X_train , X_test , y_train , y_test = train_test_split(X , y , test_size = 0.1 , random_state = 42)
knn = KNN()
knn.fit(X_train,y_train)
y_pred = knn.predict(X_test)
print(y_test)
print(y_pred)
if __name__=="__main__":
main()
Comments