[d6960c]: / modeling.ipynb

Download this file

1052 lines (1051 with data), 151.7 kB

{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## The simple example demonstration"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Radiomics Analysis for Prediction of EGFR Mutations and Ki-67 Proliferation Index in Patients with NSCLC"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\Python3\\lib\\site-packages\\numpy\\_distributor_init.py:32: UserWarning: loaded more than 1 DLL from .libs:\n",
      "D:\\Python3\\lib\\site-packages\\numpy\\.libs\\libopenblas.IPBC74C7KURV7CB2PKT5Z5FNR3SIBV4J.gfortran-win_amd64.dll\n",
      "D:\\Python3\\lib\\site-packages\\numpy\\.libs\\libopenblas.PYQHXLVVQ7VESDPUVUADXEVJOBGHJPAY.gfortran-win_amd64.dll\n",
      "D:\\Python3\\lib\\site-packages\\numpy\\.libs\\libopenblas.TXA6YQSD3GCQQC22GEQ54J2UDCXDXHWN.gfortran-win_amd64.dll\n",
      "  stacklevel=1)\n"
     ]
    }
   ],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "import sklearn\n",
    "from sklearn.preprocessing import LabelEncoder\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "from sklearn import model_selection\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "from sklearn.feature_selection import RFE\n",
    "import warnings\n",
    "warnings.filterwarnings('ignore')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## EGFR Prediction"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 87 entries, 0 to 86\n",
      "Data columns (total 11 columns):\n",
      "EGFR                                                87 non-null int64\n",
      "wavelet-HLL_glcm_MaximumProbability                 87 non-null float64\n",
      "wavelet-LLL_glcm_MaximumProbability                 87 non-null float64\n",
      "original_glcm_SumEntropy                            87 non-null float64\n",
      "log-sigma-1-0-mm-3D_glcm_MaximumProbability         87 non-null float64\n",
      "wavelet-LHL_firstorder_Kurtosis                     87 non-null float64\n",
      "wavelet-LLL_firstorder_Skewness                     87 non-null float64\n",
      "log-sigma-2-0-mm-3D_firstorder_Kurtosis             87 non-null float64\n",
      "original_shape_Sphericity                           87 non-null float64\n",
      "wavelet-LHL_glszm_LargeAreaHighGrayLevelEmphasis    87 non-null float64\n",
      "original_glcm_ClusterTendency                       87 non-null float64\n",
      "dtypes: float64(10), int64(1)\n",
      "memory usage: 7.6 KB\n"
     ]
    }
   ],
   "source": [
    "df = pd.read_csv('./EGFR-radiomics.csv')\n",
    "df.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "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>EGFR</th>\n",
       "      <th>wavelet-HLL_glcm_MaximumProbability</th>\n",
       "      <th>wavelet-LLL_glcm_MaximumProbability</th>\n",
       "      <th>original_glcm_SumEntropy</th>\n",
       "      <th>log-sigma-1-0-mm-3D_glcm_MaximumProbability</th>\n",
       "      <th>wavelet-LHL_firstorder_Kurtosis</th>\n",
       "      <th>wavelet-LLL_firstorder_Skewness</th>\n",
       "      <th>log-sigma-2-0-mm-3D_firstorder_Kurtosis</th>\n",
       "      <th>original_shape_Sphericity</th>\n",
       "      <th>wavelet-LHL_glszm_LargeAreaHighGrayLevelEmphasis</th>\n",
       "      <th>original_glcm_ClusterTendency</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0.007927</td>\n",
       "      <td>0.003456</td>\n",
       "      <td>6.124576</td>\n",
       "      <td>0.019309</td>\n",
       "      <td>5.800779</td>\n",
       "      <td>0.239530</td>\n",
       "      <td>2.254404</td>\n",
       "      <td>0.620527</td>\n",
       "      <td>2465.281536</td>\n",
       "      <td>411.620729</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0</td>\n",
       "      <td>0.012674</td>\n",
       "      <td>0.006008</td>\n",
       "      <td>5.948736</td>\n",
       "      <td>0.031240</td>\n",
       "      <td>2.795991</td>\n",
       "      <td>0.466490</td>\n",
       "      <td>2.382641</td>\n",
       "      <td>0.689155</td>\n",
       "      <td>1824.505051</td>\n",
       "      <td>355.638540</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>0.015902</td>\n",
       "      <td>0.008222</td>\n",
       "      <td>4.920900</td>\n",
       "      <td>0.040681</td>\n",
       "      <td>3.766194</td>\n",
       "      <td>0.403203</td>\n",
       "      <td>3.441538</td>\n",
       "      <td>0.631141</td>\n",
       "      <td>2935.840909</td>\n",
       "      <td>66.400015</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0</td>\n",
       "      <td>0.032583</td>\n",
       "      <td>0.016863</td>\n",
       "      <td>5.066296</td>\n",
       "      <td>0.086125</td>\n",
       "      <td>7.706288</td>\n",
       "      <td>-1.581500</td>\n",
       "      <td>3.865254</td>\n",
       "      <td>0.552905</td>\n",
       "      <td>765983.082600</td>\n",
       "      <td>146.881644</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1</td>\n",
       "      <td>0.015743</td>\n",
       "      <td>0.008266</td>\n",
       "      <td>5.424894</td>\n",
       "      <td>0.021068</td>\n",
       "      <td>3.593316</td>\n",
       "      <td>0.383414</td>\n",
       "      <td>2.323130</td>\n",
       "      <td>0.678834</td>\n",
       "      <td>1008.337079</td>\n",
       "      <td>174.982589</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   EGFR  wavelet-HLL_glcm_MaximumProbability  \\\n",
       "0     1                             0.007927   \n",
       "1     0                             0.012674   \n",
       "2     1                             0.015902   \n",
       "3     0                             0.032583   \n",
       "4     1                             0.015743   \n",
       "\n",
       "   wavelet-LLL_glcm_MaximumProbability  original_glcm_SumEntropy  \\\n",
       "0                             0.003456                  6.124576   \n",
       "1                             0.006008                  5.948736   \n",
       "2                             0.008222                  4.920900   \n",
       "3                             0.016863                  5.066296   \n",
       "4                             0.008266                  5.424894   \n",
       "\n",
       "   log-sigma-1-0-mm-3D_glcm_MaximumProbability  \\\n",
       "0                                     0.019309   \n",
       "1                                     0.031240   \n",
       "2                                     0.040681   \n",
       "3                                     0.086125   \n",
       "4                                     0.021068   \n",
       "\n",
       "   wavelet-LHL_firstorder_Kurtosis  wavelet-LLL_firstorder_Skewness  \\\n",
       "0                         5.800779                         0.239530   \n",
       "1                         2.795991                         0.466490   \n",
       "2                         3.766194                         0.403203   \n",
       "3                         7.706288                        -1.581500   \n",
       "4                         3.593316                         0.383414   \n",
       "\n",
       "   log-sigma-2-0-mm-3D_firstorder_Kurtosis  original_shape_Sphericity  \\\n",
       "0                                 2.254404                   0.620527   \n",
       "1                                 2.382641                   0.689155   \n",
       "2                                 3.441538                   0.631141   \n",
       "3                                 3.865254                   0.552905   \n",
       "4                                 2.323130                   0.678834   \n",
       "\n",
       "   wavelet-LHL_glszm_LargeAreaHighGrayLevelEmphasis  \\\n",
       "0                                       2465.281536   \n",
       "1                                       1824.505051   \n",
       "2                                       2935.840909   \n",
       "3                                     765983.082600   \n",
       "4                                       1008.337079   \n",
       "\n",
       "   original_glcm_ClusterTendency  \n",
       "0                     411.620729  \n",
       "1                     355.638540  \n",
       "2                      66.400015  \n",
       "3                     146.881644  \n",
       "4                     174.982589  "
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Int64Index: 87 entries, 0 to 86\n",
      "Data columns (total 11 columns):\n",
      "EGFR                                                87 non-null int64\n",
      "wavelet-HLL_glcm_MaximumProbability                 87 non-null float64\n",
      "wavelet-LLL_glcm_MaximumProbability                 87 non-null float64\n",
      "original_glcm_SumEntropy                            87 non-null float64\n",
      "log-sigma-1-0-mm-3D_glcm_MaximumProbability         87 non-null float64\n",
      "wavelet-LHL_firstorder_Kurtosis                     87 non-null float64\n",
      "wavelet-LLL_firstorder_Skewness                     87 non-null float64\n",
      "log-sigma-2-0-mm-3D_firstorder_Kurtosis             87 non-null float64\n",
      "original_shape_Sphericity                           87 non-null float64\n",
      "wavelet-LHL_glszm_LargeAreaHighGrayLevelEmphasis    87 non-null float64\n",
      "original_glcm_ClusterTendency                       87 non-null float64\n",
      "dtypes: float64(10), int64(1)\n",
      "memory usage: 8.2 KB\n"
     ]
    }
   ],
   "source": [
    "df_drop = df.dropna(axis=0)\n",
    "df_drop.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "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>EGFR</th>\n",
       "      <th>wavelet-HLL_glcm_MaximumProbability</th>\n",
       "      <th>wavelet-LLL_glcm_MaximumProbability</th>\n",
       "      <th>original_glcm_SumEntropy</th>\n",
       "      <th>log-sigma-1-0-mm-3D_glcm_MaximumProbability</th>\n",
       "      <th>wavelet-LHL_firstorder_Kurtosis</th>\n",
       "      <th>wavelet-LLL_firstorder_Skewness</th>\n",
       "      <th>log-sigma-2-0-mm-3D_firstorder_Kurtosis</th>\n",
       "      <th>original_shape_Sphericity</th>\n",
       "      <th>wavelet-LHL_glszm_LargeAreaHighGrayLevelEmphasis</th>\n",
       "      <th>original_glcm_ClusterTendency</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0.007927</td>\n",
       "      <td>0.003456</td>\n",
       "      <td>6.124576</td>\n",
       "      <td>0.019309</td>\n",
       "      <td>5.800779</td>\n",
       "      <td>0.239530</td>\n",
       "      <td>2.254404</td>\n",
       "      <td>0.620527</td>\n",
       "      <td>2465.281536</td>\n",
       "      <td>411.620729</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0</td>\n",
       "      <td>0.012674</td>\n",
       "      <td>0.006008</td>\n",
       "      <td>5.948736</td>\n",
       "      <td>0.031240</td>\n",
       "      <td>2.795991</td>\n",
       "      <td>0.466490</td>\n",
       "      <td>2.382641</td>\n",
       "      <td>0.689155</td>\n",
       "      <td>1824.505051</td>\n",
       "      <td>355.638540</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>0.015902</td>\n",
       "      <td>0.008222</td>\n",
       "      <td>4.920900</td>\n",
       "      <td>0.040681</td>\n",
       "      <td>3.766194</td>\n",
       "      <td>0.403203</td>\n",
       "      <td>3.441538</td>\n",
       "      <td>0.631141</td>\n",
       "      <td>2935.840909</td>\n",
       "      <td>66.400015</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0</td>\n",
       "      <td>0.032583</td>\n",
       "      <td>0.016863</td>\n",
       "      <td>5.066296</td>\n",
       "      <td>0.086125</td>\n",
       "      <td>7.706288</td>\n",
       "      <td>-1.581500</td>\n",
       "      <td>3.865254</td>\n",
       "      <td>0.552905</td>\n",
       "      <td>765983.082600</td>\n",
       "      <td>146.881644</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1</td>\n",
       "      <td>0.015743</td>\n",
       "      <td>0.008266</td>\n",
       "      <td>5.424894</td>\n",
       "      <td>0.021068</td>\n",
       "      <td>3.593316</td>\n",
       "      <td>0.383414</td>\n",
       "      <td>2.323130</td>\n",
       "      <td>0.678834</td>\n",
       "      <td>1008.337079</td>\n",
       "      <td>174.982589</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   EGFR  wavelet-HLL_glcm_MaximumProbability  \\\n",
       "0     1                             0.007927   \n",
       "1     0                             0.012674   \n",
       "2     1                             0.015902   \n",
       "3     0                             0.032583   \n",
       "4     1                             0.015743   \n",
       "\n",
       "   wavelet-LLL_glcm_MaximumProbability  original_glcm_SumEntropy  \\\n",
       "0                             0.003456                  6.124576   \n",
       "1                             0.006008                  5.948736   \n",
       "2                             0.008222                  4.920900   \n",
       "3                             0.016863                  5.066296   \n",
       "4                             0.008266                  5.424894   \n",
       "\n",
       "   log-sigma-1-0-mm-3D_glcm_MaximumProbability  \\\n",
       "0                                     0.019309   \n",
       "1                                     0.031240   \n",
       "2                                     0.040681   \n",
       "3                                     0.086125   \n",
       "4                                     0.021068   \n",
       "\n",
       "   wavelet-LHL_firstorder_Kurtosis  wavelet-LLL_firstorder_Skewness  \\\n",
       "0                         5.800779                         0.239530   \n",
       "1                         2.795991                         0.466490   \n",
       "2                         3.766194                         0.403203   \n",
       "3                         7.706288                        -1.581500   \n",
       "4                         3.593316                         0.383414   \n",
       "\n",
       "   log-sigma-2-0-mm-3D_firstorder_Kurtosis  original_shape_Sphericity  \\\n",
       "0                                 2.254404                   0.620527   \n",
       "1                                 2.382641                   0.689155   \n",
       "2                                 3.441538                   0.631141   \n",
       "3                                 3.865254                   0.552905   \n",
       "4                                 2.323130                   0.678834   \n",
       "\n",
       "   wavelet-LHL_glszm_LargeAreaHighGrayLevelEmphasis  \\\n",
       "0                                       2465.281536   \n",
       "1                                       1824.505051   \n",
       "2                                       2935.840909   \n",
       "3                                     765983.082600   \n",
       "4                                       1008.337079   \n",
       "\n",
       "   original_glcm_ClusterTendency  \n",
       "0                     411.620729  \n",
       "1                     355.638540  \n",
       "2                      66.400015  \n",
       "3                     146.881644  \n",
       "4                     174.982589  "
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_drop.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{0: 0, 1: 1}"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "class_mapping = {label: idx for idx, label in enumerate(np.unique(df['EGFR']))}\n",
    "class_mapping"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(87,)\n",
      "(87, 10)\n"
     ]
    }
   ],
   "source": [
    "from sklearn.preprocessing import LabelEncoder\n",
    "from sklearn.preprocessing import label_binarize\n",
    "\n",
    "df['EGFR'] = df['EGFR'].map(class_mapping)\n",
    "y = LabelEncoder().fit_transform(df['EGFR'].values)\n",
    "X = df.iloc[:,1:11].values\n",
    "print(y.shape)\n",
    "print(X.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(87, 10)\n"
     ]
    }
   ],
   "source": [
    "from sklearn.preprocessing import StandardScaler\n",
    "\n",
    "std = StandardScaler()\n",
    "X_std = std.fit_transform(X)\n",
    "print(X_std.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "def Find_Optimal_Cutoff(TPR, FPR, threshold):\n",
    "    y = TPR - FPR\n",
    "    Youden_index = np.argmax(y)  # Only the first occurrence is returned.\n",
    "    optimal_threshold = threshold[Youden_index]\n",
    "    point = [FPR[Youden_index], TPR[Youden_index]]\n",
    "    return optimal_threshold, point"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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1dUxd+5cUlNTeeONN1ixYgVFRUW8/PLLLFq0qNXzvfXWW3zta19rVzyhtPv9739/1CIyKSkpfOELX2DevHkhvDPHFsnstRQYZWaZZpYCzAZeaNbmBWBOYBb8DOCAc6719RXDKCnJP/NdE91FpN6XvvQl/v3vfwP+pHfZZZc17HviiSfIy8sjOzubb37zmw293vPPP59p06YxYcKEhqVLN23axLhx4/jGN77BhAkTOP300xs+LLSmcS33N954g7S0NK6++mrA36O/5557ePTRRykvL+fNN9+kc+fOTZaYzc7O5pRTTjnquOGop96W87XFkiVLGDlyJCeddBIpKSnMnj2b+fPnH9WutraWiooKamtrKS8vZ/DgwZhZw3yompoaampq2r2kd6jxtNautLSUf//7302KztQ7//zzefLJJ9sVY72IXTR2ztWa2Y3AK0Ay8KhzbpWZXR/Y/wCwADgLKAHKgasjFZ+IRKecoxbCDI9QV5eePXs2t912G+eccw4ffvgh11xzDe+++y5r1qxh3rx5vP/++3Tu3Jlvf/vbPPnkk8yZM4dHH32UPn36UFFRQW5uLhdddBHgrx3x1FNP8fDDD3PJJZfw7LPPcsUVV7R47lBquffo0YNhw4ZRUlJCcXHxUfuDqa6uZsOGDQwfPrxh2/HUUw/1fACnnHIKhw4dOmr73XffzWmnndZk27Zt2xg69NNB24yMDBYvXtykzZAhQ/jRj37EsGHD6NKlC6effjqnn3464H/fpk2bRklJCTfccAPTp08PGtP06dOpqqri8OHD7Nu3j+zsbAB+85vfcMYZZ7QpnmO1+973vsedd94Z9D2YOHEiS5cuDRpjW0V0JphzbgH+xN142wONnjvghkjGJCLSmsmTJ7Np0yaeeuopzjrrrIbtr7/+OsuWLSM311/rvaKiggEDBgBw77338txzzwGwdetW1q9fz8CBA8nMzGxIHNOmTWPTpk1Bz9nWWu4tbW/J3r176dWrV5NtHV1P/d133w25bbCaJM3Pt3//fubPn8/GjRvp1asXX/nKV3jiiSe44oorSE5OpqioiE8++YQLLriA4uLio+YFAA0J96233uKxxx7jscceO+54Wmv34osvMmDAAKZNm9ZQRKex5ORkUlJSQipheyya3i0iUS1M9Zra5dxzz+VHP/oRb731FmVlZYD/D/hVV13Fr371qyZt33rrLV577TUKCgpIT0/n1FNPpbKyEoDU1NSGdsnJyS0Ov7dWy/3ZZ59t0vbgwYNs3bqVESNGsHv3bp555plj/jxdunRpiAk4rnrqmZmZZGRkhHQ+aFtPPZR66q+99hqZmZkNFeEuvPBCFi5c2GTko1evXpx66qm8/PLLQZN6qEKt795Su/fff58XXniBBQsWUFlZycGDB7niiit44oknGtpWVVWFp65IsHqssfQVznrqIhIdoqGeunOf1lTfunVrQ33z+jroq1atciNHjnS7du1yzjlXVlbmNm3a5J5//nl3zjnnOOecW7NmjUtNTXVvvvmm27hxo5swYULDse+66y536623tnpe55rWcvf5fG7atGnur3/9q3POudraWnfttde6H/zgB845f63wvLw899BDDzV8/5IlS9xbb7111DkyMjJcRUWFc671eurOOTdt2jT32muvNfyco0aNciUlJW06X1vU1NS4zMxMt2HDBldVVeUmT57siouLm7RZtGiRGz9+vDty5Ijz+Xxuzpw57t5773W7d+92+/fvd875a92ffPLJ7l//+leHxxNqu/r/P43t3bvXjR07tsXzq566iEgYZWRk8N3vfrfJtvHjx3P77bdz+umnM3nyZL74xS+yY8cOzjzzTGpra5k8eTI///nPmTFjRrvO3biWu5nx3HPP8fTTTzNq1ChGjx5NWload9xxB0DD/ldffZURI0YwYcIEfvGLXwTtVZ5++um89957QOv11AH+9re/cfvtt5Odnc3nP/95br31VkaMGNGm87VFp06duO+++zjjjDMYN24cl1xyCRMmTADgrLPOYvv27UyfPp2LL76YqVOnMmnSJHw+H9dddx07duzgc5/7HJMnTyY3N5cvfvGLLd6COH369IZ6642/XnnllZDjaRzTsdq15M0332xyaac9VE9dRKKO6ql3vOXLl/Pb3/6Wxx9/3OtQEt6FF17Ir371K8aMGRN0v+qpi4hIq6ZMmcLnPve5JovPSORVV1dz/vnnt5jQ20oT5UREEtQ111zjdQgJLyUlhTlz5oTteOqpi4iIxAkldRERkTihpC4iUSnWJ/GKhENbfw+U1EUk6qSlpVFWVqbELgnNOUdZWVmbFqXRRDkRiToZGRmUlpYSztLKIrEoLS2NjIyMkNsrqYtI1OncuTOZmZlehyESczT8LiIiEieU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\n",
      "text/plain": [
       "<Figure size 576x576 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.metrics import roc_curve\n",
    "from sklearn.metrics import auc\n",
    "from sklearn import model_selection\n",
    "from scipy import interp\n",
    "import matplotlib\n",
    "clf = LogisticRegression(penalty='l2',C=1, multi_class='auto',solver='liblinear',random_state=1)\n",
    "cv = model_selection.ShuffleSplit(n_splits = 5, test_size = 0.25, random_state = 0)\n",
    "\n",
    "tprs = []\n",
    "aucs = []\n",
    "mean_fpr = np.linspace(0, 1, 100)\n",
    "i = 0\n",
    "plt.xticks(np.arange(0, 1.1, step=0.1))\n",
    "plt.yticks(np.arange(0, 1.1, step=0.1))\n",
    "matplotlib.rcParams['figure.figsize'] = (8.0, 8.0)\n",
    "\n",
    "for train, test in cv.split(X_std, y):\n",
    "    probas_ = clf.fit(X_std[train], y[train]).predict_proba(X_std[test])\n",
    "    # Compute ROC curve and area the curve\n",
    "    fpr, tpr, thresholds = roc_curve(y[test], probas_[:, 1])\n",
    "    tprs.append(interp(mean_fpr, fpr, tpr))\n",
    "    tprs[-1][0] = 0.0\n",
    "    roc_auc = auc(fpr, tpr)\n",
    "    optimal_th, optimal_point = Find_Optimal_Cutoff(TPR=tpr, FPR=fpr, threshold=thresholds) ### can be annotated\n",
    "    aucs.append(roc_auc)\n",
    "    plt.plot(fpr, tpr, lw=1, alpha=0.8,label='ROC fold %d (AUC = %0.2f)' % (i, roc_auc))\n",
    "    i += 1\n",
    "\n",
    "plt.plot([0, 1], [0, 1], linestyle='--', lw=1, color='gray', alpha=.6)\n",
    "mean_tpr = np.mean(tprs, axis=0)\n",
    "mean_tpr[-1] = 1.0\n",
    "mean_auc = auc(mean_fpr, mean_tpr)\n",
    "#optimal_th, optimal_point = Find_Optimal_Cutoff(TPR=mean_tpr, mean_fpr, threshold=thresholds)\n",
    "std_auc = np.std(aucs)\n",
    "plt.plot(mean_fpr, mean_tpr, color='b',label=r'Mean ROC (AUC = %0.2f $\\pm$ %0.2f)' % (mean_auc, std_auc),lw=2, alpha=.8)\n",
    "std_tpr = np.std(tprs, axis=0)\n",
    "tprs_upper = np.minimum(mean_tpr + std_tpr, 1)\n",
    "tprs_lower = np.maximum(mean_tpr - std_tpr, 0)\n",
    "#plt.fill_between(mean_fpr, tprs_lower, tprs_upper, color='grey', alpha=.2,label=r'$\\pm$ 1 std. dev.')\n",
    "#plt.xlim([-0, 1])\n",
    "#plt.ylim([-0, 1])\n",
    "plt.xlabel('1-Specificity', fontsize = 'x-large')\n",
    "plt.ylabel('Sensitivity', fontsize = 'x-large')\n",
    "#plt.title('Receiver operating characteristic example')\n",
    "plt.legend(loc=\"lower right\" ,\n",
    "           fontsize = 'medium'\n",
    "          )\n",
    "#plt.plot(optimal_point[0], optimal_point[1], marker='o', color='r')\n",
    "#plt.text(optimal_point[0], optimal_point[1], f'Threshold:{optimal_th:.2f}')\n",
    "\n",
    "plt.savefig('EGFR-ROC1.jpg',dpi=1500)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(45, 10)\n",
      "(45,)\n"
     ]
    }
   ],
   "source": [
    "df_test = pd.read_csv('./EGFR-test.csv')\n",
    "df_test_drop = df_test.dropna(axis=0)\n",
    "class_mapping = {label: idx for idx, label in enumerate(np.unique(df_test_drop['EGFR']))}\n",
    "df_test_drop['EGFR'] = df_test_drop['EGFR'].map(class_mapping)\n",
    "y_test = LabelEncoder().fit_transform(df_test_drop['EGFR'].values)\n",
    "X_test = df_test_drop.iloc[:,1:11].values\n",
    "\n",
    "X_test_std = std.fit_transform(X_test)\n",
    "print(X_test_std.shape)\n",
    "print(y_test.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x576 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from matplotlib import style\n",
    "tprs = []\n",
    "aucs = []\n",
    "i = 0\n",
    "lw = 2\n",
    "plt.xticks(np.arange(0, 1.1, step=0.1))\n",
    "plt.yticks(np.arange(0, 1.1, step=0.1))\n",
    "\n",
    "probas_ = clf.predict_proba(X_test_std)\n",
    "fpr, tpr, thresholds = roc_curve(y_test, probas_[:, 1])\n",
    "fpr=fpr\n",
    "tpr=tpr\n",
    "roc_auc = auc(fpr, tpr)\n",
    "optimal_th, optimal_point = Find_Optimal_Cutoff(TPR=tpr, FPR=fpr, threshold=thresholds)\n",
    "aucs.append(roc_auc)\n",
    "#plt.plot(fpr, tpr, lw=1, alpha=0.3,label='ROC fold %d (AUC = %0.2f)' % (i, roc_auc))\n",
    "plt.plot(fpr, tpr, color='b', alpha=.8, lw=lw, label='ROC (AUC = %0.2f)' % roc_auc) \n",
    "plt.plot([0, 1], [0, 1], color='gray', lw=1, linestyle='--',alpha=.6)\n",
    "#plt.fill_between(mean_fpr, tprs_lower, tprs_upper, color='grey', alpha=.2,label=r'$\\pm$ 1 std. dev.')\n",
    "#plt.xlim([-0, 1])\n",
    "#plt.ylim([-0, 1])\n",
    "#plt.plot(optimal_point[0], optimal_point[1], marker='o', color='r')\n",
    "#plt.text(optimal_point[0], optimal_point[1], f'{optimal_th:.2f}', verticalalignment=\"bottom\", horizontalalignment=\"center\")\n",
    "#print (optimal_point[0], optimal_point[1])\n",
    "\n",
    "plt.xlabel('1-Specificity', fontsize = 'x-large')\n",
    "plt.ylabel('Sensitivity', fontsize = 'x-large')\n",
    "plt.legend(loc=\"lower right\", fontsize = 'medium')\n",
    "plt.savefig('EGFR-ROC2.jpg',dpi=1500)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[-0.26637586, -0.36415474,  0.88922437,  0.35225551, -0.63638105,\n",
       "         0.3393241 ,  0.87795737, -0.30623909, -0.59557871, -0.26788923]])"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "clf.coef_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Ki-67 Prediction"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 87 entries, 0 to 86\n",
      "Data columns (total 29 columns):\n",
      "Y                                                             87 non-null int64\n",
      "wavelet-HLL_gldm_LargeDependenceHighGrayLevelEmphasis         87 non-null float64\n",
      "log-sigma-1-0-mm-3D_glszm_SmallAreaLowGrayLevelEmphasis       87 non-null float64\n",
      "log-sigma-5-0-mm-3D_glcm_Idm                                  87 non-null float64\n",
      "log-sigma-5-0-mm-3D_glcm_InverseVariance                      87 non-null float64\n",
      "original_firstorder_Median                                    87 non-null float64\n",
      "log-sigma-2-0-mm-3D_glszm_SmallAreaLowGrayLevelEmphasis       87 non-null float64\n",
      "wavelet-LHL_glszm_LargeAreaLowGrayLevelEmphasis               87 non-null float64\n",
      "wavelet-LHL_firstorder_Maximum                                87 non-null float64\n",
      "wavelet-HLL_glszm_GrayLevelNonUniformityNormalized            87 non-null float64\n",
      "log-sigma-3-0-mm-3D_firstorder_Median                         87 non-null float64\n",
      "log-sigma-3-0-mm-3D_firstorder_90Percentile                   87 non-null float64\n",
      "log-sigma-4-0-mm-3D_glszm_SmallAreaEmphasis                   87 non-null float64\n",
      "wavelet-LHL_glszm_GrayLevelNonUniformityNormalized            87 non-null float64\n",
      "original_shape_SurfaceVolumeRatio                             87 non-null float64\n",
      "wavelet-LHH_firstorder_Kurtosis                               87 non-null float64\n",
      "wavelet-HHL_glrlm_LongRunHighGrayLevelEmphasis                87 non-null float64\n",
      "log-sigma-1-0-mm-3D_glcm_Correlation                          87 non-null float64\n",
      "wavelet-LHH_glcm_Correlation                                  87 non-null float64\n",
      "original_gldm_LargeDependenceLowGrayLevelEmphasis             87 non-null float64\n",
      "wavelet-LLL_gldm_LargeDependenceLowGrayLevelEmphasis          87 non-null float64\n",
      "wavelet-HLL_glszm_LargeAreaLowGrayLevelEmphasis               87 non-null float64\n",
      "wavelet-HLL_firstorder_Maximum                                87 non-null float64\n",
      "log-sigma-1-0-mm-3D_glrlm_GrayLevelNonUniformityNormalized    87 non-null float64\n",
      "wavelet-HHH_glcm_Correlation                                  87 non-null float64\n",
      "original_firstorder_Skewness                                  87 non-null float64\n",
      "wavelet-LHH_glcm_Idn                                          87 non-null float64\n",
      "wavelet-LHH_gldm_SmallDependenceLowGrayLevelEmphasis          87 non-null float64\n",
      "wavelet-HLH_glcm_Idn                                          87 non-null float64\n",
      "dtypes: float64(28), int64(1)\n",
      "memory usage: 19.8 KB\n"
     ]
    }
   ],
   "source": [
    "df1 = pd.read_csv('./Ki67-radiomics.csv', encoding = 'gb2312')\n",
    "df1.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{0: 0, 1: 1}"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "class_mapping1 = {label: idx for idx, label in enumerate(np.unique(df1['Y']))}\n",
    "class_mapping1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(87,)\n",
      "(87, 28)\n",
      "(87, 28)\n"
     ]
    }
   ],
   "source": [
    "df1_drop = df1.dropna(axis=0)\n",
    "df1_drop['Y'] = df1_drop['Y'].map(class_mapping1)\n",
    "y1 = LabelEncoder().fit_transform(df1_drop['Y'].values)\n",
    "X1 = df1_drop.iloc[:,1:29].values\n",
    "print(y1.shape)\n",
    "print(X1.shape)\n",
    "X1_std = std.fit_transform(X1)\n",
    "print(X1_std.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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6aefPm4c5513Xss6D609/vjj3HHHHcc87+7ceeedjBgxgkmTJrF06dKI+3V3PvShD3Ho0KGW55577jnMjHfffbfluddff53LLrvsqNd++tOf5g9/+AMQntR49913M3LkSCZMmMD06dN58cXTnw71ne98hxEjRjB69GheeumliG3KysqYOXMmBQUFFBYWsnDhwpO+/oILLuDAgQOnHV+iiut16u4+191HuXu+u/9n03Nz3H1O0/1b3b23uxc03QrjGR+Eh99BST1ay5cvx90pKioiU8MbkkK6du1KWVkZK1eupE+fPjzyyCMAVFdXc/nll3P33Xezbt06li9fzrx58/if//kfAFauXMkdd9zBb3/7W9asWcPKlSs5++yzj9n/smXLqK+vp6ysjE984hMxi/vFF19k/fr1rF+/nkcffZTPf/7zEdvNnTuXyZMnH1Ul8cknn2TWrFk89dRTUR/vm9/8Jjt27GDlypWsXLmSP/3pTxw+fPi0fofVq1fz1FNPsWrVKv7yl7/whS98gcbm9btb+epXv8o999xDWVkZ9913H1/96ldP+vobbrih5d8qFWlFuTY0/B6dUCiEuzNixAimTZtGhtbUlRRWXFzMtm3bAPjd737HBz7wAT7ykY8A4XkkDz/8MN/97ncB+K//+i/+/d//nTFjxgDQqVMnvvCFLxy1v927d/OpT32KsrIyCgoKeO+993j11VeZMmUKEydO5Oabb6a2tvaYOH75y18yatQoZs+ezdtvvx0x1ueff54bb7wRM2PmzJm8//777Nix45h2TzzxBFdccUXL48rKSt5++21+8YtfRJ3Uq6qq+NnPfsaPf/zjlrUozjzzTK699tqoXn88zz//PNdddx3Z2dnk5eUxYsSIo3rhzcysZaTh4MGDDB48+KSvv/zyy3nyySdPK75Epv5oGyH11E+qoaGBRYsWkZuby9ChQ0/+ApHT9NEfvxXzff4pyomwjY2NvPrqq9xyyy1AeOh92rRpR7XJz8+nsrKSQ4cOsXLlSv7t3/7thPscMGAAP//5z3nggQf485//TE1NDeeddx6vvvoqo0aN4sYbb+QnP/kJ//zP/9zymh07dnDPPfewZMkSzjjjDD74wQ8yZcqUY/a9bdu2o/4uc3Nz2bZtG4MGDTqq3dtvv81Pf/rTlsd//OMfueiiixg1ahR9+vRh6dKlTJ06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4Q957LHHqKqq4rXXXqNz585HLTFbUFDQUna0tVjUU2/P8dpj4cKFjBgxgrPPPpusrCyuu+46nn/++aParFmzhpkzZ5KTk0OnTp2YPXs2zz33HIMGDWpZQrdHjx6MHTs2YtnWjogpmjavvvoq+fn5nHXWWS3PXXnllTzxxBOnHSPE8Tp1d28wszuAl4BM4DF3X2VmtzdtnwPMBS4ByoEq4DPxik9EElPhMQthxka0q0tfd9113HfffVx22WW888473Hzzzbz55pusWbOGp59+mrfffpvOnTvzhS98gSeeeIIbb7yRxx57jD59+lBdXU1RURFXX301EK4d8eSTT/Kzn/2Ma6+9lmeffZZPfepTxz12NLXce/bsybBhwygvL2flypXHbI+krq6ODRs2MHz48JbnTqWeerTHAzjnnHM4fPjwMc8/8MADXHDBBUc9t23bNoYOHdryODc3lwULFhzVZsKECfz7v/87+/bto2vXrsydO7elCluzTZs2sWzZMmbMmBExphkzZlBbW0tlZSX79++noKAAgO9973tceOGF7Y4pmjZPPfXUUV8Mm3+XRYsWRYyxveI6E8zd5xJO3K2fm9PqvgNfjGdMIiInMmnSJDZt2sSTTz7JJZdc0vL8q6++ypIlSygqCtd6r66uZsCAAQA89NBDPPfcc0D4HO/69esZOHAgeXl5LYlj2rRpbNq0KeIx21vL/XjPH8/evXvp1avXUc91dD31N998M+q2HkU99bFjx/K1r32ND3/4w3Tv3p3JkycfNbm5srKSq6++mgcffLCljnpbzQn39ddf5/HHH+fxxx8/rZhO1qauro4XXniB73znO0e1yczMJCsrK6oStiej6d0iktBiVK/ptFx++eV8+ctf5vXXX2ffvn1A+AP8pptuOuYD+vXXX+eVV16htLSUnJwczjvvPGpqagBaanxD+IP8eMPvJ6rl/uyzzx7V9tChQ2zdupX8/Hx2797NH/7wh5P+Pl27dm2JCTileup5eXnk5uZGdTxoX0892nrqt9xyS8soxje+8Q1yc3MBqK+v5+qrr+aTn/wkH/vYx6KK72SiielkbV588UWmTp3KmWeeecz+a2trY1NXJNKJ9mS6xXKinIgkhkSaKOfuvnXr1pZJZc110FetWuUjRoxoqem9b98+37Rpk//xj3/0yy67zN3d16xZ49nZ2f7aa68d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\n",
      "text/plain": [
       "<Figure size 576x576 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "clf1 = LogisticRegression(penalty='l2',C=1, multi_class='auto',solver='liblinear',random_state=1)\n",
    "\n",
    "cv = model_selection.ShuffleSplit(n_splits = 5, test_size = 0.25, random_state = 0)\n",
    "#classifier = clf1\n",
    "#cv = model_selection.StratifiedKFold(n_splits=5)\n",
    "tprs = []\n",
    "aucs = []\n",
    "mean_fpr = np.linspace(0, 1, 100)\n",
    "i = 0\n",
    "plt.xticks(np.arange(0, 1.1, step=0.1))\n",
    "plt.yticks(np.arange(0, 1.1, step=0.1))\n",
    "\n",
    "for train, test in cv.split(X1_std, y1):\n",
    "    probas_ = clf1.fit(X1_std[train], y1[train]).predict_proba(X1_std[test])\n",
    "    # Compute ROC curve and area the curve\n",
    "    fpr, tpr, thresholds = roc_curve(y1[test], probas_[:, 1])\n",
    "    tprs.append(interp(mean_fpr, fpr, tpr))\n",
    "    tprs[-1][0] = 0.0\n",
    "    roc_auc = auc(fpr, tpr)\n",
    "    optimal_th, optimal_point = Find_Optimal_Cutoff(TPR=tpr, FPR=fpr, threshold=thresholds) ###\n",
    "    aucs.append(roc_auc)\n",
    "    plt.plot(fpr, tpr, lw=1, alpha=0.8,label='ROC fold %d (AUC = %0.2f)' % (i, roc_auc))\n",
    "    i += 1\n",
    "matplotlib.rcParams['figure.figsize'] = (8.0, 8.0)\n",
    "plt.plot([0, 1], [0, 1], linestyle='--', lw=1, color='gray', alpha=.6)\n",
    "mean_tpr = np.mean(tprs, axis=0)\n",
    "mean_tpr[-1] = 1.0\n",
    "mean_auc = auc(mean_fpr, mean_tpr)\n",
    "#optimal_th, optimal_point = Find_Optimal_Cutoff(TPR=mean_tpr, mean_fpr, threshold=thresholds)\n",
    "std_auc = np.std(aucs)\n",
    "plt.plot(mean_fpr, mean_tpr, color='b',label=r'Mean ROC (AUC = %0.2f $\\pm$ %0.2f)' % (mean_auc, std_auc),lw=2, alpha=.8)\n",
    "std_tpr = np.std(tprs, axis=0)\n",
    "tprs_upper = np.minimum(mean_tpr + std_tpr, 1)\n",
    "tprs_lower = np.maximum(mean_tpr - std_tpr, 0)\n",
    "#plt.fill_between(mean_fpr, tprs_lower, tprs_upper, color='grey', alpha=.2,label=r'$\\pm$ 1 std. dev.')\n",
    "#plt.xlim([-0, 1])\n",
    "#plt.ylim([-0, 1])\n",
    "plt.xlabel('1-Specificity', fontsize = 'x-large')\n",
    "plt.ylabel('Sensitivity', fontsize = 'x-large')\n",
    "#plt.title('Receiver operating characteristic example')\n",
    "plt.legend(loc=\"lower right\" ,\n",
    "           fontsize = 'medium'\n",
    "          )\n",
    "#plt.plot(optimal_point[0], optimal_point[1], marker='o', color='r')\n",
    "#plt.text(optimal_point[0], optimal_point[1], f'Threshold:{optimal_th:.2f}')\n",
    "\n",
    "plt.savefig('Ki-67-ROC1.jpg',dpi=1500)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(45, 28)\n",
      "(45,)\n"
     ]
    }
   ],
   "source": [
    "df1_test = pd.read_csv('./Ki67-test.csv')\n",
    "df1_test_drop = df1_test.dropna(axis=0)\n",
    "class_mapping1 = {label: idx for idx, label in enumerate(np.unique(df1_test_drop['Ki-67']))}\n",
    "df1_test_drop['Ki-67'] = df1_test_drop['Ki-67'].map(class_mapping1)\n",
    "y1_test = LabelEncoder().fit_transform(df1_test_drop['Ki-67'].values)\n",
    "X1_test = df1_test_drop.iloc[:,1:29].values\n",
    "\n",
    "X1_test_std = std.fit_transform(X1_test)\n",
    "print(X1_test_std.shape)\n",
    "print(y1_test.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x576 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from matplotlib import style\n",
    "tprs = []\n",
    "aucs = []\n",
    "i = 0\n",
    "lw = 2\n",
    "plt.xticks(np.arange(0, 1.1, step=0.1))\n",
    "plt.yticks(np.arange(0, 1.1, step=0.1))\n",
    "\n",
    "probas_ = clf1.predict_proba(X1_test_std)\n",
    "fpr, tpr, thresholds = roc_curve(y1_test, probas_[:, 1])\n",
    "fpr=fpr\n",
    "tpr=tpr\n",
    "roc_auc = auc(fpr, tpr)\n",
    "optimal_th, optimal_point = Find_Optimal_Cutoff(TPR=tpr, FPR=fpr, threshold=thresholds)\n",
    "aucs.append(roc_auc)\n",
    "#plt.plot(fpr, tpr, lw=1, alpha=0.3,label='ROC fold %d (AUC = %0.2f)' % (i, roc_auc))\n",
    "plt.plot(fpr, tpr, color='b', alpha=.8, lw=lw, label='ROC (AUC = %0.2f)' % roc_auc) \n",
    "plt.plot([0, 1], [0, 1], color='gray', lw=1, linestyle='--',alpha=.6)\n",
    "#plt.fill_between(mean_fpr, tprs_lower, tprs_upper, color='grey', alpha=.2,label=r'$\\pm$ 1 std. dev.')\n",
    "#plt.xlim([-0, 1])\n",
    "#plt.ylim([-0, 1])\n",
    "#plt.plot(optimal_point[0], optimal_point[1], marker='o', color='r')\n",
    "#plt.text(optimal_point[0], optimal_point[1], f'{optimal_th:.2f}', verticalalignment=\"bottom\", horizontalalignment=\"center\")\n",
    "#print (optimal_point[0], optimal_point[1])\n",
    "plt.xlabel('1-Specificity', fontsize = 'x-large')\n",
    "plt.ylabel('Sensitivity', fontsize = 'x-large')\n",
    "plt.legend(loc=\"lower right\" ,\n",
    "           fontsize = 'medium'\n",
    "          )\n",
    "plt.savefig('Ki-67-ROC2.jpg',dpi=1500)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[-0.33933662, -0.24501119,  0.06149887,  0.66555733,  0.5809558 ,\n",
       "         0.41924958,  0.23932351,  0.77765524, -0.08881509, -0.63052453,\n",
       "        -0.57778378,  0.14979279, -0.19062698,  0.08261748,  0.48340228,\n",
       "         0.68332893,  0.6523309 ,  0.16729185, -0.24171584, -0.02439305,\n",
       "         0.29861927, -0.29627875,  0.41290256,  0.78760983, -0.56817862,\n",
       "         0.38850808, -0.18475777, -0.08823505]])"
      ]
     },
     "execution_count": 48,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "clf1.coef_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 36",
   "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.6.6rc1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}