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())