{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "018b8bb1",
   "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": "9c7a2f64",
   "metadata": {},
   "source": [
    "# load_data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "00b1ba5b",
   "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": "9845f21d",
   "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": "ce0b0672",
   "metadata": {},
   "outputs": [],
   "source": [
    "X = df.drop(columns=['Bench_code', 'activity', 'cell_toxicity'])\n",
    "X = X.applymap(set_to_one)\n",
    "y = df.activity"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c4961ad4",
   "metadata": {},
   "source": [
    "# Feature_filter"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "73b86a63",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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Rz+qP/OZz5j3P//889q2bf0f/+N/1IcPH9af+9znum7R7e3t1d/4xjf0Sy+9pN///vevii26y30f5ubm9IEDB/Q3v/lNDUB/5Stf0QcOHNAXL1687tf3eiz3PfB9Xz/yyCN67dq1+uDBg0u2pHU6nRtyjX+X5b4H9Xpd/+t//a/1iy++qE+fPq1/8IMf6H/8j/+x9jxPv/zyyzfkGv8uK/H/hcutht0xy30farWa/pf/8l/qF198UZ86dUo/++yz+q677tK33nqrbrfbN+Qa/y4r8bfw1FNPacdx9J/8yZ/o48eP6z/8wz/UlmXp55577rpf3+uxUv9/qFQqOpfL6T/+4z++rtfzel23IkRrrf/wD/9Q33TTTdp1XX3PPffo733ve+Zn9913n/7Yxz625P3//b//d33bbbdp13X11q1b9Te/+c0lP1dK6c9+9rN6eHhYe56n3/Oe9+ijR49ej0u5Jst9H770pS9pAD/z9bnPfe46XM3VWc57EG9N7vb1f/7P/7lOV5Tcct6DVqulf+mXfkmPjY1p13X16OiofuSRR/TevXuv1+VcleX+/8LlVkMRovXy3odms6kffPBBPTg4qB3H0evXr9ef+MQnzH/M3qhW4m/h8ccf15s2bdKZTEbfeeed+utf//pKX8Y1WYl78F//63/V2WxWLywsrPTHvypCa61vzBwMERERpRnPjiEiIqIbgkUIERER3RAsQoiIiOiGYBFCRERENwSLECIiIrohWIQQERHRDcEihIiIiG4IFiFERER0Q7AIISIiohuCRQgRERHdECxCiIiI6Ib4/wE3w/H+qfd16gAAAABJRU5ErkJggg==",
      "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_sAg_reg.csv', index=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "8bd3ecdb",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "59"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "###threshold selection\n",
    "df_f = sorted_importances[sorted_importances[\"Importance\"] > 0.0038]\n",
    "important_features = df_f['CAS'].to_list()\n",
    "len(important_features)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "f6b587e4",
   "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>000084-66-2</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>000140-11-4</th>\n",
       "      <th>000470-82-6</th>\n",
       "      <th>...</th>\n",
       "      <th>038230-60-3</th>\n",
       "      <th>061233-78-1</th>\n",
       "      <th>061847-19-6</th>\n",
       "      <th>066512-56-9</th>\n",
       "      <th>081944-08-3</th>\n",
       "      <th>1000188-66-5</th>\n",
       "      <th>1000293-04-2</th>\n",
       "      <th>1000360-33-0</th>\n",
       "      <th>1000411-59-6</th>\n",
       "      <th>212394-95-1</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>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>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>1.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</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>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>...</td>\n",
       "      <td>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>1.0</td>\n",
       "      <td>0.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>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\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>1.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>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>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>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>1.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>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>270</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>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>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>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>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>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>273</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>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>274 rows × 59 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "     000078-70-6  000084-66-2  000099-83-2  000099-85-4  000099-87-6  \\\n",
       "0            1.0          0.0          0.0          1.0          0.0   \n",
       "1            1.0          0.0          0.0          1.0          1.0   \n",
       "2            0.0          0.0          0.0          0.0          0.0   \n",
       "3            0.0          0.0          1.0          1.0          1.0   \n",
       "4            1.0          0.0          1.0          1.0          0.0   \n",
       "..           ...          ...          ...          ...          ...   \n",
       "269          1.0          0.0          0.0          0.0          0.0   \n",
       "270          0.0          0.0          1.0          0.0          1.0   \n",
       "271          0.0          0.0          0.0          0.0          0.0   \n",
       "272          1.0          0.0          1.0          0.0          0.0   \n",
       "273          1.0          0.0          1.0          1.0          0.0   \n",
       "\n",
       "     000104-55-2  000112-31-2  000123-35-3  000140-11-4  000470-82-6  ...  \\\n",
       "0            0.0          0.0          1.0          0.0          1.0  ...   \n",
       "1            0.0          0.0          1.0          0.0          1.0  ...   \n",
       "2            0.0          0.0          0.0          0.0          0.0  ...   \n",
       "3            0.0          0.0          1.0          0.0          0.0  ...   \n",
       "4            0.0          0.0          1.0          0.0          1.0  ...   \n",
       "..           ...          ...          ...          ...          ...  ...   \n",
       "269          0.0          0.0          1.0          0.0          0.0  ...   \n",
       "270          0.0          0.0          1.0          0.0          0.0  ...   \n",
       "271          0.0          0.0          0.0          0.0          0.0  ...   \n",
       "272          0.0          1.0          1.0          0.0          0.0  ...   \n",
       "273          0.0          1.0          1.0          0.0          1.0  ...   \n",
       "\n",
       "     038230-60-3  061233-78-1  061847-19-6  066512-56-9  081944-08-3  \\\n",
       "0            0.0          0.0          0.0          0.0          0.0   \n",
       "1            0.0          0.0          0.0          0.0          0.0   \n",
       "2            0.0          0.0          0.0          0.0          0.0   \n",
       "3            0.0          0.0          0.0          0.0          0.0   \n",
       "4            0.0          0.0          0.0          0.0          0.0   \n",
       "..           ...          ...          ...          ...          ...   \n",
       "269          0.0          0.0          0.0          0.0          0.0   \n",
       "270          0.0          0.0          0.0          0.0          0.0   \n",
       "271          0.0          0.0          0.0          0.0          0.0   \n",
       "272          0.0          0.0          0.0          0.0          0.0   \n",
       "273          0.0          0.0          0.0          0.0          0.0   \n",
       "\n",
       "     1000188-66-5  1000293-04-2  1000360-33-0  1000411-59-6  212394-95-1  \n",
       "0             0.0           0.0           0.0           1.0          0.0  \n",
       "1             0.0           0.0           1.0           1.0          0.0  \n",
       "2             0.0           0.0           0.0           0.0          1.0  \n",
       "3             0.0           0.0           1.0           0.0          0.0  \n",
       "4             0.0           0.0           1.0           1.0          1.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",
       "[274 rows x 59 columns]"
      ]
     },
     "execution_count": 9,
     "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": "7e823882",
   "metadata": {},
   "source": [
    "# Tuning_parameters"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "b33882d4",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best parameters:  {'C': 40, 'gamma': 0.01, 'kernel': 'rbf'}\n",
      "Best score:  0.21540177443675507\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": 11,
   "id": "79219a56",
   "metadata": {},
   "outputs": [],
   "source": [
    "def run_SVR_thread(x_train,x_test,y_train,y_test,cv):\n",
    "    clf = SVR(C=40, kernel='rbf', gamma=0.01)\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": 12,
   "id": "f4d2c0eb",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.19688691239478273,0.13392218432057348\n",
      "0.3317207214192971,0.08784886651748307\n",
      "0.3887436977492912,0.10924284690425187\n",
      "0.22413502764045357,0.1980674366346922\n",
      "-0.11433256560506622,0.13352166469796467\n",
      "0.32900921317259346,0.17944218544584564\n",
      "0.3106455090698024,0.13303829810927487\n",
      "0.5848436304310343,0.091111297119424\n",
      "0.24401524846242173,0.18129700322887204\n",
      "0.41501751957562993,0.11397782158648609\n",
      "0.713933353465162,0.04134507466482099\n",
      "0.31943135811453593,0.15588840375378563\n",
      "0.20251347738451098,0.14155802170173276\n",
      "0.3125510016748394,0.10936739287816466\n",
      "0.2781915247294272,0.09872754448875844\n",
      "0.3709411721288083,0.11110717526746479\n",
      "0.3671832266286359,0.10752694679224864\n",
      "-0.019918920042478527,0.1398721217054851\n",
      "-0.8822632298287034,0.19171366457432187\n",
      "0.27584093554675726,0.10191066406204079\n",
      "0.00973507542084362,0.11895472526656438\n",
      "0.06805023197348559,0.14065134606857146\n",
      "0.28193194947253,0.11083767512142721\n",
      "-0.012897552531937695,0.12822291822449355\n",
      "0.6311643943447436,0.05595290801911578\n",
      "0.24515790269222926,0.10437372192912599\n",
      "0.3922376599600552,0.15270499731796439\n",
      "0.543123042820274,0.08436485566043865\n",
      "0.18081931769134563,0.10620914683061984\n",
      "0.16327071669766813,0.10213227772883718\n",
      "0.6810057742627444,0.05629636258220162\n",
      "0.28645901472861046,0.08370668707118245\n",
      "-0.1696587488907768,0.1382407501314786\n",
      "0.12622048891037319,0.1297843554301093\n",
      "0.47331905680410413,0.08625043479270074\n",
      "0.5810947402715914,0.07224128495057418\n",
      "0.05843251496330759,0.15718285838142926\n",
      "0.07029981852139233,0.15499717972234744\n",
      "0.664333909690205,0.047566858064395534\n",
      "0.44003947100887353,0.09546920762221041\n",
      "0.5960478457890517,0.04915594792021842\n",
      "0.09853553540569548,0.22449152544350542\n",
      "0.06724115780319684,0.11440069595472059\n",
      "0.1840273623499752,0.06401145259404441\n",
      "0.30469571499093817,0.0867801977893765\n",
      "-0.23821470442174286,0.16929381096870796\n",
      "0.5017219469001517,0.06852037598148022\n",
      "0.33327484798866935,0.14363544713975718\n",
      "0.24067923016221182,0.07906169462385604\n",
      "0.5320442066731832,0.06719060411207443\n",
      "0.31603028471106576,0.09165904937584789\n",
      "-0.00030786572278973523,0.13029403311900306\n",
      "0.5361237977120135,0.09093225083904588\n",
      "0.0717552412729423,0.1732145638329156\n",
      "0.24843356865351696,0.15128109197549675\n",
      "-1.0243060583630932,0.1855140042572448\n",
      "0.25607723013697636,0.08895253080532693\n",
      "0.42006354983296346,0.0969868637699245\n",
      "0.2624941320440375,0.14758377048561852\n",
      "0.6540061569122589,0.08506522618263254\n",
      "0.17355650665143474,0.12493620680839701\n",
      "0.4219059338432456,0.12378406378844331\n",
      "0.4046882627295669,0.07781759747392121\n",
      "0.08691573444896339,0.11476122302220013\n",
      "-0.19226564534589663,0.2282909419223565\n",
      "0.0003761083259503639,0.146455216401814\n",
      "0.18609649167186426,0.13157543664230711\n",
      "0.5894648544202898,0.05880108590423507\n",
      "-0.008937090672018089,0.09970677050768986\n",
      "0.2649397214461925,0.1042563623463693\n",
      "0.08271891414569477,0.09370622875707947\n",
      "0.5763634726998084,0.04440131578763928\n",
      "0.3724927316363845,0.13582142540196035\n",
      "-0.009102684290364316,0.1893916083024218\n",
      "0.3436345623305721,0.09926219453359557\n",
      "0.3846578730360627,0.10524268841441667\n",
      "0.061221206791089666,0.1153032139469297\n",
      "-0.4994182986461022,0.16012170199803974\n",
      "0.22268959742045458,0.1223951336789331\n",
      "0.16501905056054678,0.1718299457254783\n",
      "0.6119734556809246,0.07652150865632745\n",
      "0.12164440511356478,0.12717250305919447\n",
      "0.5560549731273212,0.07635436478984822\n",
      "0.5962005994427823,0.07929832282194683\n",
      "0.14791234358673067,0.1721684801214771\n",
      "0.13769518864198116,0.12474458971633381\n",
      "0.3850489879868667,0.14049664271576603\n",
      "0.27423835542886743,0.142228615717683\n",
      "0.18155616730487256,0.1270681820654318\n",
      "0.312970884285641,0.12025316242783546\n",
      "-0.04215673891953964,0.1958489787269319\n",
      "0.4030574140287768,0.07811572279434349\n",
      "0.045088723185673585,0.10415647594517341\n",
      "0.44969293129253274,0.09598575148991272\n",
      "0.45024528952639065,0.13269287800717433\n",
      "0.3346667117186676,0.04775008327177998\n",
      "0.6744003661362243,0.05406890575471115\n",
      "0.1335899518813517,0.11567208478312041\n",
      "0.38199141456733987,0.13343107663435666\n",
      "0.514114829006795,0.08236906906198763\n"
     ]
    }
   ],
   "source": [
    "f1 = open('SVRreg_sAg_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": "26c25276",
   "metadata": {},
   "source": [
    "# Save_model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "a09d43b7",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['sAg_reg_SVR_seed96.pkl.z']"
      ]
     },
     "execution_count": 13,
     "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=96)\n",
    "model = SVR(C=40, kernel='rbf', gamma=0.01)\n",
    "model.fit(x_train, y_train)\n",
    "joblib.dump(model, 'sAg_reg_SVR_seed96.pkl.z')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "276a4743",
   "metadata": {},
   "source": [
    "# Prediction"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "767fff51",
   "metadata": {
    "scrolled": true
   },
   "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": 14,
     "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": 15,
   "id": "b9c54023",
   "metadata": {},
   "outputs": [],
   "source": [
    "X = df.drop(columns = ['Bench_code'])\n",
    "Name = df['Bench_code'].tolist()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "8a8ff65f",
   "metadata": {},
   "outputs": [],
   "source": [
    "#feature filter\n",
    "sorted_importances_sAg_reg = pd.read_csv('oil_importance_features_sAg_reg.csv')\n",
    "sorted_importances_sAg_reg.dropna(inplace=True)\n",
    "df1 = sorted_importances_sAg_reg[sorted_importances_sAg_reg['Importance'] > 0.0038]\n",
    "important_features_sAg_reg = df1['CAS'].to_list()\n",
    "X1 = X[X.columns.intersection(important_features_sAg_reg)]\n",
    "X1 = X1.applymap(set_to_one)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "8d55426a",
   "metadata": {},
   "outputs": [],
   "source": [
    "#pred\n",
    "sAg_reg_model = joblib.load('sAg_reg_SVR_seed96.pkl.z')\n",
    "y_pred_sAg_reg = sAg_reg_model.predict(X1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "95e5ccff",
   "metadata": {},
   "outputs": [],
   "source": [
    "#save results\n",
    "df_p = pd.DataFrame({'sAg_reg_pred': y_pred_sAg_reg, 'Bench_code': Name})\n",
    "\n",
    "df_p.to_csv('oil_pred_sAg_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
}
