{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import os, gc, pickle, datetime, scipy.sparse\nimport pandas as pd\nimport matplotlib.pyplot as plt\nimport numpy as np\nfrom colorama import Fore, Back, Style\n\nfrom sklearn.model_selection import GroupKFold, train_test_split, KFold\nfrom sklearn.preprocessing import StandardScaler, scale, MinMaxScaler\nfrom sklearn.decomposition import TruncatedSVD, PCA\n\nfrom sklearn.linear_model import Ridge, RidgeCV\n\nfrom tqdm import tqdm\n\nDATA_DIR = \"/kaggle/input/open-problems-multimodal/\"\nFP_CELL_METADATA = os.path.join(DATA_DIR,\"metadata.csv\")\n\nFP_CITE_TRAIN_INPUTS = os.path.join(DATA_DIR,\"train_cite_inputs.h5\")\nFP_CITE_TRAIN_TARGETS = os.path.join(DATA_DIR,\"train_cite_targets.h5\")\nFP_CITE_TEST_INPUTS = os.path.join(DATA_DIR,\"test_cite_inputs.h5\")\n\nFP_MULTIOME_TRAIN_INPUTS = os.path.join(DATA_DIR,\"train_multi_inputs.h5\")\nFP_MULTIOME_TRAIN_TARGETS = os.path.join(DATA_DIR,\"train_multi_targets.h5\")\nFP_MULTIOME_TEST_INPUTS = os.path.join(DATA_DIR,\"test_multi_inputs.h5\")\n\nFP_SUBMISSION = os.path.join(DATA_DIR,\"sample_submission.csv\")\nFP_EVALUATION_IDS = os.path.join(DATA_DIR,\"evaluation_ids.csv\")","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def correlation_score(y_true, y_pred, sample_weight=None):\n    \"\"\"Scores the predictions according to the competition rules. \n    \n    It is assumed that the predictions are not constant.\n    \n    Returns the average of each sample's Pearson correlation coefficient\"\"\"\n    if type(y_true) == pd.DataFrame: y_true = y_true.values\n    if type(y_pred) == pd.DataFrame: y_pred = y_pred.values\n    corrsum = 0\n    for i in range(len(y_true)):\n        corrsum += np.corrcoef(y_true[i], y_pred[i])[1, 0]\n    return corrsum / len(y_true)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"ROWS2READ = 70988\nPCA_NUM = 200","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"%%time\nX = pd.read_hdf(FP_CITE_TRAIN_INPUTS, stop = ROWS2READ)\ntrain_index = X.index\nreducer = PCA(n_components=PCA_NUM, random_state=1)\nX = reducer.fit_transform(X)\nX.shape","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X = pd.DataFrame(X)\ncol_prefix = 'PCA_'\nfor j in range(len(X.columns)):\n    X.rename(columns = {X.columns[j]:(col_prefix + str(j))}, inplace = True)\nX","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"Y = pd.read_hdf(FP_CITE_TRAIN_TARGETS, stop = ROWS2READ)\ny_columns = list(Y.columns)\nY = Y.values\nY -= Y.mean(axis=1).reshape(-1, 1)\nY /= Y.std(axis=1).reshape(-1, 1)\nY.shape","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.inspection import permutation_importance","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"%%time\nmodel = RidgeCV(alphas=(1e-3,1e-2,1e-1,1,1e1,1e2,1e3,1e4,1e5,1e6), cv = None, alpha_per_target=True)\n\nN_SPLITS = 10\n\nkf = KFold(n_splits=N_SPLITS, shuffle=True, random_state=42)\n\nscore_list = []\n\nfor fold, (idx_tr, idx_va) in enumerate(kf.split(X)):\n    \n    fi_avg = np.zeros(200)\n    \n    X_train = X.iloc[idx_tr]\n    y_train = Y[idx_tr]\n    X_val = X.iloc[idx_va]\n    y_val = Y[idx_va]\n    \n    model.fit(X_train, y_train)\n    \n    fi = permutation_importance(model, X_val, y_val, n_repeats=10, random_state=0, n_jobs=4)\n    \n    fi_avg += fi['importances_mean']\n\n    del X_train, X_val, y_train, y_val\n    gc.collect()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"my_imps = pd.DataFrame(fi_avg, index = X.columns, columns = ['mean_imp'])\nmy_imps = my_imps.sort_values('mean_imp', ascending = False)\nmy_imps.mean_imp /= my_imps.mean_imp[0]\nmy_imps","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"my_imps.to_csv('my_imps.csv')","metadata":{"trusted":true},"execution_count":null,"outputs":[]}]}