#!/usr/bin/env python
# coding: utf-8

# # bayes

# In[1]:


import pandas as pd
import numpy as np


# In[5]:


df = pd.read_csv("spambase.csv")
df.sample(5)


# In[19]:


from sklearn.preprocessing import MinMaxScaler

X = df.iloc[:, :-1]
Y = df.iloc[:, -1]

scaler = MinMaxScaler()
X_scaled = scaler.fit_transform(X)
df.isna().sum()


# In[18]:


import matplotlib.pyplot as plt

for feat in df.columns:
    plt.title(f"{feat}")
    plt.hist(df[feat], bins=100)
    plt.show()


# In[25]:


import seaborn as sns

sns.countplot(x=Y)
plt.title("Class distribuition", fontweight="bold")
plt.show()


# In[28]:


from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X_scaled, Y, test_size=0.2, random_state=42, stratify=Y)


# In[40]:


# naive bayes

from sklearn.naive_bayes import GaussianNB, MultinomialNB, BernoulliNB
from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay, RocCurveDisplay

clf = GaussianNB()

clf.fit(X_train, y_train)

y_pred = clf.predict(X_test)

tn, fp, fn, tp = confusion_matrix(y_test, y_pred).ravel()
ConfusionMatrixDisplay.from_estimator(clf, X_test, y_test)
RocCurveDisplay.from_estimator(clf, X_test, y_test)
plt.show()


# In[50]:


from sklearn.neighbors import KNeighborsClassifier

knn = KNeighborsClassifier(5)


knn.fit(X_train, y_train)

y_pred = knn.predict(X_test)

tn, fp, fn, tp = confusion_matrix(y_test, y_pred).ravel()
ConfusionMatrixDisplay.from_estimator(knn, X_test, y_test)
RocCurveDisplay.from_estimator(knn, X_test, y_test)
plt.show()


# In[ ]:


# hyper paramtere tuning

from sklearn.model_selection import GridSearchCV


