{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "a6700b3f-4aee-4d2c-a957-e00af2007318",
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "from sklearn.model_selection import train_test_split, GridSearchCV\n",
    "from sklearn.preprocessing import LabelEncoder\n",
    "from sklearn.ensemble import RandomForestClassifier\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "from sklearn.svm import SVC\n",
    "from sklearn.feature_selection import RFE\n",
    "from sklearn.metrics import accuracy_score, classification_report\n",
    "import numpy as np"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "5938661c-f27b-42b5-aa75-69654b5208e6",
   "metadata": {},
   "outputs": [
    {
     "ename": "NameError",
     "evalue": "name 'pd' is not defined",
     "output_type": "error",
     "traceback": [
      "\u001b[31m---------------------------------------------------------------------------\u001b[39m",
      "\u001b[31mNameError\u001b[39m                                 Traceback (most recent call last)",
      "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[7]\u001b[39m\u001b[32m, line 1\u001b[39m\n\u001b[32m----> \u001b[39m\u001b[32m1\u001b[39m df = pd.read_csv(\u001b[33m\"\u001b[39m\u001b[33mbreast-cancer.csv\u001b[39m\u001b[33m\"\u001b[39m)\n\u001b[32m      2\u001b[39m df = df.drop(columns=[\u001b[33m\"\u001b[39m\u001b[33mid\u001b[39m\u001b[33m\"\u001b[39m])\n\u001b[32m      4\u001b[39m df[\u001b[33m\"\u001b[39m\u001b[33mdiagnosis\u001b[39m\u001b[33m\"\u001b[39m] = LabelEncoder().fit_transform(df[\u001b[33m\"\u001b[39m\u001b[33mdiagnosis\u001b[39m\u001b[33m\"\u001b[39m])\n",
      "\u001b[31mNameError\u001b[39m: name 'pd' is not defined"
     ]
    }
   ],
   "source": [
    "df = pd.read_csv(\"breast-cancer.csv\")\n",
    "df = df.drop(columns=[\"id\"])\n",
    "\n",
    "df[\"diagnosis\"] = LabelEncoder().fit_transform(df[\"diagnosis\"])\n",
    "X = df.drop(columns=[\"diagnosis\"])\n",
    "y = df[\"diagnosis\"]\n",
    "\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "e3363306-1e86-463c-a60c-0b2649413c7e",
   "metadata": {},
   "outputs": [
    {
     "ename": "NameError",
     "evalue": "name 'RandomForestClassifier' is not defined",
     "output_type": "error",
     "traceback": [
      "\u001b[31m---------------------------------------------------------------------------\u001b[39m",
      "\u001b[31mNameError\u001b[39m                                 Traceback (most recent call last)",
      "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[6]\u001b[39m\u001b[32m, line 7\u001b[39m\n\u001b[32m      1\u001b[39m models = {\n\u001b[32m      2\u001b[39m     \u001b[33m\"\u001b[39m\u001b[33mLogistic Regression\u001b[39m\u001b[33m\"\u001b[39m: {\n\u001b[32m      3\u001b[39m         \u001b[33m\"\u001b[39m\u001b[33mmodel\u001b[39m\u001b[33m\"\u001b[39m: LogisticRegression(max_iter=\u001b[32m5000\u001b[39m),\n\u001b[32m      4\u001b[39m         \u001b[33m\"\u001b[39m\u001b[33mparams\u001b[39m\u001b[33m\"\u001b[39m: {\u001b[33m\"\u001b[39m\u001b[33mC\u001b[39m\u001b[33m\"\u001b[39m: [\u001b[32m1\u001b[39m]}\n\u001b[32m      5\u001b[39m     },\n\u001b[32m      6\u001b[39m     \u001b[33m\"\u001b[39m\u001b[33mRandom Forest\u001b[39m\u001b[33m\"\u001b[39m: {\n\u001b[32m----> \u001b[39m\u001b[32m7\u001b[39m         \u001b[33m\"\u001b[39m\u001b[33mmodel\u001b[39m\u001b[33m\"\u001b[39m: RandomForestClassifier(),\n\u001b[32m      8\u001b[39m         \u001b[33m\"\u001b[39m\u001b[33mparams\u001b[39m\u001b[33m\"\u001b[39m: {\u001b[33m\"\u001b[39m\u001b[33mn_estimators\u001b[39m\u001b[33m\"\u001b[39m: [\u001b[32m100\u001b[39m], \u001b[33m\"\u001b[39m\u001b[33mmax_depth\u001b[39m\u001b[33m\"\u001b[39m: [\u001b[38;5;28;01mNone\u001b[39;00m]}\n\u001b[32m      9\u001b[39m     },\n\u001b[32m     10\u001b[39m     \u001b[33m\"\u001b[39m\u001b[33mSVM\u001b[39m\u001b[33m\"\u001b[39m: {\n\u001b[32m     11\u001b[39m         \u001b[33m\"\u001b[39m\u001b[33mmodel\u001b[39m\u001b[33m\"\u001b[39m: SVC(),\n\u001b[32m     12\u001b[39m         \u001b[33m\"\u001b[39m\u001b[33mparams\u001b[39m\u001b[33m\"\u001b[39m: {\u001b[33m\"\u001b[39m\u001b[33mC\u001b[39m\u001b[33m\"\u001b[39m: [\u001b[32m1\u001b[39m], \u001b[33m\"\u001b[39m\u001b[33mkernel\u001b[39m\u001b[33m\"\u001b[39m: [\u001b[33m\"\u001b[39m\u001b[33mlinear\u001b[39m\u001b[33m\"\u001b[39m]}\n\u001b[32m     13\u001b[39m     }\n\u001b[32m     14\u001b[39m }\n",
      "\u001b[31mNameError\u001b[39m: name 'RandomForestClassifier' is not defined"
     ]
    }
   ],
   "source": [
    "models = {\n",
    "    \"Logistic Regression\": {\n",
    "        \"model\": LogisticRegression(max_iter=5000),\n",
    "        \"params\": {\"C\": [1]}\n",
    "    },\n",
    "    \"Random Forest\": {\n",
    "        \"model\": RandomForestClassifier(),\n",
    "        \"params\": {\"n_estimators\": [100], \"max_depth\": [None]}\n",
    "    },\n",
    "    \"SVM\": {\n",
    "        \"model\": SVC(),\n",
    "        \"params\": {\"C\": [1], \"kernel\": [\"linear\"]}\n",
    "    }\n",
    "}\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "f78566c0-bcf0-48a7-9043-4b64a0c76523",
   "metadata": {},
   "outputs": [
    {
     "ename": "NameError",
     "evalue": "name 'models' is not defined",
     "output_type": "error",
     "traceback": [
      "\u001b[31m---------------------------------------------------------------------------\u001b[39m",
      "\u001b[31mNameError\u001b[39m                                 Traceback (most recent call last)",
      "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[3]\u001b[39m\u001b[32m, line 1\u001b[39m\n\u001b[32m----> \u001b[39m\u001b[32m1\u001b[39m \u001b[38;5;28;01mfor\u001b[39;00m name, config \u001b[38;5;129;01min\u001b[39;00m models.items():\n\u001b[32m      2\u001b[39m     grid = GridSearchCV(config[\u001b[33m\"\u001b[39m\u001b[33mmodel\u001b[39m\u001b[33m\"\u001b[39m], config[\u001b[33m\"\u001b[39m\u001b[33mparams\u001b[39m\u001b[33m\"\u001b[39m], cv=\u001b[32m5\u001b[39m)\n\u001b[32m      3\u001b[39m     grid.fit(X_train, y_train)\n",
      "\u001b[31mNameError\u001b[39m: name 'models' is not defined"
     ]
    }
   ],
   "source": [
    "for name, config in models.items():\n",
    "    grid = GridSearchCV(config[\"model\"], config[\"params\"], cv=5)\n",
    "    grid.fit(X_train, y_train)\n",
    "    preds = grid.predict(X_test)\n",
    "    print(f\"\\n{name} Results:\")\n",
    "    print(\"Best Params:\", grid.best_params_)\n",
    "    print(\"Accuracy:\", accuracy_score(y_test, preds))\n",
    "    print(\"Classification Report:\\n\", classification_report(y_test, preds))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "a78c4cdd-f0df-4c03-a603-b64d4b2643b9",
   "metadata": {},
   "outputs": [
    {
     "ename": "NameError",
     "evalue": "name 'X_train' is not defined",
     "output_type": "error",
     "traceback": [
      "\u001b[31m---------------------------------------------------------------------------\u001b[39m",
      "\u001b[31mNameError\u001b[39m                                 Traceback (most recent call last)",
      "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[4]\u001b[39m\u001b[32m, line 5\u001b[39m\n\u001b[32m      2\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01msklearn\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01mlinear_model\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m LogisticRegression\n\u001b[32m      4\u001b[39m rfe_selector = RFE(LogisticRegression(max_iter=\u001b[32m5000\u001b[39m), n_features_to_select=\u001b[32m10\u001b[39m)\n\u001b[32m----> \u001b[39m\u001b[32m5\u001b[39m rfe_selector.fit(X_train, y_train)\n\u001b[32m      6\u001b[39m rfe_features = X_train.columns[rfe_selector.support_]\n\u001b[32m      8\u001b[39m rf_model = RandomForestClassifier()\n",
      "\u001b[31mNameError\u001b[39m: name 'X_train' is not defined"
     ]
    }
   ],
   "source": [
    "from sklearn.feature_selection import RFE\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "\n",
    "rfe_selector = RFE(LogisticRegression(max_iter=5000), n_features_to_select=10)\n",
    "rfe_selector.fit(X_train, y_train)\n",
    "rfe_features = X_train.columns[rfe_selector.support_]\n",
    "\n",
    "rf_model = RandomForestClassifier()\n",
    "rf_model.fit(X_train, y_train)\n",
    "importances = rf_model.feature_importances_\n",
    "rf_top10_features = X_train.columns[np.argsort(importances)[-10:]]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "5e775d2a-fd99-4648-af02-ece0c49fc8d4",
   "metadata": {},
   "outputs": [
    {
     "ename": "NameError",
     "evalue": "name 'rfe_features' is not defined",
     "output_type": "error",
     "traceback": [
      "\u001b[31m---------------------------------------------------------------------------\u001b[39m",
      "\u001b[31mNameError\u001b[39m                                 Traceback (most recent call last)",
      "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[5]\u001b[39m\u001b[32m, line 9\u001b[39m\n\u001b[32m      6\u001b[39m     \u001b[38;5;28mprint\u001b[39m(\u001b[33m\"\u001b[39m\u001b[33mAccuracy:\u001b[39m\u001b[33m\"\u001b[39m, accuracy_score(y_test, preds))\n\u001b[32m      7\u001b[39m     \u001b[38;5;28mprint\u001b[39m(\u001b[33m\"\u001b[39m\u001b[33mClassification Report:\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[33m\"\u001b[39m, classification_report(y_test, preds))\n\u001b[32m----> \u001b[39m\u001b[32m9\u001b[39m evaluate_features(rfe_features)\n\u001b[32m     10\u001b[39m evaluate_features(rf_top10_features)\n",
      "\u001b[31mNameError\u001b[39m: name 'rfe_features' is not defined"
     ]
    }
   ],
   "source": [
    "def evaluate_features(features):\n",
    "    model = RandomForestClassifier(n_estimators=100)\n",
    "    model.fit(X_train[features], y_train)\n",
    "    preds = model.predict(X_test[features])\n",
    "    print(\"\\nEvaluation with features:\", list(features))\n",
    "    print(\"Accuracy:\", accuracy_score(y_test, preds))\n",
    "    print(\"Classification Report:\\n\", classification_report(y_test, preds))\n",
    "\n",
    "evaluate_features(rfe_features)\n",
    "evaluate_features(rf_top10_features)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "f50cb4cc-5cb5-4290-98e6-93ff9c992eba",
   "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.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
