# ML Program 5 - k-Nearest Neighbors (Iris)
import pandas as pd
import numpy as np
from sklearn.datasets import load_iris
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split

dataset = load_iris()
x_train, x_test, y_train, y_test = train_test_split(dataset["data"], dataset["target"], random_state=0)

kn = KNeighborsClassifier(n_neighbors=3)
kn.fit(x_train, y_train)

for i in range(len(x_test)):
    x = x_test[i]
    x_new = np.array([x])
    prediction = kn.predict(x_new)
    print(f"Target={y_test[i]} {dataset['target_names'][y_test[i]]} Predicted={prediction}{dataset['target_names'][prediction]}")
print(kn.score(x_test, y_test))

correct = 0
wrong = 0

for i in range(len(x_test)):
    x = x_test[i]
    x_new = np.array([x])
    prediction = kn.predict(x_new)

    actual = y_test[i]
    predicted = prediction[0]

    if actual == predicted:
        result = "Correct"
        correct += 1
    else:
        result = "Wrong"
        wrong += 1

    print("Target=", actual, dataset["target_names"][actual],
          "Predicted=", predicted, dataset["target_names"][predicted],
          " -> ", result)

print("\nTotal Correct:", correct)
print("Total Wrong:", wrong)
print("Accuracy:", kn.score(x_test, y_test))
