# ML Program 4 - Naive Bayes Classifier (Iris)
import pandas as pd
import numpy as np
from sklearn.datasets import load_iris
from sklearn.preprocessing import MinMaxScaler
# from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import confusion_matrix, classification_report, accuracy_score

iris = load_iris()

X = iris.data
Y = iris.target
feature_names = iris.feature_names
target_names = iris.target_names

data = pd.DataFrame(data=iris.data, columns=iris.feature_names)
data['species'] = iris.target_names[Y]
print(data)

"""
scaler=StandardScaler()
X_scaled=scaler.fit_transform(X)
X_scaled
"""

scaler = MinMaxScaler()
X_scaled = scaler.fit_transform(X)
print(X_scaled)

X_train, X_test, Y_train, Y_test = train_test_split(X_scaled, Y, test_size=0.2, random_state=42)

clf = GaussianNB()
clf.fit(X_train, Y_train)
Y_pred = clf.predict(X_test)

d = {0: "setosa", 1: "versicolor", 2: "virginica"}
Y_predict = [d[i] for i in list(Y_pred)]
print(Y_predict)

cm = confusion_matrix(Y_test, Y_pred)
print("Confusion Matrix:\n", cm)
print("Accuracy:", accuracy_score(Y_test, Y_pred))
print("\nClassification Report:\n")
print(classification_report(Y_test, Y_pred))
