{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.12","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":59094,"databundleVersionId":7010844,"sourceType":"competition"},{"sourceId":7060649,"sourceType":"datasetVersion","datasetId":4064769},{"sourceId":152244448,"sourceType":"kernelVersion"},{"sourceId":152319571,"sourceType":"kernelVersion"},{"sourceId":152412144,"sourceType":"kernelVersion"},{"sourceId":152319216,"sourceType":"kernelVersion"},{"sourceId":152283320,"sourceType":"kernelVersion"},{"sourceId":152412259,"sourceType":"kernelVersion"},{"sourceId":152172888,"sourceType":"kernelVersion"}],"dockerImageVersionId":30580,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"from torch.nn import functional as F\nimport torch.optim as optim\nfrom torch.optim.lr_scheduler import ReduceLROnPlateau\nimport torch\nimport torch.nn as nn\nfrom torch.utils.data import DataLoader, Dataset\nfrom typing import *\n\nimport tensorflow.keras.backend as K\nimport tensorflow as tf\nfrom tensorflow.keras.layers import Input, Dense, Embedding, GaussianDropout, BatchNormalization, Concatenate, Flatten\nfrom tensorflow.keras.layers import GaussianNoise, Dropout\nfrom tensorflow.keras.layers.experimental.preprocessing import TextVectorization\nimport tensorflow_addons as tfa\nfrom sklearn.model_selection import StratifiedKFold, KFold, GroupKFold\nimport matplotlib.pyplot as plt\nimport warnings\nimport copy\nimport random\nimport os\nimport gc\nfrom sklearn.linear_model import Ridge, LinearRegression\nfrom sklearn.model_selection import KFold\nimport numpy as np\nimport pandas as pd\nfrom sklearn.preprocessing import MinMaxScaler\nfrom sklearn.preprocessing import QuantileTransformer\nfrom sklearn.preprocessing import LabelEncoder, OneHotEncoder\nfrom sklearn.decomposition import TruncatedSVD, PCA\nfrom sklearn.preprocessing import StandardScaler\nimport category_encoders as ce\nfrom sklearn.manifold import TSNE\nfrom sklearn.metrics import mean_absolute_error, r2_score\nfrom tqdm import tqdm\nfrom sklearn.feature_extraction.text import TfidfVectorizer, HashingVectorizer\nimport scipy\nfrom glob import glob\n\nSEED = 42\nTSVD_SIZE = 50\nPCA_SIZE = 50\nLABELS_TSVD_SIZE = 768\n\ntqdm.pandas()\nwarnings.filterwarnings(\"ignore\")","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2023-11-26T23:35:39.242854Z","iopub.execute_input":"2023-11-26T23:35:39.243244Z","iopub.status.idle":"2023-11-26T23:35:39.256977Z","shell.execute_reply.started":"2023-11-26T23:35:39.243213Z","shell.execute_reply":"2023-11-26T23:35:39.254972Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import numpy as np\n\ndef mrrmse(y_true: np.ndarray, y_pred: np.ndarray) -> float:\n    \"\"\"\n    Calculate Mean Rowwise Root Mean Squared Error.\n\n    Parameters:\n    - y_true (np.ndarray): The ground truth values.\n    - y_pred (np.ndarray): The predicted values.\n\n    Returns:\n    - float: Mean Rowwise Root Mean Squared Error.\n    \"\"\"\n    colwise_mse = np.mean((y_true - y_pred)**2, axis=1)\n    mean_rowwise_root_mse = np.mean(np.sqrt(colwise_mse))\n\n    return mean_rowwise_root_mse","metadata":{"execution":{"iopub.status.busy":"2023-11-26T23:35:40.425441Z","iopub.execute_input":"2023-11-26T23:35:40.426116Z","iopub.status.idle":"2023-11-26T23:35:40.431548Z","shell.execute_reply.started":"2023-11-26T23:35:40.426082Z","shell.execute_reply":"2023-11-26T23:35:40.430426Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df = pd.read_parquet(\"/kaggle/input/open-problems-single-cell-perturbations/de_train.parquet\")\ndf.drop([\"control\"], axis=1, inplace=True)\n\nx_train = df.iloc[:, :4]\ny_train = df.iloc[:, 4:]\ny_train = y_train.values\n\ndel df\ngc.collect()","metadata":{"execution":{"iopub.status.busy":"2023-11-26T23:35:43.482222Z","iopub.execute_input":"2023-11-26T23:35:43.483782Z","iopub.status.idle":"2023-11-26T23:35:45.115981Z","shell.execute_reply.started":"2023-11-26T23:35:43.483706Z","shell.execute_reply":"2023-11-26T23:35:45.114684Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"blend_oof = []\npaths = []\nfor path in glob(\"/kaggle/input/*/*.npy\"):\n    if \"oof\" in path and \"blend\" not in path:\n        blend_oof.append(\n            np.load(path)\n        )\n        paths.append(path)\n        \nblend_oof = np.mean(blend_oof, axis=0)\nblend_oof.shape","metadata":{"execution":{"iopub.status.busy":"2023-11-26T23:36:48.863946Z","iopub.execute_input":"2023-11-26T23:36:48.864322Z","iopub.status.idle":"2023-11-26T23:36:49.305143Z","shell.execute_reply.started":"2023-11-26T23:36:48.864294Z","shell.execute_reply":"2023-11-26T23:36:49.304146Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"paths","metadata":{"execution":{"iopub.status.busy":"2023-11-26T23:36:50.214113Z","iopub.execute_input":"2023-11-26T23:36:50.214509Z","iopub.status.idle":"2023-11-26T23:36:50.222221Z","shell.execute_reply.started":"2023-11-26T23:36:50.214478Z","shell.execute_reply":"2023-11-26T23:36:50.220559Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"scores = dict(\n    fold = [],\n    corr_rows = [],\n    corr_cols = [],\n    MAE = [],\n    MRRMSE = [],\n    R2 = []\n)\n\n# Save metrics\nlist_corr_rows_fold = [np.corrcoef(y_train[i,:], blend_oof[i,:])[0,1] for i in range(blend_oof.shape[0])]\nlist_corr_columns_fold = [np.corrcoef(y_train[:,i], blend_oof[:,i])[0,1] for i in range(blend_oof.shape[1])]\n\nscores[\"fold\"].append(\"all\")\nscores[\"corr_rows\"].append(np.nanmean(list_corr_rows_fold))\nscores[\"corr_cols\"].append(np.nanmean(list_corr_columns_fold))\nscores[\"MAE\"].append(\n    mean_absolute_error(\n        y_train,\n        blend_oof\n    )\n)\nscores[\"MRRMSE\"].append(\n    mrrmse(\n        y_train,\n        blend_oof\n    )\n)\nscores[\"R2\"].append(\n            r2_score(\n                y_train,\n                blend_oof\n            )\n        )\n\ndisplay(pd.DataFrame(scores))","metadata":{"execution":{"iopub.status.busy":"2023-11-26T23:35:46.332054Z","iopub.execute_input":"2023-11-26T23:35:46.332722Z","iopub.status.idle":"2023-11-26T23:35:48.372491Z","shell.execute_reply.started":"2023-11-26T23:35:46.332693Z","shell.execute_reply":"2023-11-26T23:35:48.371232Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"blend_oof","metadata":{"execution":{"iopub.status.busy":"2023-11-26T23:35:48.374944Z","iopub.execute_input":"2023-11-26T23:35:48.375508Z","iopub.status.idle":"2023-11-26T23:35:48.385624Z","shell.execute_reply.started":"2023-11-26T23:35:48.375448Z","shell.execute_reply":"2023-11-26T23:35:48.383569Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"y_train","metadata":{"execution":{"iopub.status.busy":"2023-11-26T23:35:48.388347Z","iopub.execute_input":"2023-11-26T23:35:48.388732Z","iopub.status.idle":"2023-11-26T23:35:48.399961Z","shell.execute_reply.started":"2023-11-26T23:35:48.388700Z","shell.execute_reply":"2023-11-26T23:35:48.397968Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"y_train.mean(), blend_oof.mean()","metadata":{"execution":{"iopub.status.busy":"2023-11-26T23:37:58.951689Z","iopub.execute_input":"2023-11-26T23:37:58.952090Z","iopub.status.idle":"2023-11-26T23:37:58.970309Z","shell.execute_reply.started":"2023-11-26T23:37:58.952065Z","shell.execute_reply":"2023-11-26T23:37:58.969475Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Submission","metadata":{}},{"cell_type":"code","source":"sub = pd.read_csv(\"/kaggle/input/open-problems-single-cell-perturbations/sample_submission.csv\")\nsub","metadata":{"execution":{"iopub.status.busy":"2023-11-26T23:46:35.029639Z","iopub.execute_input":"2023-11-26T23:46:35.031115Z","iopub.status.idle":"2023-11-26T23:46:37.933925Z","shell.execute_reply.started":"2023-11-26T23:46:35.031072Z","shell.execute_reply":"2023-11-26T23:46:37.932299Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"subs = {\n    \"/kaggle/input/scp-lstm/submission.csv\": 0.15,\n    \"/kaggle/input/scp-ct-stratified-tf-smilesvec/submission.csv\": 0.15,\n    \"/kaggle/input/scp-ct-stratifed-pt-tf-smilesvec-reversed/submission.csv\": 0.07,\n    \"/kaggle/input/scp-ct-stratified-mrrmse-tf-smilesv-reversed/submission.csv\": 0.2,\n    \"/kaggle/input/scp-ct-stratified-mrrmse-tf-smilesv-reversed-sigm/submission.csv\": 0.15,\n    \"/kaggle/input/scp-ct-stratified-mrrmse-loss-tf-smilesvec/submission.csv\": 0.2,\n    \"/kaggle/input/scp-ct-stratifed-pt-tf-smilesvec/submission.csv\": 0.08,\n}\nfor path, coef in subs.items():\n    sub_ = pd.read_csv(path)\n    sub.iloc[:, 1:] = sub.iloc[:, 1:] + sub_.iloc[:, 1:] * coef\n\n# sub.iloc[:, 1:] = sub.iloc[:, 1:] * 1.3\nsub","metadata":{"execution":{"iopub.status.busy":"2023-11-26T23:48:33.223495Z","iopub.execute_input":"2023-11-26T23:48:33.223896Z","iopub.status.idle":"2023-11-26T23:49:09.520782Z","shell.execute_reply.started":"2023-11-26T23:48:33.223871Z","shell.execute_reply":"2023-11-26T23:49:09.518888Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sub.to_csv(\"submission.csv\", index=False)","metadata":{"trusted":true},"execution_count":null,"outputs":[]}]}