5

 import numpy as np

import matplotlib.pyplot as plt

from collections import Counter


np.random.seed(42)


# Generate data

data = np.random.rand(100)

train_data = data[:50]

test_data = data[50:]

train_labels = np.array(["Class1" if x <= 0.5 else "Class2" for x in train_data])


# k-NN function

def knn(train_data, train_labels, test_point, k):

    distances = np.abs(train_data - test_point)

    nearest_labels = train_labels[np.argsort(distances)[:k]]

    return Counter(nearest_labels).most_common(1)[0][0]


# k values to test

k_values = [1, 2, 3, 4, 5, 20, 30]


# Loop over each k

for k in k_values:

    predictions = np.array([knn(train_data, train_labels, x, k) for x in test_data])

    

    class1 = test_data[predictions == "Class1"]

    class2 = test_data[predictions == "Class2"]


    plt.figure(figsize=(8, 3))

    plt.scatter(train_data, np.zeros_like(train_data), c="black", label="Train", marker="x")

    if len(class1) > 0:

        plt.scatter(class1, np.ones_like(class1), c="blue", label="Class1 (Test)")

    if len(class2) > 0:

        plt.scatter(class2, np.ones_like(class2), c="red", label="Class2 (Test)")

    plt.title(f"k-NN Classification (k={k})")

    plt.yticks([])

    plt.legend()

    plt.tight_layout()

    plt.show()


Comments

Popular posts from this blog

2

3

1