diff --git a/scripts/gaussian_nb.py b/scripts/gaussian_nb.py new file mode 100644 index 0000000..00e2abd --- /dev/null +++ b/scripts/gaussian_nb.py @@ -0,0 +1,99 @@ +import pandas as pd +from sklearn.model_selection import train_test_split +from sklearn.naive_bayes import GaussianNB +from sklearn.preprocessing import LabelEncoder +from sklearn.metrics import accuracy_score, classification_report, confusion_matrix +import pickle +import matplotlib.pyplot as plt +import seaborn as sns +import os + +curdir = os.getcwd() +path_delim = '/' +data = pd.read_csv(curdir + path_delim + 'data/bquxjob_6ffc1cff_18c02a130c1.csv') +data = data.dropna() +print(data) + +data.plot() + +label_encoder = LabelEncoder() +categorical_cols = [] #['deviceId', 'deviceSerialNumber', 'classificationResult'] +for col in categorical_cols: + data[col] = label_encoder.fit_transform(data[col]) + +X = data[['calculatedRatio', 'deviceRatio', 'led1Buffer', 'led2Buffer', 'led1Sample', 'led2Sample']] #, 'deviceId', 'deviceSerialNumber']] +y = data['classificationResult'] + +print(X) +print(y) + +# Fit the LabelEncoder on the entire column +# label_encoder.fit(data['classificationResult']) + +with open('label_encoder.pkl', 'wb') as label_encoder_file: + pickle.dump(label_encoder, label_encoder_file) + +X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) + +model = GaussianNB() +model.fit(X_train, y_train) + +y_pred = model.predict(X_test) + +accuracy = accuracy_score(y_test, y_pred) +classification_report_result = classification_report(y_test, y_pred) + +confusion = confusion_matrix(y_test, y_pred) + +plt.figure(figsize=(8, 6)) +sns.heatmap(confusion, annot=True, fmt='d', cmap='Blues', linewidths=0.5) +plt.xlabel('Predicted') +plt.ylabel('Actual') +plt.title('Confusion Matrix') +# plt.show() + +print(f"Accuracy: {accuracy}") +print("Classification Report:") +print(classification_report_result) + +with open('gaussian_naive_bayes_model.pkl', 'wb') as model_file: + pickle.dump(model, model_file) + +with open('label_encoder.pkl', 'rb') as label_encoder_file: + loaded_label_encoder = pickle.load(label_encoder_file) +# print(loaded_label_encoder.classes_) +# print(loaded_label_encoder.label) + +with open('gaussian_naive_bayes_model.pkl', 'rb') as model_file: + loaded_model = pickle.load(model_file) + +# loaded_label_encoder = label_encoder +# loaded_model = model + +# new_data = pd.DataFrame({'calculatedRatio': label_encoder.fit_transform([0.126976079]), 'led1Buffer': label_encoder.fit_transform([24313.67]), 'led1Sample': label_encoder.fit_transform([20531]), 'led2Buffer': label_encoder.fit_transform([26565]), 'led2Sample': label_encoder.fit_transform([9975.33])}) +# new_data = pd.DataFrame({'calculatedRatio': loaded_label_encoder.fit_transform([0.17500836]), 'led1Buffer': loaded_label_encoder.fit_transform([24843.33]), 'led1Sample': loaded_label_encoder.fit_transform([19678]), 'led2Buffer': loaded_label_encoder.fit_transform([26715.33]), 'led2Sample': loaded_label_encoder.fit_transform([13842.67])}) +# new_data = pd.DataFrame({'calculatedRatio': loaded_label_encoder.fit_transform([0.175881142]), 'led1Buffer': loaded_label_encoder.fit_transform([24256]), 'led1Sample': loaded_label_encoder.fit_transform([16303]), 'led2Buffer': loaded_label_encoder.fit_transform([27016.33]), 'led2Sample': loaded_label_encoder.fit_transform([4612.67])}) +# new_data = pd.DataFrame({'calculatedRatio': loaded_label_encoder.fit_transform([0.126976079]), 'led1Buffer': loaded_label_encoder.fit_transform([24313.67]), 'led1Sample': loaded_label_encoder.fit_transform([20531]), 'led2Buffer': loaded_label_encoder.fit_transform([26565]), 'led2Sample': loaded_label_encoder.fit_transform([9975.33])}) +new_data = pd.DataFrame({'calculatedRatio': 0.231057205, 'deviceRatio': 0.231057205,'led1Buffer': 23776.33, 'led2Buffer': 26401.67, + 'led1Sample': 16286, 'led2Sample': 6952.67}, index=[0]) +# new_data = pd.DataFrame({ +# 'calculatedRatio': [0.175881142], +# 'led1Buffer': [24256], +# 'led1Sample': [16303], +# 'led2Buffer': [27016.33], +# 'led2Sample': [4612.67] +# }) +print(new_data) + +# new_data = new_data.apply(lambda col: loaded_label_encoder.transform(col)) +predicted_result = loaded_model.predict(new_data) +print(predicted_result.item()) + +X_test_encoded = X_test.copy() +for col in categorical_cols: + X_test_encoded[col] = loaded_label_encoder.transform(X_test[col]) + +print(X_test_encoded) + +y_pred = model.predict(X_test_encoded) +print(pd.Series(y_pred).describe()) \ No newline at end of file