Shivashankar/Drug-Classification
0
1import pandas as pd2import skops.io as sio3from sklearn.compose import ColumnTransformer4from sklearn.ensemble import RandomForestClassifier5from sklearn.impute import SimpleImputer6from sklearn.metrics import accuracy_score, f1_score7from sklearn.pipeline import Pipeline8from sklearn.preprocessing import OrdinalEncoder, StandardScaler9 10# Loading the Data11drug_df = pd.read_csv("Data/drug.csv")12drug_df = drug_df.sample(frac=1)13 14# Train Test Split15from sklearn.model_selection import train_test_split16 17X = drug_df.drop("Drug", axis=1).values18y = drug_df.Drug.values19 20X_train, X_test, y_train, y_test = train_test_split(21 X, y, test_size=0.3, random_state=12522)23 24# Pipeline25cat_col = [1, 2, 3]26num_col = [0, 4]27 28transform = ColumnTransformer(29 [30 ("encoder", OrdinalEncoder(), cat_col),31 ("num_imputer", SimpleImputer(strategy="median"), num_col),32 ("num_scaler", StandardScaler(), num_col),33 ]34)35pipe = Pipeline(36 steps=[37 ("preprocessing", transform),38 ("model", RandomForestClassifier(n_estimators=10, random_state=125)),39 ]40)41 42# Training43pipe.fit(X_train, y_train)44 45# Model Evaluation46predictions = pipe.predict(X_test)47accuracy = accuracy_score(y_test, predictions)48f1 = f1_score(y_test, predictions, average="macro")49 50print("Accuracy:", str(round(accuracy, 2) * 100) + "%", "F1:", round(f1, 2))51 52# Confusion Matrix Plot53import matplotlib.pyplot as plt54from sklearn.metrics import ConfusionMatrixDisplay, confusion_matrix55 56predictions = pipe.predict(X_test)57cm = confusion_matrix(y_test, predictions, labels=pipe.classes_)58disp = ConfusionMatrixDisplay(confusion_matrix=cm, display_labels=pipe.classes_)59disp.plot()60plt.savefig("./Results/model_results.png", dpi=120)61 62# Write metrics to file63with open("./Results/metrics.txt", "w") as outfile:64 outfile.write(f"\nAccuracy = {round(accuracy, 2)}, F1 Score = {round(f1, 2)}")65 66# Saving the model file67sio.dump(pipe, "./Model/drug_pipeline.skops")68 