{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "c1a3a114",
   "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": "4f1a597f",
   "metadata": {},
   "source": [
    "# load_data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "64cd190b",
   "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": "c6218a91",
   "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": 4,
   "id": "21be694d",
   "metadata": {},
   "outputs": [],
   "source": [
    "df['Class'] = np.where((df['activity'] > 0.4) , 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": "60f3ee3a",
   "metadata": {},
   "source": [
    "# Feature_filter"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "8e8ff8ac",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "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_sAg_clf.csv', index=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "89b63502",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "58"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "###threshold selection\n",
    "df_f = sorted_importances[sorted_importances[\"Importance\"] > 0.0045]\n",
    "important_features = df_f['CAS'].to_list()\n",
    "len(important_features)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "369bb1cb",
   "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>000112-31-2</th>\n",
       "      <th>000123-35-3</th>\n",
       "      <th>...</th>\n",
       "      <th>028290-35-9</th>\n",
       "      <th>031983-22-9</th>\n",
       "      <th>038230-60-3</th>\n",
       "      <th>051534-36-2</th>\n",
       "      <th>051932-70-8</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>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>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>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>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>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.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>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",
       "    </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>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>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.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>1.0</td>\n",
       "      <td>...</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>0.0</td>\n",
       "      <td>1.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>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>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>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>1.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>1.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>1.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 × 58 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  000112-31-2  000123-35-3  ...  \\\n",
       "0            1.0          0.0          0.0          0.0          1.0  ...   \n",
       "1            1.0          1.0          0.0          0.0          1.0  ...   \n",
       "2            0.0          0.0          0.0          0.0          0.0  ...   \n",
       "3            1.0          1.0          0.0          0.0          1.0  ...   \n",
       "4            1.0          0.0          0.0          0.0          1.0  ...   \n",
       "..           ...          ...          ...          ...          ...  ...   \n",
       "269          0.0          0.0          0.0          0.0          1.0  ...   \n",
       "270          0.0          1.0          0.0          0.0          1.0  ...   \n",
       "271          0.0          0.0          0.0          0.0          0.0  ...   \n",
       "272          0.0          0.0          0.0          1.0          1.0  ...   \n",
       "273          1.0          0.0          0.0          1.0          1.0  ...   \n",
       "\n",
       "     028290-35-9  031983-22-9  038230-60-3  051534-36-2  051932-70-8  \\\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          1.0          0.0          0.0          0.0   \n",
       "3            0.0          0.0          0.0          0.0          0.0   \n",
       "4            0.0          1.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",
       "     081944-08-3  088395-46-4  1000062-61-9  1000360-33-0  1000411-59-6  \n",
       "0            0.0          0.0           0.0           0.0           1.0  \n",
       "1            0.0          1.0           0.0           1.0           1.0  \n",
       "2            0.0          0.0           0.0           0.0           0.0  \n",
       "3            0.0          1.0           0.0           1.0           0.0  \n",
       "4            0.0          1.0           0.0           1.0           1.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           0.0  \n",
       "273          0.0          0.0           0.0           0.0           0.0  \n",
       "\n",
       "[274 rows x 58 columns]"
      ]
     },
     "execution_count": 8,
     "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": "51f710fd",
   "metadata": {},
   "source": [
    "# Tuning_parameters"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "5e98cbca",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best params:  {'C': 10, 'kernel': 'rbf'}\n",
      "Best score:  0.550015479876161\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": "2473a410",
   "metadata": {},
   "source": [
    "# Save_model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "73410715",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['sAg_clf_SVM.pkl.z']"
      ]
     },
     "execution_count": 10,
     "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, 'sAg_clf_SVM.pkl.z')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "aee81786",
   "metadata": {},
   "source": [
    "# Prediction"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "c5874a54",
   "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": 11,
     "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": 12,
   "id": "e9f75105",
   "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": 13,
   "id": "e11a8dbf",
   "metadata": {},
   "outputs": [],
   "source": [
    "#feature filter\n",
    "sorted_importances_sAg_clf = pd.read_csv('oil_importance_features_sAg_clf.csv')\n",
    "df1 = sorted_importances_sAg_clf[sorted_importances_sAg_clf['Importance'] > 0.0045]\n",
    "important_features_sAg_clf = df1['CAS'].to_list()\n",
    "X1 = X[X.columns.intersection(important_features_sAg_clf)]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "ab6936d0",
   "metadata": {},
   "outputs": [],
   "source": [
    "#pred\n",
    "sAg_clf_model = joblib.load('sAg_clf_SVM.pkl.z')\n",
    "y_pred1_sAg = sAg_clf_model.predict_proba(X1)\n",
    "threshold = 0.5\n",
    "y_pred_sAg = [1 if proba >= threshold else 0 for proba in y_pred1_sAg[:, 1]]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "4a453827",
   "metadata": {},
   "outputs": [],
   "source": [
    "#save results\n",
    "df_p = pd.DataFrame({'sAg_proba': y_pred1_sAg[:, 1], 'sAg_pred': y_pred_sAg, 'Bench_code': Name})\n",
    "\n",
    "df_p.to_csv('oil_pred_sAg_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
}
