{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "6c09632a",
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "import threading\n",
    "import joblib\n",
    "import random\n",
    "from sklearn import svm\n",
    "from sklearn import metrics\n",
    "from sklearn.utils import shuffle\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "from sklearn.ensemble import RandomForestClassifier\n",
    "from sklearn.model_selection import cross_val_score\n",
    "from sklearn.model_selection import StratifiedKFold\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "import seaborn as sn\n",
    "import matplotlib.pyplot as plt\n",
    "import pickle"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "073e1d25",
   "metadata": {},
   "source": [
    "# load_data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "100d6595",
   "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>000057-10-3</th>\n",
       "      <th>000057-11-4</th>\n",
       "      <th>000060-12-8</th>\n",
       "      <th>000060-33-3</th>\n",
       "      <th>000076-22-2</th>\n",
       "      <th>000076-49-3</th>\n",
       "      <th>000077-42-9</th>\n",
       "      <th>000077-53-2</th>\n",
       "      <th>000078-70-6</th>\n",
       "      <th>000079-77-6</th>\n",
       "      <th>...</th>\n",
       "      <th>698365-10-5</th>\n",
       "      <th>729602-94-2</th>\n",
       "      <th>765307-45-7</th>\n",
       "      <th>823810-22-6</th>\n",
       "      <th>872858-42-9</th>\n",
       "      <th>889360-49-0</th>\n",
       "      <th>913176-41-7</th>\n",
       "      <th>Bench_code</th>\n",
       "      <th>activity</th>\n",
       "      <th>cell_toxicity</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.412000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>zy-pl-164</td>\n",
       "      <td>-0.130</td>\n",
       "      <td>-0.106958</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.002002</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>zy-pl-179</td>\n",
       "      <td>-0.214</td>\n",
       "      <td>-0.028031</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>sx-62</td>\n",
       "      <td>0.625</td>\n",
       "      <td>0.556390</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>sx-63</td>\n",
       "      <td>0.008</td>\n",
       "      <td>0.403074</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.004000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>sx-98</td>\n",
       "      <td>-0.144</td>\n",
       "      <td>0.024196</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",
       "      <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",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>269</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.002014</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.914401</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>sx-96</td>\n",
       "      <td>0.050</td>\n",
       "      <td>0.061886</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>270</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>sx-130</td>\n",
       "      <td>0.764</td>\n",
       "      <td>0.821218</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>271</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.002018</td>\n",
       "      <td>zy-pl-2</td>\n",
       "      <td>0.346</td>\n",
       "      <td>0.054008</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>272</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.006006</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>sx-25</td>\n",
       "      <td>0.403</td>\n",
       "      <td>0.585246</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>273</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.005025</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>sx-27</td>\n",
       "      <td>0.623</td>\n",
       "      <td>0.533508</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>274 rows × 1187 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "     000057-10-3  000057-11-4  000060-12-8  000060-33-3  000076-22-2  \\\n",
       "0            0.0          0.0          0.0          0.0     0.000000   \n",
       "1            0.0          0.0          0.0          0.0     0.000000   \n",
       "2            0.0          0.0          0.0          0.0     0.000000   \n",
       "3            0.0          0.0          0.0          0.0     0.000000   \n",
       "4            0.0          0.0          0.0          0.0     0.000000   \n",
       "..           ...          ...          ...          ...          ...   \n",
       "269          0.0          0.0          0.0          0.0     0.002014   \n",
       "270          0.0          0.0          0.0          0.0     0.000000   \n",
       "271          0.0          0.0          0.0          0.0     0.000000   \n",
       "272          0.0          0.0          0.0          0.0     0.000000   \n",
       "273          0.0          0.0          0.0          0.0     0.000000   \n",
       "\n",
       "     000076-49-3  000077-42-9  000077-53-2  000078-70-6  000079-77-6  ...  \\\n",
       "0            0.0          0.0          0.0     0.412000          0.0  ...   \n",
       "1            0.0          0.0          0.0     0.002002          0.0  ...   \n",
       "2            0.0          0.0          0.0     0.000000          0.0  ...   \n",
       "3            0.0          0.0          0.0     0.000000          0.0  ...   \n",
       "4            0.0          0.0          0.0     0.004000          0.0  ...   \n",
       "..           ...          ...          ...          ...          ...  ...   \n",
       "269          0.0          0.0          0.0     0.914401          0.0  ...   \n",
       "270          0.0          0.0          0.0     0.000000          0.0  ...   \n",
       "271          0.0          0.0          0.0     0.000000          0.0  ...   \n",
       "272          0.0          0.0          0.0     0.006006          0.0  ...   \n",
       "273          0.0          0.0          0.0     0.005025          0.0  ...   \n",
       "\n",
       "     698365-10-5  729602-94-2  765307-45-7  823810-22-6  872858-42-9  \\\n",
       "0            0.0          0.0          0.0          0.0          0.0   \n",
       "1            0.0          0.0          0.0          0.0          0.0   \n",
       "2            0.0          0.0          0.0          0.0          0.0   \n",
       "3            0.0          0.0          0.0          0.0          0.0   \n",
       "4            0.0          0.0          0.0          0.0          0.0   \n",
       "..           ...          ...          ...          ...          ...   \n",
       "269          0.0          0.0          0.0          0.0          0.0   \n",
       "270          0.0          0.0          0.0          0.0          0.0   \n",
       "271          0.0          0.0          0.0          0.0          0.0   \n",
       "272          0.0          0.0          0.0          0.0          0.0   \n",
       "273          0.0          0.0          0.0          0.0          0.0   \n",
       "\n",
       "     889360-49-0  913176-41-7  Bench_code  activity  cell_toxicity  \n",
       "0            0.0     0.000000   zy-pl-164    -0.130      -0.106958  \n",
       "1            0.0     0.000000   zy-pl-179    -0.214      -0.028031  \n",
       "2            0.0     0.000000       sx-62     0.625       0.556390  \n",
       "3            0.0     0.000000       sx-63     0.008       0.403074  \n",
       "4            0.0     0.000000       sx-98    -0.144       0.024196  \n",
       "..           ...          ...         ...       ...            ...  \n",
       "269          0.0     0.000000       sx-96     0.050       0.061886  \n",
       "270          0.0     0.000000      sx-130     0.764       0.821218  \n",
       "271          0.0     0.002018     zy-pl-2     0.346       0.054008  \n",
       "272          0.0     0.000000       sx-25     0.403       0.585246  \n",
       "273          0.0     0.000000       sx-27     0.623       0.533508  \n",
       "\n",
       "[274 rows x 1187 columns]"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.read_csv('anti-HBV-S_ALL_feature_filter.txt', sep='\\t')\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "2b3d6f60",
   "metadata": {},
   "outputs": [],
   "source": [
    "def set_to_one(x):\n",
    "    if x > 0:\n",
    "        return 1\n",
    "    else:\n",
    "        return x"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "d054670f",
   "metadata": {},
   "outputs": [],
   "source": [
    "df['Class'] = np.where((df['cell_toxicity'] > 0.3) , 1, 0)\n",
    "\n",
    "X = df.drop(columns=['Bench_code', 'activity', 'Class', 'cell_toxicity'])\n",
    "X = X.applymap(set_to_one)\n",
    "y = df.Class"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "df991559",
   "metadata": {},
   "source": [
    "# Feature_filter"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "e2050f04",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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txc9PT0oFAorXmC3ZcuWZbf0nv93EhER0epSr9fR29u74vczNyGzs7Po6enB1q1bceutt+L666/HzMwM3vGOd2BoaAg33HADDhw4gI0bN6JarSIMQ3ieh02bNuHMmTPmZzp5/PHHl616VKtVbNmyBSdOnHjdh6C3h1qthomJCZw8eZIh47c5vlerC9+v1YXv19IKSL1ex5o1a173dUK/jYMYtVoNvb29qFarXftGriZ8v1YPvlerC9+v1YXv1xv3psa2ExEREV0sNiFERER0RbytmxDP8/CVr3wFnudd6V+F3gC+X6sH36vVhe/X6sL36417W2dCiIiI6Or1tl4JISIioqsXmxAiIiK6ItiEEBER0RXBJoSIiIiuCDYhREREdEVc1ibkv/yX/4INGzYgl8th+/bteOqpp1739Y888gg2bdqEXC6HrVu34v/+3/+77Ptaa/yrf/WvMD4+jnw+j/vuuw8vv/zystcsLCzg7/29v4dyuYy+vj78g3/wD1a8q4aWuxLv14YNGyCEWPbna1/72iV/tqvRpX6//vIv/xK/+qu/isHBQQghsGfPntfU8H0fn//85zE4OIhSqYQHHngAZ8+evZSPdVW6Eu/Vvffe+5r/bX3uc5+7lI911bqU71cURfjSl76ErVu3olgsYs2aNfit3/otTE9PL6vRtf926cvk29/+tnZdV/+P//E/9EsvvaQ/85nP6L6+Pn327NmOr//Zz36mLcvS//7f/3u9b98+/Xu/93vacRz9wgsvmNd87Wtf0729vfr//J//o/fu3as//OEP68nJSd1ut81rPvjBD+qbb75Z/+IXv9A/+clP9PXXX68/+clPXq7HvGpcqffrmmuu0X/wB3+gz5w5Y/40Go3L/ryr3eV4v/70T/9U/+t//a/1n/zJn2gA+rnnnntNnc997nN6YmJC79q1Sz/99NP6zjvv1HffffflesyrwpV6r9773vfqz3zmM8v+t1WtVi/XY141LvX7ValU9H333af/9//+3/rAgQP6ySef1HfccYd+17vetaxOt/7bddmakDvuuEN//vOfN58nSaLXrFmj//AP/7Dj6z/+8Y/rv/N3/s6yr23fvl3v2LFDa621UkqPjY3pr3/96+b7lUpFe56n//zP/1xrrfW+ffs0AD01NWVe89d//ddaCKFPnz59yZ7tanQl3i+tl5qQb3zjG5fwSbrDpX6/znf06NGO/7BVKhXtOI5+5JFHzNf279+vAegnn3zyTTzN1e1KvFdaLzUhX/jCF97U796NLuf7lXrqqac0AH38+HGtdXf/23VZtmPCMMQzzzyD++67z3xNSon77rsPTz75ZMefefLJJ5e9HgA+8IEPmNcfPXoUMzMzy17T29uL7du3m9c8+eST6Ovrw2233WZec99990FKid27d1+y57vaXKn3K/W1r30Ng4ODuOWWW/D1r38dcRxfqke7Kl2O9+uNeOaZZxBF0bI6mzZtwvr16zPV6SZX6r1KPfzwwxgaGsKWLVvw5S9/Ga1WK3ONbvJWvV/VahVCCPT19Zka3fpvl305is7NzSFJEoyOji77+ujoKA4cONDxZ2ZmZjq+fmZmxnw//drrvWZkZGTZ923bxsDAgHkNvdaVer8A4B/9o3+EW2+9FQMDA/j5z3+OL3/5yzhz5gz+43/8j2/6ua5Wl+P9eiNmZmbguq75P86LrdNNrtR7BQC/+Zu/iWuuuQZr1qzB888/jy996Us4ePAg/vIv/zLbQ3SRt+L98n0fX/rSl/DJT37S3LDbzf92XZYmhOiN+t3f/V3z8bZt2+C6Lnbs2IE//MM/5L0LRG/CZz/7WfPx1q1bMT4+jve///04cuQIrrvuuiv4m3WvKIrw8Y9/HFpr/Lf/9t+u9K/ztnBZtmOGhoZgWdZrUvNnz57F2NhYx58ZGxt73den//3bXnPu3Lll34/jGAsLCyv+vXTl3q9Otm/fjjiOcezYsayP0TUux/v1RoyNjSEMQ1QqlTdVp5tcqfeqk+3btwMADh8+/KbqXM0u5/uVNiDHjx/HE088YVZB0hrd+m/XZWlCXNfFu971Luzatct8TSmFXbt24a677ur4M3fdddey1wPAE088YV4/OTmJsbGxZa+p1WrYvXu3ec1dd92FSqWCZ555xrzmBz/4AZRS5n+A9FpX6v3qZM+ePZBSvmZpkl51Od6vN+Jd73oXHMdZVufgwYM4ceJEpjrd5Eq9V52kx3jHx8ffVJ2r2eV6v9IG5OWXX8b3v/99DA4OvqZG1/7bdbkSr9/+9re153n6f/7P/6n37dunP/vZz+q+vj49MzOjtdb6U5/6lP5n/+yfmdf/7Gc/07Zt6//wH/6D3r9/v/7KV77S8chnX1+f/s53vqOff/55/eu//usdj+jecsstevfu3fqnP/2p3rhxY1ccc3qzrsT79fOf/1x/4xvf0Hv27NFHjhzRf/Znf6aHh4f1b/3Wb721D78KXY73a35+Xj/33HP6e9/7ngagv/3tb+vnnntOnzlzxrzmc5/7nF6/fr3+wQ9+oJ9++ml911136bvuuuute/BV6Eq8V4cPH9Z/8Ad/oJ9++ml99OhR/Z3vfEdfe+21+j3vec9b+/Cr0KV+v8Iw1B/+8If1unXr9J49e5YdmQ6CwNTp1n+7LlsTorXW//k//2e9fv167bquvuOOO/QvfvEL8733vve9+tOf/vSy1//FX/yFvuGGG7Trunrz5s36e9/73rLvK6X0v/yX/1KPjo5qz/P0+9//fn3w4MFlr5mfn9ef/OQndalU0uVyWf/9v//3db1ev2zPeDV5q9+vZ555Rm/fvl339vbqXC6nb7rpJv3v/t2/077vX9bnvFpc6vfrm9/8pgbwmj9f+cpXzGva7bb+nd/5Hd3f368LhYL+u3/37y5rUqizt/q9OnHihH7Pe96jBwYGtOd5+vrrr9cPPvgg54S8QZfy/UqPUXf688Mf/tC8rlv/7RJaa/1Wr74QERER8e4YIiIiuiLYhBAREdEVwSaEiIiIrgg2IURERHRFsAkhIiKiK4JNCBEREV0RbEKIiIjoimATQkRERFcEmxAiIiK6ItiEEBER0RXBJoSIiIiuiP8PCHKk2/v66bgAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "flist = [0]*1184\n",
    "\n",
    "rf = RandomForestClassifier(max_depth=None, n_estimators=1000,\n",
    "                            max_leaf_nodes=None, min_samples_split=2,\n",
    "                            min_samples_leaf=1, random_state=2023, n_jobs=5)\n",
    "for i in range(20):\n",
    "    rf.fit(X,y)\n",
    "    flist = [x + y for x, y in zip(flist, rf.feature_importances_)]\n",
    "flist = [x / 20 for x in flist]\n",
    "\n",
    "importances = pd.Series(flist, index = X.columns)\n",
    "sorted_importances = importances.sort_values()\n",
    "sorted_importances.plot(kind = 'barh', color = '#00F5FF')\n",
    "plt.tick_params(axis='y', labelsize=2)\n",
    "plt.show()\n",
    "\n",
    "sorted_importances = pd.DataFrame({'Importance': flist, 'CAS': X.columns})\n",
    "sorted_importances.to_csv('oil_importance_features_ct_clf.csv', index=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "0db145eb",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "72"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "###threshold selection\n",
    "df_f = sorted_importances[sorted_importances[\"Importance\"] > 0.0033]\n",
    "important_features = df_f['CAS'].to_list()\n",
    "len(important_features)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "ea0aa49c",
   "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>000078-70-6</th>\n",
       "      <th>000079-92-5</th>\n",
       "      <th>000080-56-8</th>\n",
       "      <th>000087-44-5</th>\n",
       "      <th>000099-83-2</th>\n",
       "      <th>000099-85-4</th>\n",
       "      <th>000099-87-6</th>\n",
       "      <th>000104-55-2</th>\n",
       "      <th>000110-93-0</th>\n",
       "      <th>000112-31-2</th>\n",
       "      <th>...</th>\n",
       "      <th>051534-36-2</th>\n",
       "      <th>051932-70-8</th>\n",
       "      <th>059550-35-5</th>\n",
       "      <th>074663-83-5</th>\n",
       "      <th>081944-08-3</th>\n",
       "      <th>088395-46-4</th>\n",
       "      <th>1000062-61-9</th>\n",
       "      <th>1000360-33-0</th>\n",
       "      <th>1000383-48-3</th>\n",
       "      <th>1000411-59-6</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</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",
       "      <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",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>269</th>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>270</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>271</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>272</th>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>273</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>274 rows × 72 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "     000078-70-6  000079-92-5  000080-56-8  000087-44-5  000099-83-2  \\\n",
       "0            1.0          1.0          0.0          0.0          0.0   \n",
       "1            1.0          1.0          0.0          0.0          0.0   \n",
       "2            0.0          0.0          0.0          1.0          0.0   \n",
       "3            0.0          1.0          0.0          1.0          1.0   \n",
       "4            1.0          0.0          0.0          1.0          1.0   \n",
       "..           ...          ...          ...          ...          ...   \n",
       "269          1.0          0.0          0.0          0.0          0.0   \n",
       "270          0.0          0.0          0.0          1.0          1.0   \n",
       "271          0.0          0.0          0.0          1.0          0.0   \n",
       "272          1.0          0.0          1.0          0.0          1.0   \n",
       "273          1.0          1.0          1.0          1.0          1.0   \n",
       "\n",
       "     000099-85-4  000099-87-6  000104-55-2  000110-93-0  000112-31-2  ...  \\\n",
       "0            1.0          0.0          0.0          0.0          0.0  ...   \n",
       "1            1.0          1.0          0.0          0.0          0.0  ...   \n",
       "2            0.0          0.0          0.0          0.0          0.0  ...   \n",
       "3            1.0          1.0          0.0          0.0          0.0  ...   \n",
       "4            1.0          0.0          0.0          0.0          0.0  ...   \n",
       "..           ...          ...          ...          ...          ...  ...   \n",
       "269          0.0          0.0          0.0          0.0          0.0  ...   \n",
       "270          0.0          1.0          0.0          0.0          0.0  ...   \n",
       "271          0.0          0.0          0.0          0.0          0.0  ...   \n",
       "272          0.0          0.0          0.0          0.0          1.0  ...   \n",
       "273          1.0          0.0          0.0          0.0          1.0  ...   \n",
       "\n",
       "     051534-36-2  051932-70-8  059550-35-5  074663-83-5  081944-08-3  \\\n",
       "0            0.0          0.0          0.0          0.0          0.0   \n",
       "1            0.0          0.0          0.0          0.0          0.0   \n",
       "2            0.0          0.0          0.0          0.0          0.0   \n",
       "3            0.0          0.0          0.0          0.0          0.0   \n",
       "4            0.0          0.0          0.0          0.0          0.0   \n",
       "..           ...          ...          ...          ...          ...   \n",
       "269          0.0          0.0          0.0          0.0          0.0   \n",
       "270          0.0          0.0          0.0          0.0          0.0   \n",
       "271          0.0          0.0          0.0          0.0          0.0   \n",
       "272          0.0          0.0          0.0          0.0          0.0   \n",
       "273          0.0          0.0          0.0          0.0          0.0   \n",
       "\n",
       "     088395-46-4  1000062-61-9  1000360-33-0  1000383-48-3  1000411-59-6  \n",
       "0            0.0           0.0           0.0           0.0           1.0  \n",
       "1            1.0           0.0           1.0           0.0           1.0  \n",
       "2            0.0           0.0           0.0           0.0           0.0  \n",
       "3            1.0           0.0           1.0           0.0           0.0  \n",
       "4            1.0           0.0           1.0           0.0           1.0  \n",
       "..           ...           ...           ...           ...           ...  \n",
       "269          0.0           0.0           0.0           0.0           0.0  \n",
       "270          1.0           0.0           0.0           0.0           0.0  \n",
       "271          0.0           0.0           0.0           0.0           0.0  \n",
       "272          0.0           0.0           0.0           0.0           0.0  \n",
       "273          0.0           0.0           0.0           0.0           0.0  \n",
       "\n",
       "[274 rows x 72 columns]"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X = df.drop(columns=['Bench_code', 'activity', 'Class', 'cell_toxicity'])\n",
    "X = X[X.columns.intersection(important_features)]\n",
    "X = X.applymap(set_to_one)\n",
    "X"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "59798738",
   "metadata": {},
   "source": [
    "# Tuning_parameters"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "6f57bc05",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best params:  {'C': 10, 'kernel': 'rbf'}\n",
      "Best score:  0.5784838350055741\n"
     ]
    }
   ],
   "source": [
    "k='rbf'\n",
    "C=[0.5,1]\n",
    "C.extend(range(10,201,10)) \n",
    "\n",
    "kk = ['rbf']\n",
    "params={'kernel' : kk , 'C' : C}\n",
    "stratified_kfold = StratifiedKFold(n_splits=5)\n",
    "\n",
    "clf = svm.SVC(probability=True,random_state=2023)\n",
    "model = GridSearchCV(clf,param_grid=params,cv=stratified_kfold,scoring='f1')\n",
    "model.fit(X, y)\n",
    "\n",
    "print(\"Best params: \",model.best_params_)\n",
    "print(\"Best score: \",model.best_score_)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fd9d0607",
   "metadata": {},
   "source": [
    "# Save_model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "09fab72c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['CT_clf_SVM.pkl.z']"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "clf = svm.SVC(C=10,kernel='rbf',probability=True,random_state=2023) ###change parameters C\n",
    "svm_model=clf.fit(X, y)\n",
    "joblib.dump(svm_model, 'CT_clf_SVM.pkl.z')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "aefc2343",
   "metadata": {},
   "source": [
    "# Prediction"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "40a76db9",
   "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>000057-10-3</th>\n",
       "      <th>000057-11-4</th>\n",
       "      <th>000060-12-8</th>\n",
       "      <th>000060-33-3</th>\n",
       "      <th>000076-22-2</th>\n",
       "      <th>000076-49-3</th>\n",
       "      <th>000077-42-9</th>\n",
       "      <th>000077-53-2</th>\n",
       "      <th>000078-70-6</th>\n",
       "      <th>000079-77-6</th>\n",
       "      <th>...</th>\n",
       "      <th>446050-56-2</th>\n",
       "      <th>631868-96-7</th>\n",
       "      <th>698365-10-5</th>\n",
       "      <th>729602-94-2</th>\n",
       "      <th>765307-45-7</th>\n",
       "      <th>823810-22-6</th>\n",
       "      <th>872858-42-9</th>\n",
       "      <th>889360-49-0</th>\n",
       "      <th>913176-41-7</th>\n",
       "      <th>Bench_code</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.00000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>jx-139(1)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.00000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>jx-6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.002077</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.294552</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.00000</td>\n",
       "      <td>0.000007</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>sx-52</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.325012</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.00000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>sx-53</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.00000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>sx-60</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.048324</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.00000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>zy-pl-108</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.117151</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.00000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>zy-pl-109</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.006604</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.00000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>zy-pl-110</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>0.012328</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.009038</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.00000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>zy-pl-130</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.00000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>zy-pl-18</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.005090</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.00000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>zy-pl-20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.004314</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.00000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>zy-pl-50</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.004314</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.00000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>zy-pl-51</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.004314</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.00000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>zy-pl-52</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.026137</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.01332</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>zy-pl-53</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.016016</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.00000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>zy-pl-54</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.00000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>zy-pl-55</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.00000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>zy-pl-6</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>18 rows × 1185 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "    000057-10-3  000057-11-4  000060-12-8  000060-33-3  000076-22-2  \\\n",
       "0      0.000000          0.0          0.0     0.000000          0.0   \n",
       "1      0.000000          0.0          0.0     0.000000          0.0   \n",
       "2      0.000000          0.0          0.0     0.000000          0.0   \n",
       "3      0.000000          0.0          0.0     0.000000          0.0   \n",
       "4      0.000000          0.0          0.0     0.000000          0.0   \n",
       "5      0.000000          0.0          0.0     0.000000          0.0   \n",
       "6      0.000000          0.0          0.0     0.000000          0.0   \n",
       "7      0.000000          0.0          0.0     0.000000          0.0   \n",
       "8      0.012328          0.0          0.0     0.009038          0.0   \n",
       "9      0.000000          0.0          0.0     0.000000          0.0   \n",
       "10     0.000000          0.0          0.0     0.000000          0.0   \n",
       "11     0.000000          0.0          0.0     0.000000          0.0   \n",
       "12     0.000000          0.0          0.0     0.000000          0.0   \n",
       "13     0.000000          0.0          0.0     0.000000          0.0   \n",
       "14     0.000000          0.0          0.0     0.000000          0.0   \n",
       "15     0.000000          0.0          0.0     0.000000          0.0   \n",
       "16     0.000000          0.0          0.0     0.000000          0.0   \n",
       "17     0.000000          0.0          0.0     0.000000          0.0   \n",
       "\n",
       "    000076-49-3  000077-42-9  000077-53-2  000078-70-6  000079-77-6  ...  \\\n",
       "0      0.000000          0.0          0.0     0.000000          0.0  ...   \n",
       "1      0.000000          0.0          0.0     0.000000          0.0  ...   \n",
       "2      0.002077          0.0          0.0     0.294552          0.0  ...   \n",
       "3      0.000000          0.0          0.0     0.325012          0.0  ...   \n",
       "4      0.000000          0.0          0.0     0.000000          0.0  ...   \n",
       "5      0.000000          0.0          0.0     0.048324          0.0  ...   \n",
       "6      0.000000          0.0          0.0     0.117151          0.0  ...   \n",
       "7      0.000000          0.0          0.0     0.006604          0.0  ...   \n",
       "8      0.000000          0.0          0.0     0.000000          0.0  ...   \n",
       "9      0.000000          0.0          0.0     0.000000          0.0  ...   \n",
       "10     0.000000          0.0          0.0     0.005090          0.0  ...   \n",
       "11     0.000000          0.0          0.0     0.004314          0.0  ...   \n",
       "12     0.000000          0.0          0.0     0.004314          0.0  ...   \n",
       "13     0.000000          0.0          0.0     0.004314          0.0  ...   \n",
       "14     0.000000          0.0          0.0     0.026137          0.0  ...   \n",
       "15     0.000000          0.0          0.0     0.016016          0.0  ...   \n",
       "16     0.000000          0.0          0.0     0.000000          0.0  ...   \n",
       "17     0.000000          0.0          0.0     0.000000          0.0  ...   \n",
       "\n",
       "    446050-56-2  631868-96-7  698365-10-5  729602-94-2  765307-45-7  \\\n",
       "0           0.0          0.0      0.00000     0.000000          0.0   \n",
       "1           0.0          0.0      0.00000     0.000000          0.0   \n",
       "2           0.0          0.0      0.00000     0.000007          0.0   \n",
       "3           0.0          0.0      0.00000     0.000000          0.0   \n",
       "4           0.0          0.0      0.00000     0.000000          0.0   \n",
       "5           0.0          0.0      0.00000     0.000000          0.0   \n",
       "6           0.0          0.0      0.00000     0.000000          0.0   \n",
       "7           0.0          0.0      0.00000     0.000000          0.0   \n",
       "8           0.0          0.0      0.00000     0.000000          0.0   \n",
       "9           0.0          0.0      0.00000     0.000000          0.0   \n",
       "10          0.0          0.0      0.00000     0.000000          0.0   \n",
       "11          0.0          0.0      0.00000     0.000000          0.0   \n",
       "12          0.0          0.0      0.00000     0.000000          0.0   \n",
       "13          0.0          0.0      0.00000     0.000000          0.0   \n",
       "14          0.0          0.0      0.01332     0.000000          0.0   \n",
       "15          0.0          0.0      0.00000     0.000000          0.0   \n",
       "16          0.0          0.0      0.00000     0.000000          0.0   \n",
       "17          0.0          0.0      0.00000     0.000000          0.0   \n",
       "\n",
       "    823810-22-6  872858-42-9  889360-49-0  913176-41-7  Bench_code  \n",
       "0           0.0          0.0          0.0          0.0   jx-139(1)  \n",
       "1           0.0          0.0          0.0          0.0        jx-6  \n",
       "2           0.0          0.0          0.0          0.0       sx-52  \n",
       "3           0.0          0.0          0.0          0.0       sx-53  \n",
       "4           0.0          0.0          0.0          0.0       sx-60  \n",
       "5           0.0          0.0          0.0          0.0   zy-pl-108  \n",
       "6           0.0          0.0          0.0          0.0   zy-pl-109  \n",
       "7           0.0          0.0          0.0          0.0   zy-pl-110  \n",
       "8           0.0          0.0          0.0          0.0   zy-pl-130  \n",
       "9           0.0          0.0          0.0          0.0    zy-pl-18  \n",
       "10          0.0          0.0          0.0          0.0    zy-pl-20  \n",
       "11          0.0          0.0          0.0          0.0    zy-pl-50  \n",
       "12          0.0          0.0          0.0          0.0    zy-pl-51  \n",
       "13          0.0          0.0          0.0          0.0    zy-pl-52  \n",
       "14          0.0          0.0          0.0          0.0    zy-pl-53  \n",
       "15          0.0          0.0          0.0          0.0    zy-pl-54  \n",
       "16          0.0          0.0          0.0          0.0    zy-pl-55  \n",
       "17          0.0          0.0          0.0          0.0     zy-pl-6  \n",
       "\n",
       "[18 rows x 1185 columns]"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#load data\n",
    "df = pd.read_csv('data/pred_oil_feature.txt', sep = '\\t')\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "8a0b8ea7",
   "metadata": {},
   "outputs": [],
   "source": [
    "X = df.drop(columns = ['Bench_code'])\n",
    "X = X.applymap(set_to_one)\n",
    "Name = df['Bench_code'].tolist()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "420d61c1",
   "metadata": {},
   "outputs": [],
   "source": [
    "#feature filter\n",
    "sorted_importances_ct_clf = pd.read_csv('oil_importance_features_ct_clf.csv')\n",
    "df1 = sorted_importances_ct_clf[sorted_importances_ct_clf['Importance'] > 0.0033]\n",
    "important_features_ct_clf = df1['CAS'].to_list()\n",
    "X1 = X[X.columns.intersection(important_features_ct_clf)]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "fab2867c",
   "metadata": {},
   "outputs": [],
   "source": [
    "#pred\n",
    "CT_clf_model = joblib.load('CT_clf_SVM.pkl.z')\n",
    "y_pred1_CT = CT_clf_model.predict_proba(X1)\n",
    "threshold = 0.5\n",
    "y_pred_CT = [1 if proba >= threshold else 0 for proba in y_pred1_CT[:, 1]]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "5b54b32d",
   "metadata": {},
   "outputs": [],
   "source": [
    "#save results\n",
    "df_p = pd.DataFrame({'ct_proba': y_pred1_CT[:, 1], 'ct_pred': y_pred_CT, 'Bench_code': Name})\n",
    "\n",
    "df_p.to_csv('oil_pred_ct_clf_result.csv', index=False)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "myenv",
   "language": "python",
   "name": "myenv"
  },
  "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.8.17"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
