[58a20e]: / training / softmax_reg.ipynb

Download this file

1190 lines (1189 with data), 88.7 kB

{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Collecting sklearn\n",
      "  Downloading sklearn-0.0.tar.gz (1.1 kB)\n",
      "Requirement already satisfied: scikit-learn in c:\\users\\joel\\anaconda3\\envs\\comp\\lib\\site-packages (from sklearn) (0.22.1)\n",
      "Requirement already satisfied: joblib>=0.11 in c:\\users\\joel\\anaconda3\\envs\\comp\\lib\\site-packages (from scikit-learn->sklearn) (0.14.1)\n",
      "Requirement already satisfied: numpy>=1.11.0 in c:\\users\\joel\\anaconda3\\envs\\comp\\lib\\site-packages (from scikit-learn->sklearn) (1.18.1)\n",
      "Requirement already satisfied: scipy>=0.17.0 in c:\\users\\joel\\anaconda3\\envs\\comp\\lib\\site-packages (from scikit-learn->sklearn) (1.4.1)\n",
      "Building wheels for collected packages: sklearn\n",
      "  Building wheel for sklearn (setup.py): started\n",
      "  Building wheel for sklearn (setup.py): finished with status 'done'\n",
      "  Created wheel for sklearn: filename=sklearn-0.0-py2.py3-none-any.whl size=1320 sha256=6a8aae0a46e00ab5e60b797ea7eb1b5e8240b278b1bb3a32685cfb2b46f505bb\n",
      "  Stored in directory: c:\\users\\joel\\appdata\\local\\pip\\cache\\wheels\\46\\ef\\c3\\157e41f5ee1372d1be90b09f74f82b10e391eaacca8f22d33e\n",
      "Successfully built sklearn\n",
      "Installing collected packages: sklearn\n",
      "Successfully installed sklearn-0.0\n"
     ]
    }
   ],
   "source": [
    "!pip install sklearn"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "from sklearn.multiclass import OneVsRestClassifier\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "from sklearn.metrics import roc_curve, roc_auc_score\n",
    "from sklearn.metrics import confusion_matrix"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "train_data = pd.read_csv('softmax_train.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "train_data = pd.read_csv('softmax_dataset_new.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "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>ax_normal</th>\n",
       "      <th>ax_abnormal</th>\n",
       "      <th>ax_acl</th>\n",
       "      <th>cor_normal</th>\n",
       "      <th>cor_abnormal</th>\n",
       "      <th>cor_acl</th>\n",
       "      <th>sag_normal</th>\n",
       "      <th>sag_abnormal</th>\n",
       "      <th>sag_acl</th>\n",
       "      <th>label</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.009713</td>\n",
       "      <td>0.989749</td>\n",
       "      <td>0.916373</td>\n",
       "      <td>0.119974</td>\n",
       "      <td>0.883050</td>\n",
       "      <td>0.718895</td>\n",
       "      <td>0.015162</td>\n",
       "      <td>0.985038</td>\n",
       "      <td>0.926093</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.014191</td>\n",
       "      <td>0.980667</td>\n",
       "      <td>0.925633</td>\n",
       "      <td>0.044364</td>\n",
       "      <td>0.956335</td>\n",
       "      <td>0.789032</td>\n",
       "      <td>0.017855</td>\n",
       "      <td>0.981429</td>\n",
       "      <td>0.929446</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.007830</td>\n",
       "      <td>0.990380</td>\n",
       "      <td>0.900669</td>\n",
       "      <td>0.078129</td>\n",
       "      <td>0.923744</td>\n",
       "      <td>0.740118</td>\n",
       "      <td>0.016741</td>\n",
       "      <td>0.984230</td>\n",
       "      <td>0.913814</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.009703</td>\n",
       "      <td>0.987407</td>\n",
       "      <td>0.933480</td>\n",
       "      <td>0.128174</td>\n",
       "      <td>0.873558</td>\n",
       "      <td>0.596139</td>\n",
       "      <td>0.010167</td>\n",
       "      <td>0.989766</td>\n",
       "      <td>0.959643</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.005827</td>\n",
       "      <td>0.993517</td>\n",
       "      <td>0.925906</td>\n",
       "      <td>0.018329</td>\n",
       "      <td>0.982625</td>\n",
       "      <td>0.607551</td>\n",
       "      <td>0.013189</td>\n",
       "      <td>0.986476</td>\n",
       "      <td>0.770761</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>553</th>\n",
       "      <td>0.028046</td>\n",
       "      <td>0.973639</td>\n",
       "      <td>0.267321</td>\n",
       "      <td>0.067432</td>\n",
       "      <td>0.940061</td>\n",
       "      <td>0.331581</td>\n",
       "      <td>0.030936</td>\n",
       "      <td>0.969067</td>\n",
       "      <td>0.152936</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>554</th>\n",
       "      <td>0.104018</td>\n",
       "      <td>0.910624</td>\n",
       "      <td>0.161932</td>\n",
       "      <td>0.119986</td>\n",
       "      <td>0.885913</td>\n",
       "      <td>0.576214</td>\n",
       "      <td>0.021173</td>\n",
       "      <td>0.978584</td>\n",
       "      <td>0.746935</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>555</th>\n",
       "      <td>0.042273</td>\n",
       "      <td>0.959196</td>\n",
       "      <td>0.600703</td>\n",
       "      <td>0.089168</td>\n",
       "      <td>0.911604</td>\n",
       "      <td>0.204822</td>\n",
       "      <td>0.036724</td>\n",
       "      <td>0.960655</td>\n",
       "      <td>0.284694</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>556</th>\n",
       "      <td>0.111872</td>\n",
       "      <td>0.865286</td>\n",
       "      <td>0.805120</td>\n",
       "      <td>0.015248</td>\n",
       "      <td>0.984486</td>\n",
       "      <td>0.650905</td>\n",
       "      <td>0.077663</td>\n",
       "      <td>0.925254</td>\n",
       "      <td>0.683657</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>557</th>\n",
       "      <td>0.256723</td>\n",
       "      <td>0.742153</td>\n",
       "      <td>0.189404</td>\n",
       "      <td>0.200638</td>\n",
       "      <td>0.808940</td>\n",
       "      <td>0.399186</td>\n",
       "      <td>0.085117</td>\n",
       "      <td>0.913553</td>\n",
       "      <td>0.456751</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>558 rows × 10 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "     ax_normal  ax_abnormal    ax_acl  cor_normal  cor_abnormal   cor_acl  \\\n",
       "0     0.009713     0.989749  0.916373    0.119974      0.883050  0.718895   \n",
       "1     0.014191     0.980667  0.925633    0.044364      0.956335  0.789032   \n",
       "2     0.007830     0.990380  0.900669    0.078129      0.923744  0.740118   \n",
       "3     0.009703     0.987407  0.933480    0.128174      0.873558  0.596139   \n",
       "4     0.005827     0.993517  0.925906    0.018329      0.982625  0.607551   \n",
       "..         ...          ...       ...         ...           ...       ...   \n",
       "553   0.028046     0.973639  0.267321    0.067432      0.940061  0.331581   \n",
       "554   0.104018     0.910624  0.161932    0.119986      0.885913  0.576214   \n",
       "555   0.042273     0.959196  0.600703    0.089168      0.911604  0.204822   \n",
       "556   0.111872     0.865286  0.805120    0.015248      0.984486  0.650905   \n",
       "557   0.256723     0.742153  0.189404    0.200638      0.808940  0.399186   \n",
       "\n",
       "     sag_normal  sag_abnormal   sag_acl  label  \n",
       "0      0.015162      0.985038  0.926093      2  \n",
       "1      0.017855      0.981429  0.929446      2  \n",
       "2      0.016741      0.984230  0.913814      2  \n",
       "3      0.010167      0.989766  0.959643      2  \n",
       "4      0.013189      0.986476  0.770761      2  \n",
       "..          ...           ...       ...    ...  \n",
       "553    0.030936      0.969067  0.152936      1  \n",
       "554    0.021173      0.978584  0.746935      1  \n",
       "555    0.036724      0.960655  0.284694      1  \n",
       "556    0.077663      0.925254  0.683657      1  \n",
       "557    0.085117      0.913553  0.456751      1  \n",
       "\n",
       "[558 rows x 10 columns]"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_data[train_data.columns[1:]]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "X = train_data[train_data.columns[1:10]].values\n",
    "Y = train_data['label'].values"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(558, 9)"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,\n",
       "                   intercept_scaling=1, l1_ratio=None, max_iter=100,\n",
       "                   multi_class='multinomial', n_jobs=None, penalty='l2',\n",
       "                   random_state=None, solver='lbfgs', tol=0.0001, verbose=0,\n",
       "                   warm_start=False)"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "softReg = LogisticRegression(multi_class = 'multinomial', solver = 'lbfgs')\n",
    "softReg.fit(X,Y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "OneVsRestClassifier(estimator=LogisticRegression(C=1.0, class_weight=None,\n",
       "                                                 dual=False, fit_intercept=True,\n",
       "                                                 intercept_scaling=1,\n",
       "                                                 l1_ratio=None, max_iter=100,\n",
       "                                                 multi_class='multinomial',\n",
       "                                                 n_jobs=None, penalty='l2',\n",
       "                                                 random_state=None,\n",
       "                                                 solver='lbfgs', tol=0.0001,\n",
       "                                                 verbose=0, warm_start=False),\n",
       "                    n_jobs=None)"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "softReg = OneVsRestClassifier(LogisticRegression(multi_class = 'multinomial', solver = 'lbfgs'))\n",
    "softReg.fit(X,Y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(array([ 1.45617458,  1.88473241, -3.34090699]),\n",
       " array([[ 1.31082336, -1.37387397, -0.35588262,  0.38049908, -0.30490278,\n",
       "          0.04214195,  1.4007989 , -1.41258259, -0.49417648],\n",
       "        [-0.58331616,  0.6819172 , -1.71525562, -0.390168  ,  0.33535153,\n",
       "         -1.48612828, -1.118819  ,  1.13089791, -2.20248492],\n",
       "        [-0.7275072 ,  0.69195676,  2.07113825,  0.00966892, -0.03044874,\n",
       "          1.44398634, -0.2819799 ,  0.28168468,  2.69666141]]))"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "softReg.intercept_,softReg.coef_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n",
      " 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n",
      " 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n",
      " 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n",
      " 2 2 2 2 2 2 2 2 1 2 2 2 1 1 2 2 1 1 2 2 2 2 1 1 2 2 1 2 2 1 1 1 2 2 2 2 1\n",
      " 1 1 2 2 2 2 2 2 2 1 1 0 1 2 1 1 1 2 2 0 2 2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n",
      " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n",
      " 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 1 0 1 0 2 0 2 0 1 0 0 1 1 1 0 1 1 1 1 0 0 0\n",
      " 1 0 0 0 1 0 2 0 1 2 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n",
      " 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n",
      " 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n",
      " 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n",
      " 1 1 1 2 1 1 0 1 1 1 1 1 2 1 2 1 1 0 1 1 1 2 1 1 2 2 1 1 1 1 1 1 1 2 1 1 1\n",
      " 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 0 1 1 1 1 2 1 1 1 1\n",
      " 2 1 1 1 0 1 1 0 1 0 1 1 1 1 1 0 1 2 2 0 1 1 1 2 1 1 2 1 1 1 0 1 2 2 1 1 1\n",
      " 1 2 1]\n"
     ]
    }
   ],
   "source": [
    "predicted = softReg.predict(X)\n",
    "print(predicted)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(558,)"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "predicted.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pickle"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "filename = 'softmax_reg_new.sav'\n",
    "pickle.dump(softReg, open(filename, 'wb'))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "207 260 91\n"
     ]
    }
   ],
   "source": [
    "acl = 0\n",
    "abnormal = 0\n",
    "normal = 0\n",
    "for i in predicted:\n",
    "    if i==2:\n",
    "        acl+=1\n",
    "    elif i ==1:\n",
    "        abnormal +=1\n",
    "    else:\n",
    "        normal+=1\n",
    "print(acl,abnormal,normal)        "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.982078853046595"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "548/558"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [],
   "source": [
    "actual = train_data.label.values"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "208 250 100\n"
     ]
    }
   ],
   "source": [
    "acl = 0\n",
    "abnormal = 0\n",
    "normal = 0\n",
    "for i in actual:\n",
    "    if i==2:\n",
    "        acl+=1\n",
    "    elif i ==1:\n",
    "        abnormal +=1\n",
    "    else:\n",
    "        normal+=1\n",
    "print(acl,abnormal,normal)        "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(1, 9)\n",
      "1 1\n"
     ]
    }
   ],
   "source": [
    "predict = X[550]\n",
    "value = Y[550]\n",
    "predict1 = [predict]\n",
    "predict1 = np.array(predict1)\n",
    "print(predict1.shape)\n",
    "predicted = int(softReg.predict(predict1))\n",
    "print(predicted,value)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(1, 9)"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "predict1.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.9767025089605734"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "545/558"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [],
   "source": [
    "frames = [train_data[:100],train_data[200:270],train_data[450:],test_data]\n",
    "combined = pd.concat(frames)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {},
   "outputs": [],
   "source": [
    "Xc = combined[combined.columns[1:10]].values\n",
    "Yc = combined['label'].values"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "test_data = pd.read_csv('softmax_test_new.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {},
   "outputs": [],
   "source": [
    "predicted = softReg.predict(Xc)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "X = test_data[test_data.columns[1:10]].values\n",
    "Y = test_data['label'].values"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [],
   "source": [
    "predicted = softReg.predict(X)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n",
       "       2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n",
       "       2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n",
       "       2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n",
       "       2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 0, 2, 2, 1, 0, 0,\n",
       "       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1,\n",
       "       2, 1, 2, 1, 1, 0, 1, 1, 1, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2,\n",
       "       1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n",
       "       1, 1, 1, 1, 2, 1, 1, 1, 0, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1,\n",
       "       0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 2, 2, 0, 1, 1, 1, 2, 1, 1,\n",
       "       2, 1, 1, 1, 0, 1, 2, 2, 1, 1, 1, 1, 2, 1, 1, 0, 2, 2, 2, 1, 1, 1,\n",
       "       1, 2, 1, 2, 2, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "       0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n",
       "       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n",
       "       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n",
       "       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n",
       "       1], dtype=int64)"
      ]
     },
     "execution_count": 67,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "predicted"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "128 174 95\n"
     ]
    }
   ],
   "source": [
    "acl = 0\n",
    "abnormal = 0\n",
    "normal = 0\n",
    "for i in predicted:\n",
    "    if i==2:\n",
    "        acl+=1\n",
    "    elif i ==1:\n",
    "        abnormal +=1\n",
    "    else:\n",
    "        normal+=1\n",
    "print(acl,abnormal,normal)        "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "124 188 85\n"
     ]
    }
   ],
   "source": [
    "acl1 = 0\n",
    "abnormal1 = 0\n",
    "normal1 = 0\n",
    "for i in Yc:\n",
    "    if i==2:\n",
    "        acl1+=1\n",
    "    elif i ==1:\n",
    "        abnormal1 +=1\n",
    "    else:\n",
    "        normal1+=1\n",
    "print(acl1,abnormal1,normal1)        "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "377"
      ]
     },
     "execution_count": 51,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "124+188+65"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [],
   "source": [
    "fpr = {}\n",
    "tpr = {}\n",
    "thresh = {}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [],
   "source": [
    "for i in range(3):\n",
    "    fpr[i], tpr[i], thresh[i] = roc_curve(Y,predicted,pos_label = i)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "Bad key \"text.kerning_factor\" on line 4 in\n",
      "C:\\Users\\JOEL\\Anaconda3\\envs\\comp\\lib\\site-packages\\matplotlib\\mpl-data\\stylelib\\_classic_test_patch.mplstyle.\n",
      "You probably need to get an updated matplotlibrc file from\n",
      "https://github.com/matplotlib/matplotlib/blob/v3.1.3/matplotlibrc.template\n",
      "or from the matplotlib source distribution\n"
     ]
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "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(fpr[0], tpr[0], linestyle='--',color='orange', label='Class 0 vs Rest')\n",
    "plt.plot(fpr[1], tpr[1], linestyle='--',color='green', label='Class 1 vs Rest')\n",
    "plt.plot(fpr[2], tpr[2], linestyle='--',color='blue', label='ACL vs Rest')\n",
    "plt.title('Multiclass ROC curve')\n",
    "plt.xlabel('False Positive Rate')\n",
    "plt.ylabel('True Positive rate')\n",
    "plt.legend(loc='best')\n",
    "plt.savefig('ACL class ROC',dpi=300);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "metadata": {},
   "outputs": [],
   "source": [
    "cf = confusion_matrix(Yc,predicted)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.8673835125448028"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "(81+217+186)/558"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Collecting seaborn\n",
      "  Downloading seaborn-0.11.1-py3-none-any.whl (285 kB)\n",
      "Requirement already satisfied: numpy>=1.15 in c:\\users\\joel\\anaconda3\\envs\\comp\\lib\\site-packages (from seaborn) (1.18.1)\n",
      "Requirement already satisfied: matplotlib>=2.2 in c:\\users\\joel\\anaconda3\\envs\\comp\\lib\\site-packages (from seaborn) (3.2.0)\n",
      "Requirement already satisfied: scipy>=1.0 in c:\\users\\joel\\anaconda3\\envs\\comp\\lib\\site-packages (from seaborn) (1.4.1)\n",
      "Requirement already satisfied: pandas>=0.23 in c:\\users\\joel\\anaconda3\\envs\\comp\\lib\\site-packages (from seaborn) (1.0.3)\n",
      "Requirement already satisfied: kiwisolver>=1.0.1 in c:\\users\\joel\\anaconda3\\envs\\comp\\lib\\site-packages (from matplotlib>=2.2->seaborn) (1.1.0)\n",
      "Requirement already satisfied: cycler>=0.10 in c:\\users\\joel\\anaconda3\\envs\\comp\\lib\\site-packages (from matplotlib>=2.2->seaborn) (0.10.0)\n",
      "Requirement already satisfied: python-dateutil>=2.1 in c:\\users\\joel\\anaconda3\\envs\\comp\\lib\\site-packages (from matplotlib>=2.2->seaborn) (2.7.5)\n",
      "Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.1 in c:\\users\\joel\\anaconda3\\envs\\comp\\lib\\site-packages (from matplotlib>=2.2->seaborn) (2.4.6)\n",
      "Requirement already satisfied: pytz>=2017.2 in c:\\users\\joel\\anaconda3\\envs\\comp\\lib\\site-packages (from pandas>=0.23->seaborn) (2019.3)\n",
      "Requirement already satisfied: setuptools in c:\\users\\joel\\anaconda3\\envs\\comp\\lib\\site-packages (from kiwisolver>=1.0.1->matplotlib>=2.2->seaborn) (45.2.0.post20200210)\n",
      "Requirement already satisfied: six in c:\\users\\joel\\anaconda3\\envs\\comp\\lib\\site-packages (from cycler>=0.10->matplotlib>=2.2->seaborn) (1.14.0)\n",
      "Installing collected packages: seaborn\n",
      "Successfully installed seaborn-0.11.1\n"
     ]
    }
   ],
   "source": [
    "!pip install seaborn"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "Bad key \"text.kerning_factor\" on line 4 in\n",
      "C:\\Users\\JOEL\\Anaconda3\\envs\\comp\\lib\\site-packages\\matplotlib\\mpl-data\\stylelib\\_classic_test_patch.mplstyle.\n",
      "You probably need to get an updated matplotlibrc file from\n",
      "https://github.com/matplotlib/matplotlib/blob/v3.1.3/matplotlibrc.template\n",
      "or from the matplotlib source distribution\n"
     ]
    }
   ],
   "source": [
    "import seaborn as sns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x204f59bdc88>"
      ]
     },
     "execution_count": 71,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.heatmap(cf,annot = True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 89,
   "metadata": {},
   "outputs": [
    {
     "ename": "NameError",
     "evalue": "name 'd' is not defined",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mNameError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[1;32m<ipython-input-89-f54efd20f051>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[0;32m      1\u001b[0m sns.heatmap(df/np.sum(df), annot=True, \n\u001b[1;32m----> 2\u001b[1;33m             fmt=d, cmap='Blues')\n\u001b[0m",
      "\u001b[1;31mNameError\u001b[0m: name 'd' is not defined"
     ]
    }
   ],
   "source": [
    "sns.heatmap(df/np.sum(df), annot=True, \n",
    "            fmt='.2%', cmap='Blues')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "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>Normal</th>\n",
       "      <th>Abnormal</th>\n",
       "      <th>ACL</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>65</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>9</td>\n",
       "      <td>162</td>\n",
       "      <td>17</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>11</td>\n",
       "      <td>111</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Normal  Abnormal  ACL\n",
       "0      65         0    0\n",
       "1       9       162   17\n",
       "2       2        11  111"
      ]
     },
     "execution_count": 74,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 107,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x204f7251d48>"
      ]
     },
     "execution_count": 107,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#group_names = [‘Normal’,’False Pos’,’False Neg’,’True Pos’]\n",
    "#group_counts = [65,0,0,9,162,17,2,11,111]\n",
    "group_percentages = [1,0,0,0.048,0.862,0.09,0.016,0.089,0.895]\n",
    "\n",
    "#labels = [f”{v2}\\n{v3}” for v2, v3 in\n",
    "          #zip(group_counts,group_percentages)]\n",
    "labels = np.asarray(group_percentages).reshape(3,3)\n",
    "sns.heatmap(df, annot=labels,fmt = \".2%\" ,cmap='Blues')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "ename": "ValueError",
     "evalue": "'cf' is not one of the example datasets.",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mValueError\u001b[0m                                Traceback (most recent call last)",
      "\u001b[1;32m<ipython-input-37-99adbaf43159>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mflights\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0msns\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mload_dataset\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"cf\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m      2\u001b[0m \u001b[0mflights\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mflights\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpivot\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"Normal\"\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m\"Abnormal\"\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m\"ACL\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m      3\u001b[0m \u001b[0max\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0msns\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mheatmap\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mflights\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32m~\\Anaconda3\\envs\\comp\\lib\\site-packages\\seaborn\\utils.py\u001b[0m in \u001b[0;36mload_dataset\u001b[1;34m(name, cache, data_home, **kws)\u001b[0m\n\u001b[0;32m    484\u001b[0m         \u001b[1;32mif\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[0mos\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpath\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mexists\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mcache_path\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    485\u001b[0m             \u001b[1;32mif\u001b[0m \u001b[0mname\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mget_dataset_names\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 486\u001b[1;33m                 \u001b[1;32mraise\u001b[0m \u001b[0mValueError\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34mf\"'{name}' is not one of the example datasets.\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    487\u001b[0m             \u001b[0murlretrieve\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mfull_path\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mcache_path\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    488\u001b[0m         \u001b[0mfull_path\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mcache_path\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;31mValueError\u001b[0m: 'cf' is not one of the example datasets."
     ]
    }
   ],
   "source": [
    "flights = sns.load_dataset(\"\")\n",
    "flights = flights.pivot(\"Normal\", \"Abnormal\", \"ACL\")\n",
    "ax = sns.heatmap(flights)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [],
   "source": [
    "df = df.pivot(\"Normal\",\"Abnormal\",\"ACL\")\n",
    "#sns.heatmap(df)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [],
   "source": [
    "df = pd.DataFrame(cf, columns = ['Normal','Abnormal','ACL'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "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": 4
}