{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# ML Models\n",
    "K-nn, linear and logistic regression, decision trees"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "import sklearn\n",
    "\n",
    "from sklearn.model_selection import cross_val_score,train_test_split\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.metrics import accuracy_score, log_loss\n",
    "\n",
    "from sklearn.linear_model import LinearRegression,LogisticRegression,Ridge\n",
    "from sklearn.tree import DecisionTreeClassifier,export_text, DecisionTreeRegressor\n",
    "\n",
    "from sklearn.neighbors import KNeighborsClassifier,KNeighborsRegressor\n",
    "\n",
    "from mlxtend.plotting import plot_decision_regions\n",
    "\n",
    "from sklearn.feature_selection import SelectKBest\n",
    "from sklearn.feature_selection import f_classif, f_regression\n",
    "\n",
    "import warnings\n",
    "warnings.simplefilter(\"ignore\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Skin of orange data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "sample_size=80\n",
    "np.random.seed(seed=1234)\n",
    "skin=pd.DataFrame(np.random.uniform(size=(sample_size,20)))\n",
    "skin['G']=skin[1]>1/2\n",
    "skin_test=pd.DataFrame(np.random.uniform(size=(80,20)))\n",
    "skin_test['G']=skin_test[1]>1/2\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "#skin.to_csv('data/skin.csv')\n",
    "#skin_test.to_csv('data/skin_test.csv')\n",
    "skin=pd.read_csv('data/skin.csv')\n",
    "skin_test=pd.read_csv('data/skin_test.csv')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Train test split"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train 60, Test 20\n"
     ]
    }
   ],
   "source": [
    "data=skin\n",
    "X, y = (data.iloc[:,:-1], data.iloc[:,-1])\n",
    "X_train0, X_test0, y_train, y_test = train_test_split(X, y, random_state=0)\n",
    "print('Train {}, Test {}'.format(len(y_train),len(y_test)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Feature selection, standardization only on Train data\n",
    "\n",
    "Transform the test data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Index(['1', '4'], dtype='object', name='column')"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "number_features=2\n",
    "preproc=SelectKBest(f_classif, k=number_features)\n",
    "X_train = preproc.fit_transform(X_train0,  y_train)\n",
    "\n",
    "scores=pd.DataFrame({'column':X_train0.columns,'score':preproc.scores_})\n",
    "X_train=pd.DataFrame(X_train, columns=scores.sort_values(by=['score'],ascending=False)[:number_features]['column'])\n",
    "X_test = pd.DataFrame(preproc.transform(X_test0), columns=scores.sort_values(by=['score'],ascending=False)[:number_features]['column'])\n",
    "X_train.columns"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Logistic Regression"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Test accurancy: 0.9\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([0.83333333, 1.        , 1.        , 0.83333333, 1.        ,\n",
       "       1.        , 0.83333333, 1.        , 0.83333333, 0.83333333])"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.linear_model import LogisticRegression\n",
    "lr=LogisticRegression(penalty='l2')\n",
    "lr.fit(X_train,y_train)\n",
    "\n",
    "print('Test accurancy: {}'.format(lr.score(X_test,y_test)))\n",
    "cv_score=cross_val_score(lr,X_train , y_train, cv=10)\n",
    "cv_score"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(array([-1.66969866]), array([[3.43914646, 0.96340696]]))"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "(lr.intercept_,lr.coef_)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## k Nearest Neighbours\n",
    "\n",
    "error estimates for different `k`"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1-neighbours: error=0.10\n",
      "5-neighbours: error=0.15\n",
      "10-neighbours: error=0.15\n",
      "40-neighbours: error=0.30\n"
     ]
    }
   ],
   "source": [
    "k=5\n",
    "for k in [1,5,10,40]:\n",
    "    clf = KNeighborsClassifier(n_neighbors=k)\n",
    "    clf.fit(X_train, y_train)    \n",
    "    print(f\"{k}-neighbours: error={np.mean(~clf.predict(X_test)==y_test):4.2f}\") # incorrect predictions/N"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Plot decision regions"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1080x792 with 4 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, ax_lst = plt.subplots(2, 2,figsize=(15,11)) \n",
    "fig.subplots_adjust(hspace=0.2, wspace=0.1)\n",
    "for (i,k) in [(1,1),(3,5)]:\n",
    "    sub1=plt.subplot(2,2,i)\n",
    "    clf = KNeighborsClassifier(n_neighbors=k)\n",
    "    clf.fit(X_train, y_train)                        ################### fit\n",
    "    plot_decision_regions(X_train.values, y_train.astype('int').values, clf=clf, legend=2) ######### train data plot\n",
    "    plt.title('Train data Knn with K={}'.format(k))\n",
    "    sub1=plt.subplot(2,2,i+1)\n",
    "    plot_decision_regions(X_test.values, y_test.astype('int').values, clf=clf, legend=2)  ########## test data plot, clf for background as before\n",
    "    plt.title('Test data Knn with K={}'.format(k))\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Bias variance tradeoff"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "num_trials=20\n",
    "best_features=10\n",
    "sample_size=80\n",
    "np.random.seed(seed=1234)\n",
    "\n",
    "results=pd.DataFrame(columns=['k','bias','variance'])\n",
    "columns=['X{}'.format(i) for i in range(20)]\n",
    "pred_cols=['P0', 'P1', 'P2', 'P3', 'P4', 'P5', 'P6', 'P7', 'P8', 'P9', 'P10',\n",
    "       'P11', 'P12', 'P13', 'P14', 'P15', 'P16', 'P17', 'P18', 'P19']\n",
    "col_names=columns\n",
    "\n",
    "test_data=pd.DataFrame(np.random.uniform(size=(sample_size,20)),columns=columns)\n",
    "for k in [1,2,3,4,5,6,7,8,9,10,20,50]:\n",
    "    test_df=test_data.copy()\n",
    "    for trial in range(num_trials):\n",
    "        sample_data=pd.DataFrame(np.random.uniform(size=(sample_size,20)),columns=columns)\n",
    "        y_train=sample_data['X1']>1/2\n",
    "\n",
    "        if k==0:\n",
    "            test_df['P{}'.format(trial)]=np.mean(y_train)\n",
    "        else:\n",
    "            preproc=SelectKBest(f_regression, k=best_features)\n",
    "#            X_train = preproc.fit_transform(sample_data,  y_train)\n",
    "#            scores=pd.DataFrame({'column':sample_data.columns,'score':preproc.scores_})\n",
    "#            col_names=scores.sort_values(by=['score'],ascending=False)[:k]['column']\n",
    "\n",
    "            clf = KNeighborsRegressor(n_neighbors=k)\n",
    "            clf.fit(sample_data[col_names], y_train)    \n",
    "            test_df['P{}'.format(trial)]=clf.predict(test_data[col_names])\n",
    "\n",
    "    test_df['Ef']=test_df[pred_cols].mean(axis=1)\n",
    "    test_df['Y']=test_df['X1']>1/2 \n",
    "\n",
    "    results=pd.concat([results, pd.DataFrame({'k':[k],\n",
    "                                              'bias':[(np.mean(np.abs(test_df['Ef']-test_df['Y'])))], \n",
    "                                              'variance':[np.mean((test_df[pred_cols].apply(lambda x: (x-test_df['Ef']),axis=0)).var(axis=0))]\n",
    "                                             })])\n",
    "    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(results.k, results.bias*results.bias,  color='green',label='squared bias')\n",
    "plt.plot(results.k, results.variance, color='blue',label='variance')\n",
    "plt.plot(results.k, results.variance+results.bias,color='red', label='both')\n",
    "\n",
    "plt.legend()\n",
    "plt.title('Bias(squared) and Variance')\n",
    "# grab a reference to the current axes\n",
    "ax = plt.gca()\n",
    "# set the xlimits to be the reverse of the current xlimits\n",
    "ax.set_xlim(ax.get_xlim()[::-1])\n",
    "# call `draw` to re-render the graph\n",
    "plt.ylabel('error')\n",
    "plt.xlabel('k neighbours')\n",
    "plt.grid()\n",
    "plt.draw()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>k</th>\n",
       "      <th>bias</th>\n",
       "      <th>variance</th>\n",
       "      <th>err</th>\n",
       "      <th>bias^2</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>9</td>\n",
       "      <td>0.353194</td>\n",
       "      <td>0.019024</td>\n",
       "      <td>0.143770</td>\n",
       "      <td>0.124746</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>8</td>\n",
       "      <td>0.352813</td>\n",
       "      <td>0.022756</td>\n",
       "      <td>0.147232</td>\n",
       "      <td>0.124477</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>6</td>\n",
       "      <td>0.346771</td>\n",
       "      <td>0.031052</td>\n",
       "      <td>0.151302</td>\n",
       "      <td>0.120250</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>10</td>\n",
       "      <td>0.365812</td>\n",
       "      <td>0.019274</td>\n",
       "      <td>0.153092</td>\n",
       "      <td>0.133819</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>5</td>\n",
       "      <td>0.338750</td>\n",
       "      <td>0.038844</td>\n",
       "      <td>0.153595</td>\n",
       "      <td>0.114752</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>7</td>\n",
       "      <td>0.360179</td>\n",
       "      <td>0.027032</td>\n",
       "      <td>0.156761</td>\n",
       "      <td>0.129729</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>3</td>\n",
       "      <td>0.311250</td>\n",
       "      <td>0.064101</td>\n",
       "      <td>0.160977</td>\n",
       "      <td>0.096877</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>20</td>\n",
       "      <td>0.401344</td>\n",
       "      <td>0.007778</td>\n",
       "      <td>0.168855</td>\n",
       "      <td>0.161077</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>4</td>\n",
       "      <td>0.347031</td>\n",
       "      <td>0.050606</td>\n",
       "      <td>0.171037</td>\n",
       "      <td>0.120431</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2</td>\n",
       "      <td>0.307500</td>\n",
       "      <td>0.092017</td>\n",
       "      <td>0.186574</td>\n",
       "      <td>0.094556</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>50</td>\n",
       "      <td>0.455525</td>\n",
       "      <td>0.001315</td>\n",
       "      <td>0.208818</td>\n",
       "      <td>0.207503</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0.293750</td>\n",
       "      <td>0.181797</td>\n",
       "      <td>0.268087</td>\n",
       "      <td>0.086289</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    k      bias  variance       err    bias^2\n",
       "0   9  0.353194  0.019024  0.143770  0.124746\n",
       "0   8  0.352813  0.022756  0.147232  0.124477\n",
       "0   6  0.346771  0.031052  0.151302  0.120250\n",
       "0  10  0.365812  0.019274  0.153092  0.133819\n",
       "0   5  0.338750  0.038844  0.153595  0.114752\n",
       "0   7  0.360179  0.027032  0.156761  0.129729\n",
       "0   3  0.311250  0.064101  0.160977  0.096877\n",
       "0  20  0.401344  0.007778  0.168855  0.161077\n",
       "0   4  0.347031  0.050606  0.171037  0.120431\n",
       "0   2  0.307500  0.092017  0.186574  0.094556\n",
       "0  50  0.455525  0.001315  0.208818  0.207503\n",
       "0   1  0.293750  0.181797  0.268087  0.086289"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "results['err']=results.variance+results.bias*results.bias\n",
    "results['bias^2']=results.bias*results.bias\n",
    "results.sort_values(by=['err'],ascending=True)#.iloc[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.001388888888888889"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "1/(12*60)"
   ]
  }
 ],
 "metadata": {
  "hide_input": false,
  "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.10.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
