{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "f025adf9",
   "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 metrics\n",
    "from sklearn.utils import shuffle\n",
    "from sklearn.preprocessing import StandardScaler\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",
    "from sklearn.metrics import mean_squared_error, r2_score, make_scorer\n",
    "from sklearn.ensemble import RandomForestRegressor\n",
    "from sklearn.svm import SVR\n",
    "import seaborn as sn\n",
    "import matplotlib.pyplot as plt\n",
    "import pickle"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4eb6134a",
   "metadata": {},
   "source": [
    "# load_data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "3c930fc8",
   "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": 3,
     "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": 4,
   "id": "67a69403",
   "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": 5,
   "id": "4145872a",
   "metadata": {},
   "outputs": [],
   "source": [
    "X = df.drop(columns=['Bench_code', 'activity', 'cell_toxicity'])\n",
    "X = X.applymap(set_to_one)\n",
    "y = df.cell_toxicity"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6466562c",
   "metadata": {},
   "source": [
    "# Feature_filter"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "d48442f7",
   "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 = RandomForestRegressor(n_estimators=1000, n_jobs=5, random_state=2023)\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_reg.csv', )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "3c790609",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "67"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "###threshold selection\n",
    "df_f = sorted_importances[sorted_importances[\"Importance\"] > 0.003]\n",
    "important_features = df_f['CAS'].to_list()\n",
    "len(important_features)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "9edc0e5f",
   "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>000099-83-2</th>\n",
       "      <th>000099-85-4</th>\n",
       "      <th>000099-87-6</th>\n",
       "      <th>000104-55-2</th>\n",
       "      <th>000106-26-3</th>\n",
       "      <th>000110-93-0</th>\n",
       "      <th>000112-31-2</th>\n",
       "      <th>000123-35-3</th>\n",
       "      <th>000127-91-3</th>\n",
       "      <th>...</th>\n",
       "      <th>051932-70-8</th>\n",
       "      <th>059550-35-5</th>\n",
       "      <th>060909-28-6</th>\n",
       "      <th>081944-08-3</th>\n",
       "      <th>083085-83-0</th>\n",
       "      <th>088395-46-4</th>\n",
       "      <th>1000131-99-4</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>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>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>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.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>0.0</td>\n",
       "      <td>1.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>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>3</th>\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>1.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>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>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>1.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>1.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>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>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>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>272</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>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>...</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>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>1.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",
       "  </tbody>\n",
       "</table>\n",
       "<p>274 rows × 67 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "     000078-70-6  000099-83-2  000099-85-4  000099-87-6  000104-55-2  \\\n",
       "0            1.0          0.0          1.0          0.0          0.0   \n",
       "1            1.0          0.0          1.0          1.0          0.0   \n",
       "2            0.0          0.0          0.0          0.0          0.0   \n",
       "3            0.0          1.0          1.0          1.0          0.0   \n",
       "4            1.0          1.0          1.0          0.0          0.0   \n",
       "..           ...          ...          ...          ...          ...   \n",
       "269          1.0          0.0          0.0          0.0          0.0   \n",
       "270          0.0          1.0          0.0          1.0          0.0   \n",
       "271          0.0          0.0          0.0          0.0          0.0   \n",
       "272          1.0          1.0          0.0          0.0          0.0   \n",
       "273          1.0          1.0          1.0          0.0          0.0   \n",
       "\n",
       "     000106-26-3  000110-93-0  000112-31-2  000123-35-3  000127-91-3  ...  \\\n",
       "0            0.0          0.0          0.0          1.0          1.0  ...   \n",
       "1            0.0          0.0          0.0          1.0          0.0  ...   \n",
       "2            0.0          0.0          0.0          0.0          0.0  ...   \n",
       "3            0.0          0.0          0.0          1.0          0.0  ...   \n",
       "4            0.0          0.0          0.0          1.0          1.0  ...   \n",
       "..           ...          ...          ...          ...          ...  ...   \n",
       "269          0.0          0.0          0.0          1.0          0.0  ...   \n",
       "270          0.0          0.0          0.0          1.0          0.0  ...   \n",
       "271          0.0          0.0          0.0          0.0          0.0  ...   \n",
       "272          0.0          0.0          1.0          1.0          0.0  ...   \n",
       "273          0.0          0.0          1.0          1.0          0.0  ...   \n",
       "\n",
       "     051932-70-8  059550-35-5  060909-28-6  081944-08-3  083085-83-0  \\\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          1.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  1000131-99-4  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 67 columns]"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X = X[X.columns.intersection(important_features)]\n",
    "X = X.applymap(set_to_one)\n",
    "X"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4aef8953",
   "metadata": {},
   "source": [
    "# Tuning_parameters"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "e628ad1d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best parameters:  {'C': 1, 'gamma': 0.1, 'kernel': 'rbf'}\n",
      "Best score:  0.24676383956496753\n"
     ]
    }
   ],
   "source": [
    "r2_scorer = make_scorer(r2_score)\n",
    "\n",
    "param_grid = {\"C\": [0.1, 1, 10, 20, 40, 60, 80, 100, 1000],\n",
    "              \"kernel\": [\"poly\", \"rbf\"],\n",
    "              \"gamma\": [1e-7, 1e-4, 1e-3, 1e-2, 0.1]\n",
    "             }\n",
    "\n",
    "regressor = SVR()\n",
    "grid_search = GridSearchCV(regressor, param_grid, cv=10, scoring=r2_scorer)\n",
    "grid_search.fit(X, y)\n",
    "\n",
    "print(\"Best parameters: \", grid_search.best_params_)\n",
    "print(\"Best score: \", grid_search.best_score_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "c6f48e87",
   "metadata": {},
   "outputs": [],
   "source": [
    "def run_SVR_thread(x_train,x_test,y_train,y_test,cv):\n",
    "    clf = SVR(C=1, kernel='rbf', gamma=0.1)\n",
    "    SVR_model=clf.fit(x_train, y_train)\n",
    "    y_pred=SVR_model.predict(x_test)\n",
    "    r2 = r2_score(y_test, y_pred)\n",
    "    mse = mean_squared_error(y_test, y_pred)\n",
    "    return r2, mse"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "85561d76",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.19273976575733065,0.07159331808562568\n",
      "0.6125633994421661,0.020117099647189798\n",
      "0.4857165468090948,0.061339317235705126\n",
      "0.22390388596423583,0.08133435163781981\n",
      "0.3878259533662799,0.05236466272895376\n",
      "0.2803546791113639,0.0752234533485597\n",
      "0.3978573612982834,0.04976133308754242\n",
      "0.4027482705617882,0.04713186077028334\n",
      "0.30634157477998103,0.06274054440093763\n",
      "0.14716300152463546,0.04806231170959713\n",
      "0.18717391795724758,0.06838716013220576\n",
      "0.20553478082763388,0.06272205393653789\n",
      "0.3387227214483648,0.06587775330862729\n",
      "0.38306270990593805,0.06287793627157143\n",
      "0.2285678701793803,0.03948611217118346\n",
      "0.3569620128834914,0.055663250999845926\n",
      "0.23096970351411628,0.054317238796746395\n",
      "0.27250563294833485,0.040603815332878844\n",
      "0.38196760408776353,0.0311707038462151\n",
      "0.10316197325410115,0.05722609343249089\n",
      "0.046435576127012324,0.06167716791941789\n",
      "0.44531554965167774,0.026374865462719187\n",
      "0.4334963796329626,0.043028360147297266\n",
      "0.02519028589633865,0.09404026277808838\n",
      "0.3315795099607407,0.03886682710212475\n",
      "0.32083900452961145,0.04853221941742152\n",
      "0.5181534138765971,0.03934395272359776\n",
      "0.4548737835366097,0.06537698262736914\n",
      "0.4379306449399438,0.05047799930288904\n",
      "0.15531759912711707,0.041038327829229795\n",
      "0.5527808520200503,0.04015419864217884\n",
      "0.07513725886334832,0.062353606559986854\n",
      "0.3434146414159466,0.04583350561941705\n",
      "0.7302090637922796,0.020134452303104688\n",
      "0.34212217075801965,0.04843617144163072\n",
      "0.4421951074394591,0.03846747970893615\n",
      "0.20724658776268745,0.06107728274526094\n",
      "0.0685621136936676,0.06298393681660033\n",
      "0.4998194611710196,0.04389975592789529\n",
      "0.09685288098224809,0.07882773791478269\n",
      "0.5218373334335347,0.043292612565642576\n",
      "0.1907173748002451,0.07291762719060592\n",
      "0.5115915199249115,0.0274061850912549\n",
      "0.16454232010305248,0.0488018756156828\n",
      "0.3558416448518149,0.05983002534305545\n",
      "0.15737190413138147,0.06352662581344122\n",
      "0.2803218043945467,0.06140117946617268\n",
      "0.21872999909863966,0.08733560845132589\n",
      "-0.4078817037377278,0.06059418775023492\n",
      "0.10994388817271505,0.05222313859854731\n",
      "0.2367080792012607,0.056662073817398975\n",
      "0.2706428072202125,0.023654659352313773\n",
      "0.431345431641986,0.061484937155364315\n",
      "0.27276944634852596,0.09977133743524214\n",
      "0.08823614152586101,0.07280369812364465\n",
      "-0.04101306531656901,0.046945658546913065\n",
      "0.368156138268676,0.030247869124385294\n",
      "0.3929613302271422,0.05350951180731538\n",
      "0.16117505348910155,0.08804584853605403\n",
      "0.362725968004153,0.06435984193806385\n",
      "0.31770641015040446,0.03872519992176411\n",
      "0.2001132723523743,0.09549053313507662\n",
      "0.08506047429119268,0.05915740367366594\n",
      "0.08085831369625962,0.044183142413987124\n",
      "0.017663083748214126,0.08920149939833111\n",
      "0.43371508404164616,0.03135420629907168\n",
      "0.468282919552397,0.03487264566423113\n",
      "0.36634814117950343,0.0668548327313599\n",
      "0.08884486171300177,0.038985885193352575\n",
      "0.5277733796176869,0.02739187465637796\n",
      "0.0836229780331561,0.07174889251255914\n",
      "0.1882985131273185,0.039231889161430854\n",
      "0.4171058992096772,0.057658536432047595\n",
      "0.45464651271444867,0.05918640598022638\n",
      "0.3715853715059161,0.056791389976798064\n",
      "0.48157666977391334,0.041157302756687004\n",
      "0.010385726716219179,0.09312154770001833\n",
      "0.17831643789743146,0.06302693960171986\n",
      "0.34133521356855623,0.0777456684057938\n",
      "0.3262696646622879,0.084161024458742\n",
      "0.48330486599685096,0.04885450016845642\n",
      "0.3718818265055237,0.05007717458101913\n",
      "0.34177223518967303,0.05820571557746886\n",
      "0.5137075982435044,0.05596613782642642\n",
      "0.440753799547314,0.05224540143593235\n",
      "0.534588667420512,0.02547307363084329\n",
      "0.48315062482608573,0.04645247808599366\n",
      "0.22748579483755837,0.06939203707230332\n",
      "0.14289483636677425,0.09069999375774482\n",
      "0.14057287971245425,0.06353145110076396\n",
      "0.17611608626041053,0.10329284124027549\n",
      "0.09720950953459673,0.07697853394975389\n",
      "0.2386732738070766,0.06165644517585962\n",
      "0.6045121800624167,0.0354908973783361\n",
      "0.29785453047903665,0.08428349275868123\n",
      "0.2001360787781139,0.03661442308520086\n",
      "0.3847995524105079,0.05214759763565217\n",
      "0.37006902427154575,0.041927713379734874\n",
      "0.2061574861015789,0.08045312130759096\n",
      "0.3981543685667097,0.04207376167397109\n"
     ]
    }
   ],
   "source": [
    "f1 = open('SVRreg_ct_cv100.csv', 'w')\n",
    "f1.write('r2'+','+'mse'+'\\n')\n",
    "\n",
    "for cv in range(100):\n",
    "    x_train, x_test, y_train, y_test=train_test_split(X,y,test_size=0.1, random_state=cv)\n",
    "    r2,mse = run_SVR_thread(x_train, x_test, y_train, y_test,cv)\n",
    "    print(str(r2) +','+ str(mse))\n",
    "    f1.write(str(r2) +','+ str(mse) +'\\n')\n",
    "    \n",
    "f1.close()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d48ab96a",
   "metadata": {},
   "source": [
    "# Save_model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "2c51ff42",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['CT_reg_SVR_seed33.pkl.z']"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x_train, x_test, y_train, y_test=train_test_split(X,y,test_size=0.1, random_state=33)\n",
    "model = SVR(C=1, kernel='rbf', gamma=0.1)\n",
    "model.fit(x_train, y_train)\n",
    "joblib.dump(model, 'CT_reg_SVR_seed33.pkl.z')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f5f703e3",
   "metadata": {},
   "source": [
    "# Prediction"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "ccafece0",
   "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('pred_oil_feature.txt', sep = '\\t')\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "1cfccb02",
   "metadata": {},
   "outputs": [],
   "source": [
    "X = df.drop(columns = ['Bench_code'])\n",
    "Name = df['Bench_code'].tolist()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "0e474aed",
   "metadata": {},
   "outputs": [],
   "source": [
    "#feature filter\n",
    "sorted_importances_ct_reg = pd.read_csv('oil_importance_features_ct_reg.csv')\n",
    "sorted_importances_ct_reg.dropna(inplace=True)\n",
    "df1 = sorted_importances_ct_reg[sorted_importances_ct_reg['Importance'] > 0.003]\n",
    "important_features_ct_reg = df1['CAS'].to_list()\n",
    "X1 = X[X.columns.intersection(important_features_ct_reg)]\n",
    "X1 = X1.applymap(set_to_one)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "529f0505",
   "metadata": {},
   "outputs": [],
   "source": [
    "#pred\n",
    "ct_reg_model = joblib.load('CT_reg_SVR_seed33.pkl.z')\n",
    "y_pred_ct_reg = ct_reg_model.predict(X1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "0d7410ba",
   "metadata": {},
   "outputs": [],
   "source": [
    "#save results\n",
    "df_p = pd.DataFrame({'ct_reg_pred': y_pred_ct_reg, 'Bench_code': Name})\n",
    "\n",
    "df_p.to_csv('oil_pred_ct_reg_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
}
