{ "cells": [ { "cell_type": "code", "execution_count": 1, "id": "Gkmj6mA3ZyVq", "metadata": { "id": "Gkmj6mA3ZyVq" }, "outputs": [], "source": [ "import sys\n", "import pandas as pd\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "%matplotlib inline\n", "plt.style.use(\"ggplot\")\n", "plt.rcParams['figure.figsize'] = (12, 8)\n", "import seaborn as sns\n", "sns.set(style='whitegrid', color_codes=True)\n", "import warnings\n", "warnings.filterwarnings('ignore')\n", "import sklearn.model_selection" ] }, { "cell_type": "code", "execution_count": 2, "id": "6nvmS-3ZZ5XZ", "metadata": { "id": "6nvmS-3ZZ5XZ" }, "outputs": [], "source": [ "# from google.colab import files\n", "\n", "# uploaded = files.upload()\n", "df_f = pd.read_csv('dataset.csv')" ] }, { "cell_type": "code", "execution_count": 3, "id": "e2a23ebd", "metadata": { "id": "e2a23ebd" }, "outputs": [], "source": [ "df_f = pd.read_csv('dataset.csv')\n", "df_f.dropna(axis=0, inplace=True)\n", "\n", "\n", "df_f.loc[:,\"BMI\"] = (df_f.loc[:,\"Weight (Kg)\"]) / np.square(df_f.loc[:,\"Height(Cm) \"]/100); # Calculate BMI(Body Mass Index)\n", "df_f.loc[:,\"BMI\"] = df_f.loc[:,\"BMI\"].round(2); # Round to two decimal places\n", "df_f.loc[:,\"FSH/LH\"] = df_f.loc[:,\"FSH(mIU/mL)\"] / df_f.loc[:,\"LH(mIU/mL)\"];\n", "df_f.loc[:,\"FSH/LH\"] = df_f.loc[:,\"FSH/LH\"].round(2);\n", "df_f.loc[:,\"Waist:Hip Ratio\"] = df_f.loc[:,\"Waist(inch)\"] / df_f.loc[:,\"Hip(inch)\"]\n", "df_f.loc[:,\"Waist:Hip Ratio\"] = df_f.loc[:,\"Waist:Hip Ratio\"].round(2)\n", "# df[df[\"Cycle(R/I)\"] == 5]\n", "df_f[\"Cycle(R/I)\"].replace({5: 4}, inplace=True)\n", "df_f[\"Cycle(R/I)\"].replace({2: 0, 4: 1}, inplace=True)\n", "df_f[\"II beta-HCG(mIU/mL)\"].replace({\"1.99.\": 1.99}, inplace=True)\n", "\n", "df_f[\"II beta-HCG(mIU/mL)\"] = df_f[\"II beta-HCG(mIU/mL)\"].astype(float)\n", "df_f[df_f[\"AMH(ng/mL)\"]== \"a\"].T\n", "# df_f.drop(df_f[\"AMH(ng/mL)\"]== \"a\", inplace=True)\n", "df_f.drop(df_f.loc[df_f[\"AMH(ng/mL)\"]== \"a\"].index, inplace=True);\n", "df_f[df_f[\"AMH(ng/mL)\"]== \"a\"]\n", "df_f[\"AMH(ng/mL)\"] = df_f[\"AMH(ng/mL)\"].astype(float)\n", "df_f[\"BP _Systolic (mmHg)\"].replace({12: 120}, inplace=True)\n", "df_f[\"BP _Diastolic (mmHg)\"].replace({8: 80}, inplace=True)\n", "df_f.to_csv('PCOS_clean_data_without_infertility.csv', index=False)\n", "\n", "from sklearn.feature_selection import chi2,f_classif, mutual_info_classif, SelectKBest\n", "from sklearn.model_selection import train_test_split, cross_val_score\n", "from sklearn.model_selection import RepeatedStratifiedKFold\n", "\n", "df = pd.read_csv('PCOS_clean_data_without_infertility.csv')\n", "df.head(12).T\n", "#df.columns\n", "\n", "df_cat = df_f[[\" Age (yrs)\",\n", " \"Pregnant(Y/N)\",\n", " \"Cycle(R/I)\",\n", " \"Blood Group\",\n", " \"Cycle length(days)\",\n", " \"No. of aborptions\",\n", " \"Weight gain(Y/N)\",\n", " \"hair growth(Y/N)\",\n", " \"Skin darkening (Y/N)\",\n", " \"Hair loss(Y/N)\",\n", " \"Pimples(Y/N)\",\n", " \"Fast food (Y/N)\",\n", " \"Reg.Exercise(Y/N)\",\n", "\n", "]]\n", "df_cat.columns\n", "\n", "df_target = df_f[[\"PCOS (Y/N)\"]]\n", "df_corr_num = df_f.drop(df_cat.columns,axis=1,inplace = False)\n", "df_num = df_f.drop(df_cat.columns,axis=1)\n", "df_num.drop([\"PCOS (Y/N)\"], axis=1, inplace= True)\n", "df_corr_num = pd.concat([df_target, df_num], axis=1, sort = False)\n", "df_corr_num.head()\n", "from sklearn.model_selection import StratifiedKFold\n", "from yellowbrick.model_selection import CVScores\n", "from sklearn.metrics import confusion_matrix\n", "\n", "\n", "def test_results(model, X_test, y_test):\n", " from sklearn.metrics import confusion_matrix\n", " y_pred = model.predict(X_test)\n", " tn, fp, fn, tp = confusion_matrix(y_test, y_pred).ravel()\n", "\n", " accuracy = (tp + tn)/(tp + fp + tn + fn)\n", " print(\"Accuracy: \", '{:.2f}'.format(accuracy * 100))\n", " print(\"True Negative:\", tn)\n", " print(\"True Positve:\", tp)\n", " print(\"False Positive:\", fp)\n", " print(\"False Negative:\", fn)\n", " print()\n", " print(\"-------------------------------------------------------\")\n", " print(\"Negative Class Results\")\n", " precision = (tp / (tp + fp))\n", " recall = (tp / (tp + fn))\n", " f1_score = (2 * (precision * recall) / (precision + recall))\n", " print(\"Precision (N): \", '{:.2f}'.format(precision * 100))\n", " print(\"Recall (N): \", '{:.2f}'.format(recall * 100))\n", " print(\"F1 Score (N):\" , '{:.2f}'.format(f1_score * 100))\n", " print()\n", " print(\"-------------------------------------------------------\")\n", " print(\"Positive Class Results\")\n", " precision = (tn / (tn + fn))\n", " recall = (tn / (tn + fp))\n", " f1_score = (2 * (precision * recall) / (precision + recall))\n", " print(\"Precision (P): \", '{:.2f}'.format(precision * 100))\n", " print(\"Recall (P): \", '{:.2f}'.format(recall * 100))\n", " print(\"F1 Score (P):\" , '{:.2f}'.format(f1_score * 100))\n", "\n", "from yellowbrick.classifier import confusion_matrix\n", "\n", "def vis_conf(model, X_test, y_test):\n", " plt.figure(figsize=(6, 5))\n", " visualizer = confusion_matrix(\n", " model,\n", " X_test, y_test,\n", " is_fitted=True,\n", " classes=['Negative', 'Positive']\n", " )\n", " visualizer.show();" ] }, { "cell_type": "code", "execution_count": 4, "id": "9Yf9lrn1asJz", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "9Yf9lrn1asJz", "outputId": "edce4331-3cee-4b48-a51a-4482c0919dba" }, "outputs": [ { "data": { "text/plain": [ "Index([' Age (yrs)', 'Weight (Kg)', 'BMI', 'Pulse rate(bpm) ', 'Hb(g/dl)',\n", " 'Cycle(R/I)', 'Cycle length(days)', 'Marraige Status (Yrs)',\n", " 'Hip(inch)', 'Waist(inch)', 'AMH(ng/mL)', 'Vit D3 (ng/mL)',\n", " 'Weight gain(Y/N)', 'hair growth(Y/N)', 'Skin darkening (Y/N)',\n", " 'Hair loss(Y/N)', 'Pimples(Y/N)', 'Fast food (Y/N)', 'Follicle No. (L)',\n", " 'Follicle No. (R)', 'Avg. F size (L) (mm)', 'Avg. F size (R) (mm)',\n", " 'Endometrium (mm)'],\n", " dtype='object')" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X = df_f.drop([\"PCOS (Y/N)\",\n", " \"Sl. No\", \"Patient File No.\",\n", " \"Blood Group\",\n", " \"Height(Cm) \",\n", " \"Pregnant(Y/N)\",\n", " \"PRG(ng/mL)\",\n", " \"RR (breaths/min)\",\n", " \"No. of aborptions\",\n", " \"FSH/LH\",\n", " \" I beta-HCG(mIU/mL)\",\n", " \"II beta-HCG(mIU/mL)\",\n", " \"TSH (mIU/L)\",\n", " \"FSH(mIU/mL)\",\n", " \"LH(mIU/mL)\",\n", " \"Waist:Hip Ratio\",\n", " \"PRL(ng/mL)\",\n", " \"BP _Diastolic (mmHg)\",\n", " \"BP _Systolic (mmHg)\",\n", " \"Reg.Exercise(Y/N)\",\n", " \"RBS(mg/dl)\"\n", " ],axis=1)\n", "X.columns" ] }, { "cell_type": "code", "execution_count": 5, "id": "9rHUklm8a3kq", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "9rHUklm8a3kq", "outputId": "65c4776c-39fb-4b4b-a183-bb1e9045f5e9" }, "outputs": [ { "data": { "text/plain": [ "(538, 1)" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "y = df_f[[\"PCOS (Y/N)\"]]\n", "y.shape" ] }, { "cell_type": "code", "execution_count": 6, "id": "lMxlkbIqa4VV", "metadata": { "id": "lMxlkbIqa4VV" }, "outputs": [], "source": [ "from imblearn.combine import SMOTEENN\n", "\n", "resample = SMOTEENN(sampling_strategy=1/1, random_state =0)\n", "X, y = resample.fit_resample(X, y)" ] }, { "cell_type": "code", "execution_count": 7, "id": "tgHQ2RjIa932", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "tgHQ2RjIa932", "outputId": "fcb84fea-c3c2-4ed3-9110-d5ac8d74e853" }, "outputs": [ { "data": { "text/plain": [ "(103, 23)" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sklearn.preprocessing import MinMaxScaler\n", "\n", "from imblearn.combine import SMOTEENN\n", "\n", "resample = SMOTEENN(sampling_strategy=1/1, random_state =0)\n", "X, y = resample.fit_resample(X, y)\n", "\n", "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0, stratify= y)\n", "\n", "\n", "scaler = MinMaxScaler().fit(X_train)\n", "#range 0-1\n", "# scaled using scaled_value = (original_value - min) / (max - min)\n", "\n", "\n", "X_train = scaler.transform(X_train)\n", "X_train = pd.DataFrame(X_train)\n", "\n", "X_test = scaler.transform(X_test)\n", "X_test = pd.DataFrame(X_test)\n", "\n", "\n", "# Setting Column Names from dataset\n", "X_train.columns = X.columns\n", "X_test.columns = X.columns\n", "X_train.shape\n", "X_test.shape\n", "\n" ] }, { "cell_type": "code", "execution_count": 8, "id": "pYXYflk5a8bT", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "pYXYflk5a8bT", "outputId": "92b5e321-7756-4662-85fe-ffb2fb9734ed" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(409, 23)\n" ] } ], "source": [ "print(X_train.shape)" ] }, { "cell_type": "code", "execution_count": 9, "id": "TiMnBO2tNzkb", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "TiMnBO2tNzkb", "outputId": "9635ae91-6b93-4089-d651-8436a24e75e7" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Accuracy: 97.09\n", "True Negative: 48\n", "True Positve: 52\n", "False Positive: 3\n", "False Negative: 0\n", "\n", "-------------------------------------------------------\n", "Negative Class Results\n", "Precision (N): 94.55\n", "Recall (N): 100.00\n", "F1 Score (N): 97.20\n", "\n", "-------------------------------------------------------\n", "Positive Class Results\n", "Precision (P): 100.00\n", "Recall (P): 94.12\n", "F1 Score (P): 96.97\n" ] } ], "source": [ "\n", "#XGB\n", "\n", "import xgboost as xgb\n", "xgb = xgb.XGBClassifier(max_depth=5, n_estimators=1500, learning_rate=0.3,scale_pos_weight=10,\n", " random_state= 0, n_jobs=-1)\n", "sum(cross_val_score(xgb, X, y, cv=10))/10\n", "xgb = xgb.fit(X_train, y_train)\n", "test_results(xgb, X_test, y_test)\n", "\n" ] }, { "cell_type": "code", "execution_count": 10, "id": "CY6pdF61NwwA", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "CY6pdF61NwwA", "outputId": "3909ccea-cd21-44d7-a5be-3d747983a17a", "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Accuracy: 93.20\n", "True Negative: 48\n", "True Positve: 48\n", "False Positive: 3\n", "False Negative: 4\n", "\n", "-------------------------------------------------------\n", "Negative Class Results\n", "Precision (N): 94.12\n", "Recall (N): 92.31\n", "F1 Score (N): 93.20\n", "\n", "-------------------------------------------------------\n", "Positive Class Results\n", "Precision (P): 92.31\n", "Recall (P): 94.12\n", "F1 Score (P): 93.20\n" ] } ], "source": [ "#SVM\n", "from sklearn.svm import SVC\n", "svm = SVC(kernel=\"linear\", gamma='auto', probability= True, random_state=0)\n", "svm.fit(X_train, y_train)\n", "test_results(svm, X_test, y_test)" ] }, { "cell_type": "code", "execution_count": 11, "id": "3c84db81", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Best parameters: {'C': 0.1, 'gamma': 1, 'kernel': 'poly'}\n", "Accuracy: 95.15\n", "True Negative: 47\n", "True Positve: 51\n", "False Positive: 4\n", "False Negative: 1\n", "\n", "-------------------------------------------------------\n", "Negative Class Results\n", "Precision (N): 92.73\n", "Recall (N): 98.08\n", "F1 Score (N): 95.33\n", "\n", "-------------------------------------------------------\n", "Positive Class Results\n", "Precision (P): 97.92\n", "Recall (P): 92.16\n", "F1 Score (P): 94.95\n" ] } ], "source": [ "from sklearn.model_selection import GridSearchCV\n", "\n", "param_grid = {\n", " 'C': [0.1, 1, 10, 100],\n", " 'gamma': ['scale', 'auto', 0.1, 1, 10],\n", " 'kernel': ['linear', 'rbf', 'poly']\n", "}\n", "\n", "grid_search = GridSearchCV(SVC(probability=True, random_state=0), param_grid, cv=5)\n", "grid_search.fit(X_train, y_train)\n", "print(\"Best parameters:\", grid_search.best_params_)\n", "\n", "best_svm = grid_search.best_estimator_\n", "test_results(best_svm, X_test, y_test)\n" ] }, { "cell_type": "code", "execution_count": 12, "id": "4d7f36fc", "metadata": {}, "outputs": [], "source": [ "#ENSEMBLE HARD" ] }, { "cell_type": "code", "execution_count": 13, "id": "7de6aaf7", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Training Time: 1.25 seconds\n", "Testing Time: 0.04 seconds\n", "Test Accuracy: 0.95\n", "Cross-Validation Mean Accuracy: 0.975610\n", "Cross-Validation Standard Deviation: 0.015426\n" ] } ], "source": [ "import time\n", "from sklearn.ensemble import VotingClassifier\n", "from sklearn.model_selection import cross_val_score\n", "import numpy as np\n", "from xgboost import XGBClassifier\n", "from sklearn.svm import SVC\n", "\n", "# # Create base models\n", "# xgb = XGBClassifier()\n", "# svm = SVC(probability=True) # Ensure SVM supports probabilities if needed\n", "\n", "# Create a dictionary of estimators\n", "estimators = [('svm', svm), ('xgb', xgb)]\n", "\n", "# Create our Voting Classifier\n", "ensemble1 = VotingClassifier(estimators=estimators, voting='hard')\n", "\n", "# Measure computational time for training\n", "start_train = time.time()\n", "ensemble1.fit(X_train, y_train)\n", "\n", "end_train = time.time()\n", "train_time = end_train - start_train\n", "\n", "# Measure computational time for testing\n", "start_test = time.time()\n", "test_score = ensemble1.score(X_test, y_test)\n", "end_test = time.time()\n", "test_time = end_test - start_test\n", "\n", "print(f\"Training Time: {train_time:.2f} seconds\")\n", "print(f\"Testing Time: {test_time:.2f} seconds\")\n", "print(f\"Test Accuracy: {test_score:.2f}\")\n", "\n", "# Perform 10-fold cross-validation to calculate standard deviation\n", "cv_scores = cross_val_score(ensemble1, X_train, y_train, cv=10, scoring='accuracy')\n", "\n", "# Calculate mean and standard deviation of cross-validation scores\n", "mean_accuracy = np.mean(cv_scores)\n", "std_dev_accuracy = np.std(cv_scores)\n", "\n", "print(f\"Cross-Validation Mean Accuracy: {mean_accuracy:2f}\")\n", "print(f\"Cross-Validation Standard Deviation: {std_dev_accuracy:2f}\")\n", "\n" ] }, { "cell_type": "code", "execution_count": 14, "id": "a4ffcc67", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Cross-Validated Accuracy: Mean = 0.9756, Std Dev = 0.02\n", "Cross-Validated Precision: Mean = 0.9861, Std Dev = 0.02\n", "Cross-Validated Recall: Mean = 0.965952, Std Dev = 0.03\n", "Cross-Validated F1-Score: Mean = 0.975443, Std Dev = 0.02\n" ] } ], "source": [ "from sklearn.model_selection import cross_val_score\n", "from sklearn.metrics import make_scorer, precision_score, recall_score, f1_score\n", "import numpy as np\n", "\n", "# Define scoring metrics\n", "precision = make_scorer(precision_score, average='binary') # Change 'binary' to 'weighted' for multi-class\n", "recall = make_scorer(recall_score, average='binary')\n", "f1 = make_scorer(f1_score, average='binary')\n", "\n", "# Perform cross-validation for each metric\n", "accuracy_scores = cross_val_score(ensemble1, X_train, y_train, cv=10, scoring='accuracy') # 'accuracy' is a built-in scorer\n", "precision_scores = cross_val_score(ensemble1, X_train, y_train, cv=10, scoring=precision)\n", "recall_scores = cross_val_score(ensemble1, X_train, y_train, cv=10, scoring=recall)\n", "f1_scores = cross_val_score(ensemble1, X_train, y_train, cv=10, scoring=f1)\n", "\n", "# Calculate mean and standard deviation for each metric\n", "mean_accuracy = np.mean(accuracy_scores)\n", "std_dev_accuracy = np.std(accuracy_scores)\n", "\n", "mean_precision = np.mean(precision_scores)\n", "std_dev_precision = np.std(precision_scores)\n", "\n", "mean_recall = np.mean(recall_scores)\n", "std_dev_recall = np.std(recall_scores)\n", "\n", "mean_f1 = np.mean(f1_scores)\n", "std_dev_f1 = np.std(f1_scores)\n", "\n", "# Print results\n", "print(f\"Cross-Validated Accuracy: Mean = {mean_accuracy:.4f}, Std Dev = {std_dev_accuracy:.2f}\")\n", "print(f\"Cross-Validated Precision: Mean = {mean_precision:.4f}, Std Dev = {std_dev_precision:.2f}\")\n", "print(f\"Cross-Validated Recall: Mean = {mean_recall:f}, Std Dev = {std_dev_recall:.2f}\")\n", "print(f\"Cross-Validated F1-Score: Mean = {mean_f1:f}, Std Dev = {std_dev_f1:.2f}\")\n" ] }, { "cell_type": "code", "execution_count": null, "id": "d8d5a5f4", "metadata": {}, "outputs": [], "source": [ "#Ensemble Soft" ] }, { "cell_type": "code", "execution_count": 31, "id": "44e12feb", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Cross-Validation Mean Accuracy: 0.97\n", "Cross-Validation Standard Deviation: 0.02\n", "Training Time: 1.66 seconds\n", "Testing Time: 0.01 seconds\n" ] } ], "source": [ "import time\n", "from sklearn.ensemble import VotingClassifier\n", "from sklearn.model_selection import cross_val_score\n", "import numpy as np\n", "from xgboost import XGBClassifier\n", "from sklearn.svm import SVC\n", "\n", " # Ensure SVM supports probabilities if needed\n", "\n", "# Create a dictionary of estimators\n", "estimators = [('svm', best_svm), ('xgb', xgb)]\n", "\n", "# Create our Voting Classifier\n", "ensemble2 = VotingClassifier(estimators=estimators, voting='soft')\n", "\n", "# Measure computational time for training\n", "start_train = time.time()\n", "ensemble2.fit(X_train, y_train)\n", "end_train = time.time()\n", "train_time = end_train - start_train\n", "\n", "# Measure computational time for testing\n", "start_test = time.time()\n", "test_score = ensemble2.score(X_test, y_test)\n", "end_test = time.time()\n", "test_time = end_test - start_test\n", "\n", "# Perform 10-fold cross-validation to calculate standard deviation\n", "cv_scores = cross_val_score(ensemble2, X_train, y_train, cv=10, scoring='accuracy')\n", "\n", "# Calculate mean and standard deviation of cross-validation scores\n", "mean_accuracy = np.mean(cv_scores)\n", "std_dev_accuracy = np.std(cv_scores)\n", "\n", "print(f\"Cross-Validation Mean Accuracy: {mean_accuracy:.2f}\")\n", "print(f\"Cross-Validation Standard Deviation: {std_dev_accuracy:.2f}\")\n", "\n", "print(f\"Training Time: {train_time:.2f} seconds\")\n", "print(f\"Testing Time: {test_time:.2f} seconds\")" ] }, { "cell_type": "code", "execution_count": 15, "id": "a40cbb57", "metadata": {}, "outputs": [], "source": [ "#ENSEMBLE HARD SVM_GRID" ] }, { "cell_type": "code", "execution_count": 16, "id": "f65339a7", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Training Time: 1.38 seconds\n", "Testing Time: 0.01 seconds\n", "Test Accuracy: 0.97\n", "Cross-Validation Mean Accuracy: 0.980427\n", "Cross-Validation Standard Deviation: 0.014656\n" ] } ], "source": [ "import time\n", "from sklearn.ensemble import VotingClassifier\n", "from sklearn.model_selection import cross_val_score\n", "import numpy as np\n", "from xgboost import XGBClassifier\n", "from sklearn.svm import SVC\n", "\n", "# Create base models\n", "#xgb = XGBClassifier()\n", "#svm = SVC(probability=True) # Ensure SVM supports probabilities if needed\n", "\n", "# Create a dictionary of estimators\n", "estimators = [('svm', best_svm), ('xgb', xgb)]\n", "\n", "# Create our Voting Classifier\n", "ensemble1 = VotingClassifier(estimators=estimators, voting='hard')\n", "\n", "# Measure computational time for training\n", "start_train = time.time()\n", "ensemble1.fit(X_train, y_train)\n", "\n", "end_train = time.time()\n", "train_time = end_train - start_train\n", "\n", "# Measure computational time for testing\n", "start_test = time.time()\n", "test_score = ensemble1.score(X_test, y_test)\n", "end_test = time.time()\n", "test_time = end_test - start_test\n", "\n", "print(f\"Training Time: {train_time:.2f} seconds\")\n", "print(f\"Testing Time: {test_time:.2f} seconds\")\n", "print(f\"Test Accuracy: {test_score:.2f}\")\n", "\n", "# Perform 10-fold cross-validation to calculate standard deviation\n", "cv_scores = cross_val_score(ensemble1, X_train, y_train, cv=10, scoring='accuracy')\n", "\n", "# Calculate mean and standard deviation of cross-validation scores\n", "mean_accuracy = np.mean(cv_scores)\n", "std_dev_accuracy = np.std(cv_scores)\n", "\n", "print(f\"Cross-Validation Mean Accuracy: {mean_accuracy:f}\")\n", "print(f\"Cross-Validation Standard Deviation: {std_dev_accuracy:f}\")\n", "\n" ] }, { "cell_type": "code", "execution_count": 17, "id": "5a6770cf", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Cross-Validated Accuracy: Mean = 0.9804, Std Dev = 0.01\n", "Cross-Validated Precision: Mean = 0.9955, Std Dev = 0.01\n", "Cross-Validated Recall: Mean = 0.965714, Std Dev = 0.03\n", "Cross-Validated F1-Score: Mean = 0.979966, Std Dev = 0.02\n" ] } ], "source": [ "from sklearn.model_selection import cross_val_score\n", "from sklearn.metrics import make_scorer, precision_score, recall_score, f1_score\n", "import numpy as np\n", "\n", "# Define scoring metrics\n", "precision = make_scorer(precision_score, average='binary') # Change 'binary' to 'weighted' for multi-class\n", "recall = make_scorer(recall_score, average='binary')\n", "f1 = make_scorer(f1_score, average='binary')\n", "\n", "# Perform cross-validation for each metric\n", "accuracy_scores = cross_val_score(ensemble1, X_train, y_train, cv=10, scoring='accuracy') # 'accuracy' is a built-in scorer\n", "precision_scores = cross_val_score(ensemble1, X_train, y_train, cv=10, scoring=precision)\n", "recall_scores = cross_val_score(ensemble1, X_train, y_train, cv=10, scoring=recall)\n", "f1_scores = cross_val_score(ensemble1, X_train, y_train, cv=10, scoring=f1)\n", "\n", "# Calculate mean and standard deviation for each metric\n", "mean_accuracy = np.mean(accuracy_scores)\n", "std_dev_accuracy = np.std(accuracy_scores)\n", "\n", "mean_precision = np.mean(precision_scores)\n", "std_dev_precision = np.std(precision_scores)\n", "\n", "mean_recall = np.mean(recall_scores)\n", "std_dev_recall = np.std(recall_scores)\n", "\n", "mean_f1 = np.mean(f1_scores)\n", "std_dev_f1 = np.std(f1_scores)\n", "\n", "# Print results\n", "print(f\"Cross-Validated Accuracy: Mean = {mean_accuracy:.4f}, Std Dev = {std_dev_accuracy:.2f}\")\n", "print(f\"Cross-Validated Precision: Mean = {mean_precision:.4f}, Std Dev = {std_dev_precision:.2f}\")\n", "print(f\"Cross-Validated Recall: Mean = {mean_recall:f}, Std Dev = {std_dev_recall:.2f}\")\n", "print(f\"Cross-Validated F1-Score: Mean = {mean_f1:f}, Std Dev = {std_dev_f1:.2f}\")\n" ] }, { "cell_type": "code", "execution_count": 19, "id": "31564605", "metadata": {}, "outputs": [], "source": [ "#Explainable AI" ] }, { "cell_type": "code", "execution_count": 20, "id": "d20f61b9", "metadata": {}, "outputs": [], "source": [ "#LIME" ] }, { "cell_type": "code", "execution_count": 23, "id": "98db29bd", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Defaulting to user installation because normal site-packages is not writeable\n", "Looking in indexes: https://pypi.org/simple, https://pypi.ngc.nvidia.com\n", "Collecting lime\n", " Downloading lime-0.2.0.1.tar.gz (275 kB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m275.7/275.7 kB\u001b[0m \u001b[31m8.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25h Preparing metadata (setup.py) ... \u001b[?25ldone\n", "\u001b[?25hRequirement already satisfied: matplotlib in /home/gowthami.cse/.local/lib/python3.7/site-packages (from lime) (3.5.3)\n", "Requirement already satisfied: numpy in /home/gowthami.cse/.local/lib/python3.7/site-packages (from lime) (1.18.5)\n", "Requirement already satisfied: scipy in /home/gowthami.cse/.local/lib/python3.7/site-packages (from lime) (1.7.3)\n", "Requirement already satisfied: tqdm in /opt/anaconda3/lib/python3.7/site-packages (from lime) (4.64.1)\n", "Requirement already satisfied: scikit-learn>=0.18 in /opt/anaconda3/lib/python3.7/site-packages (from lime) (1.0.2)\n", "Requirement already satisfied: scikit-image>=0.12 in /opt/anaconda3/lib/python3.7/site-packages (from lime) (0.19.3)\n", "Requirement already satisfied: networkx>=2.2 in /opt/anaconda3/lib/python3.7/site-packages (from scikit-image>=0.12->lime) (2.6.3)\n", "Requirement already satisfied: pillow!=7.1.0,!=7.1.1,!=8.3.0,>=6.1.0 in /home/gowthami.cse/.local/lib/python3.7/site-packages (from scikit-image>=0.12->lime) (9.5.0)\n", "Requirement already satisfied: imageio>=2.4.1 in /opt/anaconda3/lib/python3.7/site-packages (from scikit-image>=0.12->lime) (2.22.4)\n", "Requirement already satisfied: tifffile>=2019.7.26 in /opt/anaconda3/lib/python3.7/site-packages (from scikit-image>=0.12->lime) (2021.11.2)\n", "Requirement already satisfied: PyWavelets>=1.1.1 in /opt/anaconda3/lib/python3.7/site-packages (from scikit-image>=0.12->lime) (1.3.0)\n", "Requirement already satisfied: packaging>=20.0 in /home/gowthami.cse/.local/lib/python3.7/site-packages (from scikit-image>=0.12->lime) (24.0)\n", "Requirement already satisfied: joblib>=0.11 in /opt/anaconda3/lib/python3.7/site-packages (from scikit-learn>=0.18->lime) (1.2.0)\n", "Requirement already satisfied: threadpoolctl>=2.0.0 in /opt/anaconda3/lib/python3.7/site-packages (from scikit-learn>=0.18->lime) (3.1.0)\n", "Requirement already satisfied: cycler>=0.10 in /home/gowthami.cse/.local/lib/python3.7/site-packages (from matplotlib->lime) (0.11.0)\n", "Requirement already satisfied: fonttools>=4.22.0 in /home/gowthami.cse/.local/lib/python3.7/site-packages (from matplotlib->lime) (4.38.0)\n", "Requirement already satisfied: kiwisolver>=1.0.1 in /home/gowthami.cse/.local/lib/python3.7/site-packages (from matplotlib->lime) (1.4.5)\n", "Requirement already satisfied: pyparsing>=2.2.1 in /home/gowthami.cse/.local/lib/python3.7/site-packages (from matplotlib->lime) (3.1.4)\n", "Requirement already satisfied: python-dateutil>=2.7 in /home/gowthami.cse/.local/lib/python3.7/site-packages (from matplotlib->lime) (2.9.0.post0)\n", "Requirement already satisfied: typing-extensions in /opt/anaconda3/lib/python3.7/site-packages (from kiwisolver>=1.0.1->matplotlib->lime) (4.7.1)\n", "Requirement already satisfied: six>=1.5 in /home/gowthami.cse/.local/lib/python3.7/site-packages (from python-dateutil>=2.7->matplotlib->lime) (1.16.0)\n", "Building wheels for collected packages: lime\n", " Building wheel for lime (setup.py) ... \u001b[?25ldone\n", "\u001b[?25h Created wheel for lime: filename=lime-0.2.0.1-py3-none-any.whl size=283839 sha256=64ed670f4986da3fa78e3fc8fd1dd5b97fcc7bd240ed8b31219a309d94a55936\n", " Stored in directory: /tmp/pip-ephem-wheel-cache-feidwlvb/wheels/ca/cb/e5/ac701e12d365a08917bf4c6171c0961bc880a8181359c66aa7\n", "Successfully built lime\n", "Installing collected packages: lime\n", "Successfully installed lime-0.2.0.1\n", "\n", "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m23.2.1\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m24.0\u001b[0m\n", "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpip3.7 install --upgrade pip\u001b[0m\n", "Note: you may need to restart the kernel to use updated packages.\n" ] } ], "source": [ "pip install lime" ] }, { "cell_type": "code", "execution_count": 24, "id": "cf8e1840", "metadata": {}, "outputs": [], "source": [ "from lime import lime_tabular\n", "#feature_names = X.columns\n", "\n", "inter= lime_tabular.LimeTabularExplainer(training_data=np.array(X_train),\n", "\t\t\t\t\t\t\t\t\t\t\t\tfeature_names =X_train.columns,\n", " mode= 'classification')" ] }, { "cell_type": "code", "execution_count": 32, "id": "ef24e17f", "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " \n", "
\n", " \n", " \n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "exp=inter.explain_instance(\n", " data_row=X_test.iloc[1],\n", " predict_fn=ensemble2.predict_proba)\n", "exp.show_in_notebook(show_table=True)" ] }, { "cell_type": "code", "execution_count": 33, "id": "7b1362f6", "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " \n", "
\n", " \n", " \n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "exp=inter.explain_instance(\n", " data_row=X_test.iloc[20],\n", " predict_fn=ensemble2.predict_proba)\n", "exp.show_in_notebook(show_table=True)" ] }, { "cell_type": "code", "execution_count": 27, "id": "fe414c1b", "metadata": {}, "outputs": [], "source": [ "#SHAP" ] }, { "cell_type": "code", "execution_count": 30, "id": "c7fd492b", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Defaulting to user installation because normal site-packages is not writeable\n", "Looking in indexes: https://pypi.org/simple, https://pypi.ngc.nvidia.com\n", "Requirement already satisfied: shap in /opt/anaconda3/lib/python3.7/site-packages (0.39.0)\n", "Requirement already satisfied: numpy in /home/gowthami.cse/.local/lib/python3.7/site-packages (from shap) (1.18.5)\n", "Requirement already satisfied: scipy in /home/gowthami.cse/.local/lib/python3.7/site-packages (from shap) (1.7.3)\n", "Requirement already satisfied: scikit-learn in /opt/anaconda3/lib/python3.7/site-packages (from shap) (1.0.2)\n", "Requirement already satisfied: pandas in /home/gowthami.cse/.local/lib/python3.7/site-packages (from shap) (1.3.5)\n", "Requirement already satisfied: tqdm>4.25.0 in /opt/anaconda3/lib/python3.7/site-packages (from shap) (4.64.1)\n", "Requirement already satisfied: slicer==0.0.7 in /opt/anaconda3/lib/python3.7/site-packages (from shap) (0.0.7)\n", "Requirement already satisfied: numba in /opt/anaconda3/lib/python3.7/site-packages (from shap) (0.56.4)\n", "Requirement already satisfied: cloudpickle in /opt/anaconda3/lib/python3.7/site-packages (from shap) (2.2.0)\n", "Collecting llvmlite<0.40,>=0.39.0dev0 (from numba->shap)\n", " Obtaining dependency information for llvmlite<0.40,>=0.39.0dev0 from https://files.pythonhosted.org/packages/6f/78/15e11f84531c3e4e078ed2faa4e6e078ef2a0c06c6275020bc10c3865e9c/llvmlite-0.39.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata\n", " Downloading llvmlite-0.39.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.7 kB)\n", "Requirement already satisfied: setuptools in /home/gowthami.cse/.local/lib/python3.7/site-packages (from numba->shap) (68.0.0)\n", "Requirement already satisfied: importlib-metadata in /home/gowthami.cse/.local/lib/python3.7/site-packages (from numba->shap) (6.7.0)\n", "Requirement already satisfied: python-dateutil>=2.7.3 in /home/gowthami.cse/.local/lib/python3.7/site-packages (from pandas->shap) (2.9.0.post0)\n", "Requirement already satisfied: pytz>=2017.3 in /opt/anaconda3/lib/python3.7/site-packages (from pandas->shap) (2022.6)\n", "Requirement already satisfied: joblib>=0.11 in /opt/anaconda3/lib/python3.7/site-packages (from scikit-learn->shap) (1.2.0)\n", "Requirement already satisfied: threadpoolctl>=2.0.0 in /opt/anaconda3/lib/python3.7/site-packages (from scikit-learn->shap) (3.1.0)\n", "Requirement already satisfied: six>=1.5 in /home/gowthami.cse/.local/lib/python3.7/site-packages (from python-dateutil>=2.7.3->pandas->shap) (1.16.0)\n", "Requirement already satisfied: zipp>=0.5 in /opt/anaconda3/lib/python3.7/site-packages (from importlib-metadata->numba->shap) (3.10.0)\n", "Requirement already satisfied: typing-extensions>=3.6.4 in /opt/anaconda3/lib/python3.7/site-packages (from importlib-metadata->numba->shap) (4.7.1)\n", "Downloading llvmlite-0.39.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (34.6 MB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m34.6/34.6 MB\u001b[0m \u001b[31m6.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0ma \u001b[36m0:00:01\u001b[0m\n", "\u001b[?25hInstalling collected packages: llvmlite\n", "Successfully installed llvmlite-0.39.1\n", "\n", "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m23.2.1\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m24.0\u001b[0m\n", "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpip3.7 install --upgrade pip\u001b[0m\n", "Note: you may need to restart the kernel to use updated packages.\n" ] } ], "source": [ "pip install shap\n" ] }, { "cell_type": "code", "execution_count": 34, "id": "f4874a5c", "metadata": {}, "outputs": [], "source": [ "import shap" ] }, { "cell_type": "code", "execution_count": 44, "id": "fd462864", "metadata": {}, "outputs": [], "source": [ "explainer = shap.TreeExplainer(xgb)" ] }, { "cell_type": "code", "execution_count": 39, "id": "a10cacd8", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Age (yrs)Weight (Kg)BMIPulse rate(bpm)Hb(g/dl)Cycle(R/I)Cycle length(days)Marraige Status (Yrs)Hip(inch)Waist(inch)...hair growth(Y/N)Skin darkening (Y/N)Hair loss(Y/N)Pimples(Y/N)Fast food (Y/N)Follicle No. (L)Follicle No. (R)Avg. F size (L) (mm)Avg. F size (R) (mm)Endometrium (mm)
200.5555560.2313620.2945130.8550720.6986540.00.30.7397970.3181820.304348...0.00.00.01.00.00.0454550.150.7470540.4965190.236298
\n", "

1 rows × 23 columns

\n", "
" ], "text/plain": [ " Age (yrs) Weight (Kg) BMI Pulse rate(bpm) Hb(g/dl) Cycle(R/I) \\\n", "20 0.555556 0.231362 0.294513 0.855072 0.698654 0.0 \n", "\n", " Cycle length(days) Marraige Status (Yrs) Hip(inch) Waist(inch) ... \\\n", "20 0.3 0.739797 0.318182 0.304348 ... \n", "\n", " hair growth(Y/N) Skin darkening (Y/N) Hair loss(Y/N) Pimples(Y/N) \\\n", "20 0.0 0.0 0.0 1.0 \n", "\n", " Fast food (Y/N) Follicle No. (L) Follicle No. (R) Avg. F size (L) (mm) \\\n", "20 0.0 0.045455 0.15 0.747054 \n", "\n", " Avg. F size (R) (mm) Endometrium (mm) \n", "20 0.496519 0.236298 \n", "\n", "[1 rows x 23 columns]" ] }, "execution_count": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X_test.loc[[20]]" ] }, { "cell_type": "code", "execution_count": 45, "id": "b888f206", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABoYAAAFpCAYAAACxqZoxAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/NK7nSAAAACXBIWXMAAA9hAAAPYQGoP6dpAADQVklEQVR4nOzdd3zbZP4H8I/kFTuz2U1XuvdgFmiBsnc5eseexygbjnE/xsEBxz6OAw4OuGPvdayyV9m0jNK96R7Zezhe0u+Px4ol2Umc1I4d5/N+vdzUsiQ/kvXI8vPV93kkVVVVEBERERERERERERERUcqTE10AIiIiIiIiIiIiIiIi6h0MDBEREREREREREREREfUTDAwRERERERERERERERH1EwwMERERERERERERERER9RMMDBEREREREREREREREfUTDAwRERERERERERERERH1EwwMERERERERERERERER9RMMDBEREREREREREREREfUTDAwRERERERERERERERH1EwwMERERERERERERERER9RMMDBEREREREREREREREfUTDAwRERERERERERERERH1EwwMERERERERERERERER9RMMDBEREREREREREcXa+z8DTe5El4KIiCgMA0NERERERERERESxtLMW+OO/gDl3MzhERERJh4EhIiIiIiIiIiKiWCrJBZ67Eli8Efj9PUBzW6JLRERE1E5SVVVNdCGIiIiIiIiIiCjJHX0bUNEALPpn5/NsrQJWPNK9dd/1BnDPm8D6x4GinF0qZq+4643o5vtqBbBwLbDvWOCdvwBOe4/e7uSXq7G9IYDvLy7q0fJERER61kQXgIiIiIiIiIiIUsRDFwBef6JLEX/3vNm9+X/+DahqAIYWxKc8RERE3cDAEBERERERERERxcbokkSXoHc0vtr1PK0e4OS/A9+vAZ6+nEEhIiJKGhxjiIiIiIiIiIiIorepAvjdXcDAs4Eh5wIXPBIaQ+fo24BJlxnnf+wjYMoVQMGZwP7XA/OXAVc9CWSdEr7uVg/wpyeB0guAwjPF+tbtMM6zfidw1gPAsPPFOve+Fvj3h4B+tIS73hDr/3EtsN//ASMvjO0+6Io5KPS7fWK6+p+2eXDaq9WY+EAZxvxjJw57qhJP/dwMbcSIE16owvHPVxmWmbfKjWH37sT1H9cbpj/wXSNG3rcTzR4F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D7S0haY1tIpu5CYPS1y5YuSQkWn44JwCBoWIiKhP4RhDREREREREREQUHwXZwAe/AKf/E7jiWMAfAB56D6hvEc9TgMxxd4iIqI9hV3JERERERERERBQ/H/4C3P8usHY74AsA44cAVx8PzN470SUjIiLqlxgYIiIiIiIiIiIiIiIi6ic4xhAREREREREREREREVE/wcAQERERERERERERERFRP8HAEBERERERERERERERUT/BwBAREREREREREREREVE/wcAQERERERERERERERFRP8HAEBERERERERERERERUT/BwBAREREREREREREREVE/wcAQERERERERERERERFRP8HAEBERERERERERERERUT/BwBAREREREREREREREVE/wcAQEREREREREdEuevbZZ/Hxxx8nuhhxt3r1ajz88MOora1NdFF6RUtLC/73v//h0UcfxZdffgkAUFUV8+bNw3vvvQdVVTtd3uPx4LnnnsOPP/7YG8UlIiKKCgNDREREREREREREEaxZswZlZWU4+uijse+++wIAFi5ciNraWhx22GGQJKnT5R0OB44++mgsWrQIGzZs6I0iExERdYmBISIiIiIiIiIiogg8Hg8AoLS0FGlpaairq8OiRYuwzz77IC0tLap1FBQUYPz48fj222/h9/vjWVwiIqKoWBNdACIiIiIiIiKiVLFs2TL8+uuvaGlpQV5eHmbNmoXi4uL215csWYKVK1eivr4eNpsNhYWFmDlzJvLz8wGIbsoWLVqE1atXo6mpCTabDYMGDcKMGTOQnZ0NAAgEAvj555+xYcMGNDQ0wOl0YuzYsdh7771htYY39Xi9Xjz11FOYNm1ae9aL5t1330VLSwtOO+00KIqCn376CWvXrkVTUxOcTicGDhyImTNnIisrK+L2fv7559iyZQvOO++89mmNjY147rnnMGvWLEyePBkAUFdXhwULFqCiogJutxt5eXnYa6+9MGLEiF3b4XH01ltvYceOHQCAhx9+GOPHj4eqqsjIyMCYMWMAAA0NDXjllVcwdepUw759++230draipNPPhlWqxV77bUXVq5ciVWrVmHKlCkJ2R4iIiINM4aIiIiIiIiIiGKgrKwM27dvx7HHHos//OEPAID3338fXq8XgOiW7Ntvv8XkyZNx1llnYc6cOZBlGe+99x58Ph8AYNWqVfjll1+w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9XqRmZmJadOmYffdd4/Fru8Vsixj+PDh2Lx5Mw444ABIkoSdO3di6dKlOOKII9rHDSouLsbkyZPxzTffYPDgwcjIyEBzczOqq6txwAEHJHgriIiIAEmNprNYIiIiIiIiIiKifq62thYvv/wyDj30UEPGVVe++uorbN68GWeccUZ7oJCIiChR2JUcERERERERERFRFHJzc7H77rtj4cKF8Hg8US1TVVWFVatWYf/992dQiIiIkgIDQ0RERERERERERFHad999kZubi88++wxddcTj8Xjw0UcfYffdd8fIkSN7qYRERESdY1dyRERERERERERERERE/QQzhoiIiIiIiIiIiIiIiPoJBoaIiIiIiIiIiIiIiIj6CQaGiIiIiIiIiIiIiIiI+gkGhoiIiIiIiIiIiIiIiPoJBoaIiIiIiIiIiIiIiIj6CQaGiIiIiIiIiIiIiIiI+gkGhoiIiIiIiIiIiIiIiPoJBoaIiIiIiIiIiIiIiIj6CQaGiIiIiIiIiIiIiIiI+gkGhoiIiIiIiIiIiIiIiPoJBoaIiIiIiIiIiIiIiIj6CWuiC0BERERERERERJQoZ555Jn766acOXz/99NPx17/+Nap1VVRU4LjjjkNDQwMA4Pnnn8f06dMBAA8//DAeeeSRDpcdPXo03n///W6UnIiIqGcYGCIiIiIiIiIion4vMzMT48ePD5s+bNiwqJZXVRXXXXdde1CoM3vvvXfYtMGDB0f1PkRERLuKgSEiIiIiIiIiIur3xo8fjxdeeKHHyz/77LNYsGABJk6ciJUrV3Y67668DxER0a7iGENERERERERERES7YO3atfjnP/+J4uJiXHrppYkuDhERUaeYMURERERERERERP2e1+vFyy+/jJ9++glNTU0YOXIkTjnlFIwYMaLL5a699lp4vV7ceeedsNlsXb7Xl19+iY8//hjV1dUoLCzEscceixkzZsRqU4iIiDrFwBAREREREREREfV7S5YswZIlS9qff/fdd3j11Vfx8MMP48ADD+xwufvvvx/r1q3DKaecgpkzZ+LHH3/s8r0uuugiw/O33noLl1xyCa688soel5+IiCha7EqOiIiIiIiIiIj6LYfDAZfLhUGDBuGZZ57BokWL8MADD8Bms8Hj8eD6669HW1tbxGUXLFiA5557DkOHDsV1113X6fvYbDa4XC5kZmbi1ltvxc8//4w33ngDgwYNAgA8+uijWL58ecy3j4iIyIyBISIiIiIiIiIi6reefPJJLF68GPPnz8d+++2HjIwMHH300Zg9ezYAoLa2FosXLw5brqGhAddddx0kScLdd98Nl8vV6ftcdNFFWLx4MX755ReceuqpyMrKwpQpU3DFFVe0z/PFF1/EduOIiIgiYFdyREREREREREREJvqxhaqrq8Nenz9/PioqKmC1WnH11Ve3T/d6ve3/v/LKK2G32/H666+juLi4y/epqamJRdGJiIg6xcAQERERERERERH1SxUVFfjuu+9QXV2NmTNnYuLEiYbXNPn5+WHLqqoKAPD7/YZ59erq6gAAbW1tmDdvHqqrqzF48GAcfvjh7fNUVlZ2+j5ERESxJqnatxgREREREREREVE/UlVVhQMPPBCBQAB77703nnrqKdjtdmzZsgUnnngiGhoakJeXhy+//BI333wzli1bBgB4++234XQ6I67zxx9/xFlnnQUAeP755zF9+nQAwLHHHov169cjNzcXb775JkpKStDc3Izzzz+/vau6N998E5MmTeqFLSciov6MGUNERERERERERCnK5/PB6/XCbrfDZrMlujhJp6CgAJdffjkefPBB/PTTTzjwwANRUlKC9evXw+PxwGaz4Y477oDD4UBZWRk2bdoEAFAUpdvv9Ze//AVz585FbW0tjj76aIwaNQrbtm1DfX09AOCCCy5gUIiIiHoFA0NERERERERERCnK6/VCURR4vV4Ghjpw8cUXY/To0Xj55Zexbt06rF27Fjk5Odhrr71wwQUXYMKECTF5n3333Revv/46nnzySSxevBhr1qyB0+nEPvvsgzPOOAOHHXZYTN6HiIioK+xKjoiIiIiIiIgoRTU3N0NVVUiShIyMjEQXh4iIiJKAnOgCEBERERERERERERERUe9gYIiIiIiIiIiIiIiIiKifYGCIiIiIiIiIiIiIiIion2BgiIiIiIiIiIiIiIiIqJ9gYIiIiIiIiIiIiIiIiKifYGCIiIiIiIiIiIiIiIion2BgiIiIiIiIiIiIiIiIqJ9gYIiIiIiIiIiIiIiIiKifsCa6AERERERERERERH1Va2srVFWFJElwuVyJLg4REVGXGBgiIiIiIiIiIiLqIUVR2gNDREREfQG7kiMiIiIiIiIiIiIiIuonGBgiIiIiIiIiIiIiIiLqJxgYIqJe99xzz2Hs2LHYvn17ootClHTq6upw3XXXYcaMGZg+fTouu+wylJWVJbpYRElhx44dmDt3LqZPn46DDjoI9913HxRFSXSxiJLOjh07cOmll2L69OnYb7/9cP3116OxsTHRxSJKWnfddRfGjh2b6GIQJa3HHnsMM2fOxLRp03DOOefwtzxRBKtWrcJZZ52FPffcEzNmzMC1116L2traRBeLqEMMDBFRr6qoqMDTTz+d6GIQJa0bbrgB1dXVeO+99/DJJ5/A5/PhhhtuSHSxiJLC5ZdfjqKiInz++ed45pln8Pnnn+O5555LdLGIks5FF12ErKwszJ8/H2+99RbWr1+Pe++9N9HFIkpKq1evxrvvvpvoYhAlrZdeegnz5s3D888/j++++w6jRo3Cs88+m+hiESUVv9+PuXPnYtq0afjhhx/w/vvvo7a2Frfeemuii0bUIQaGiKhX3XnnnTjllFMSXQyipKSqKoqKinDdddchNzcXOTk5OOWUU7Bo0SKoqpro4hEl1PLly7FmzRpce+21yMzMRGlpKc455xy89tpriS4aUVJpbGzEpEmTcM011yA9PR3FxcU44YQT8MsvvyS6aERJR1EU3HLLLTjnnHMSXRSipPX000/jqquuwogRI5CRkYGbbroJN910U6KLRZRUqqqqUFVVheOPPx52ux0DBgzAYYcdhtWrVye6aEQdYmCIiHrN119/jbVr1+K8885LdFGIkpIkSbjtttswZsyY9mllZWUoKCiAJEkJLBlR4q1cuRKDBg1CdnZ2+7SJEydi06ZNaG5uTmDJiJJLVlYW7r77buTn57dPKysrQ2FhYQJLRZScXn31VTgcDhx33HGJLgpRUqqoqMD27dvR0NCAo48+GtOnT8cVV1zB7rGITIqKijB+/Hi89tpraGlpQU1NDT799FPMmjUr0UUj6hADQ0TUK9ra2nD77bfjr3/9K+x2e6KLQ9QnbN++HQ899BAuvvjiRBeFKOHq6+uRlZVlmKYFierq6hJRJKI+Yfny5XjxxRf5XUJkUl1djYcffhi33HJLootClLTKy8sBAB9//DGeeeYZvPvuuygvL2fGEJGJLMt4+OGH8cUXX2D33XfHfvvtB7/fj2uuuSbRRSPqEANDRBQT7777LsaOHRvx8dZbb+Gxxx7DpEmTMGPGjEQXlSihuqormg0bNuCMM87ACSecgBNPPDGBJSZKHuxSkah7Fi1ahPPOOw/XXHMN9ttvv0QXhyip3H333ZgzZw5GjRqV6KIQJS3t2uv8889HUVERiouLcfnll2P+/PnweDwJLh1R8vB6vbjoootw5JFH4pdffsE333yDzMxMXHvttYkuGlGHrIkuABGlhuOPPx7HH398xNc2bNiA++67D++8807vFoooCXVWVzTLli3DBRdcgHPPPRcXXnhhL5WMKLnl5uaivr7eMK2+vh6SJCE3NzcxhSJKYvPnz8ef//xn3Hzzzfjd736X6OIQJZUFCxZg8eLFeP/99xNdFKKkpnVLqs/aHjRoEFRVRU1NDUpKShJVNKKksmDBAmzfvh1XX301LBYLMjMzccUVV+D4449HfX09cnJyEl1EojDMGCKiuPvoo4/Q1NSE2bNnY/r06Zg+fToAYM6cOXjiiScSXDqi5LJ582bMnTsX1113HYNCRDqTJk1CWVmZoU/75cuXY9SoUUhPT09gyYiSz6+//orrrrsODz30EINCRBHMmzcPNTU1OOiggzB9+nTMmTMHADB9+nR88MEHCS4dUfIoLi5GRkYGVq9e3T5tx44dsNlsHLuOSCcQCEBRFEMPB16vN4ElIuqapLJPDiKKs+bm5rCBwQ888EC89tprGDVqFDIyMhJUMqLkc+6552LSpEm4+uqrE10UoqRz0kknYfTo0bjhhhtQUVGBuXPn4txzz8Xpp5+e6KIRJQ2/34/Zs2fj7LPPxsknn5zo4hAlpYaGBrjd7vbn5eXlOPnkk/H1118jOzsbTqczgaWLvebmZqiqCkmS+NsrTlJ5H99999344osv8NRTTyEjIwOXXnophg8fjrvvvjvRRSNKGnV1dTjyyCNxyimn4KKLLkJbWxtuvPFGNDU14cUXX0x08YgiYmCIiBJi7Nix+OKLLzB48OBEF4UoaZSVlWHWrFmw2WyQJMnw2tNPP4299torQSUjSg7l5eW4+eab8dNPPyEjIwOnnHIKLrvssrD6QtSf/fLLLzj99NNht9vDXvv4448xaNCgBJSKKLlt374dhxxyCNauXZvoosRFKgctkkUq72Ov14u7774bH3zwAXw+H4444gjcfPPNzNgmMlmxYgXuvfderFmzBna7HXvvvTeuv/56FBUVJbpoRBExMERERERERERElKJSOWiRLLiPiYior+EYQ0RERERERERERERERP0EA0NERERERERERERERET9BANDRERERERERERERERE/QQDQ0RERERERERERERERP0EA0NERERERERERERERET9BANDRERERERERERERERE/QQDQ0RERERERERERERERP0EA0NERERERERERERERET9BANDRERERERERERERERE/QQDQ0RERERERERERERERP2ENdEFoJ5Zu3YtvF5vootBRERERERERElMVdX2/0uSlMCSpC7uYyIiSiZ2ux1jx47tdB5mDBFR3KmqCq/Xa7hYJiIj1hOi6LCuEEWHdYUoOqwrRNFhXSHqGusJ9SWSyiOViOKstbUVq1evxvjx4+FyuRJdHKKkxHpCFB3WFaLosK4QRac/1JXm5maoqgpJkpCRkZHo4qSk/rCP+0NdIdpVrCfUlzBjiIiIiIiIiIiIiIiIqJ9gYIiIiIiIiIiIiIiIiKifYGCIiIiIiIiIiIiIiIion2BgiIiIiIiIiIiIiIiIqJ9gYIiIiIiIiIiIiIiIiKifYGCIiIiIiIiIiChFSZJk+EtERETEwBARERERERERUYqy2+2QZRl2uz3RRSEiIqIkYU10AYiIiIiIiIiIKD5sNhtsNluii0FERERJhBlDRERERERERERERERE/QQDQ0RERERERERERERERP0EA0NERERERERERERERET9BANDRERERERERERERERE/QQDQ0RERERERERERERERP0EA0NERERERERERERERET9BANDRERERERERERERERE/YQ10QWgnvN4PAgEAokuBlGX3G634S8RhWM9IYoO60oSURRYNlbCUt8CRVWhqGrUi8qyBTJUBBQF0S/VNckiw6ICqgoEVCWGazauv7vbG7P3lyTIAGRJhk/p/HeAz+NBelkZfNUBtDkccSmPLMuQISGgBGL6OaYayWKBRVXjdlymHIsMiwJIEuBX4r+/eqOuUOpTJw8F7FZ4/AqW/NaY6OLEhcfjQVm9DfWbWuBw+GO2XqvFAossQVEC8AVS99vEbrUCEqAqCnyBvvNd4LBZoaqAovrh7wNNkA67FaqSuPJGU0/SHDYEAgoCgQCUOB7y8XyfNLsNAUWBoigI9GDlEgCH3YaAEgiuJ4plJMBhE8v4Awq6uhQ3b7+2vKIqGJcnwZri6TIul6vLeSRVTcAvGoqJRYsWJboIRERERNQP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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "shap.initjs()\n", "choosen_instance = X_test.loc[[10]]\n", "shap_values = explainer.shap_values(choosen_instance)\n", "shap.force_plot(explainer.expected_value,\n", " shap_values[0],\n", " choosen_instance,\n", " matplotlib=True)" ] }, { "cell_type": "code", "execution_count": 42, "id": "5089112d", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " * Serving Flask app '__main__'\n", " * Debug mode: off\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.\n", " * Running on http://127.0.0.1:5000\n", "Press CTRL+C to quit\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "None\n" ] } ], "source": [ "from flask import Flask, request, jsonify\n", "app = Flask(__name__)\n", "# Define a global variable to store the prediction\n", "global_prediction = None\n", "@app.route('/predict1', methods=['POST'])\n", "def predict1():\n", " global global_prediction # Declare that you are using the global variable\n", " data = request.get_json()\n", " # Extract input data from the request\n", " input_data = data.get('input_data')\n", " #global_prediction = ensemble1.predict(X_test.values[0].reshape(1, -1))\n", " global_prediction = ensemble1.predict(input_data.reshape(1, -1))\n", " print('global')\n", " print(global_prediction)\n", " # Return the prediction as JSON\n", " return jsonify({'prediction': int(global_prediction[0])})\n", " #return jsonify({'prediction': int(yhat[0])})\n", "if __name__ == '__main__':\n", " app.run(port=5000)\n", "# Now you can print the value of global_prediction outside of the Flask app\n", "print(global_prediction)" ] }, { "cell_type": "code", "execution_count": null, "id": "9b13963c", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "colab": { "provenance": [] }, "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.6" } }, "nbformat": 4, "nbformat_minor": 5 }