{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "defc48be-1bc9-4fb0-9611-8dcd1624da4d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best Parameters: {'max_depth': 10, 'n_estimators': 150}\n",
      "Test Accuracy of Best Model: 1.0\n",
      "Selected Features using RFE: ['sg', 'al', 'bgr', 'hemo', 'appet']\n",
      "Selected Features using SelectKBest: ['sg', 'al', 'bgr', 'hemo', 'htn']\n",
      "Test Accuracy with Selected Features (RFE): 0.975\n",
      "Test Accuracy with Selected Features (SelectKBest): 0.975\n"
     ]
    }
   ],
   "source": [
    "import pandas as pd\n",
    "from sklearn.ensemble import RandomForestClassifier\n",
    "from sklearn.model_selection import train_test_split, GridSearchCV\n",
    "from sklearn.feature_selection import RFE, SelectKBest, f_classif\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "\n",
    "data = pd.read_csv(\"cleaned_kidney_disease.csv\")\n",
    "data.fillna(data.mean(), inplace=True)\n",
    "\n",
    "target_column = data.columns[-1]\n",
    "X = data.drop(target_column, axis=1)\n",
    "y = data[target_column]\n",
    "\n",
    "scaler = StandardScaler()\n",
    "X_scaled = scaler.fit_transform(X)\n",
    "\n",
    "X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42)\n",
    "\n",
    "param_grid = {'n_estimators': [50, 100, 150], 'max_depth': [None, 10, 20]}\n",
    "grid_search = GridSearchCV(RandomForestClassifier(), param_grid, cv=5)\n",
    "grid_search.fit(X_train, y_train)\n",
    "best_model = grid_search.best_estimator_\n",
    "print(\"Best Parameters:\", grid_search.best_params_)\n",
    "print(\"Test Accuracy of Best Model:\", best_model.score(X_test, y_test))\n",
    "\n",
    "rfe = RFE(estimator=LogisticRegression(max_iter=1000), n_features_to_select=5)\n",
    "rfe.fit(X_train, y_train)\n",
    "selected_features_rfe = [X.columns[i] for i in range(len(rfe.support_)) if rfe.support_[i]]\n",
    "print(\"Selected Features using RFE:\", selected_features_rfe)\n",
    "\n",
    "select_k_best = SelectKBest(score_func=f_classif, k=5)\n",
    "select_k_best.fit(X_train, y_train)\n",
    "selected_features_kbest = [X.columns[i] for i in range(len(select_k_best.get_support())) if select_k_best.get_support()[i]]\n",
    "print(\"Selected Features using SelectKBest:\", selected_features_kbest)\n",
    "\n",
    "X_train_rfe = X_train[:, rfe.support_]\n",
    "X_test_rfe = X_test[:, rfe.support_]\n",
    "best_model.fit(X_train_rfe, y_train)\n",
    "rfe_test_accuracy = best_model.score(X_test_rfe, y_test)\n",
    "print(\"Test Accuracy with Selected Features (RFE):\", rfe_test_accuracy)\n",
    "\n",
    "X_train_kbest = X_train[:, select_k_best.get_support()]\n",
    "X_test_kbest = X_test[:, select_k_best.get_support()]\n",
    "best_model.fit(X_train_kbest, y_train)\n",
    "kbest_test_accuracy = best_model.score(X_test_kbest, y_test)\n",
    "print(\"Test Accuracy with Selected Features (SelectKBest):\", kbest_test_accuracy)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "28e9effe-3179-4000-9866-f82bf5683119",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "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.12.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
