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
Post a Comment