{"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":"\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input/open-problems-single-cell-perturbations'):\n    de_train_path=os.path.join(dirname,\"de_train.parquet\");\n   ","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2023-10-17T10:51:11.906622Z","iopub.execute_input":"2023-10-17T10:51:11.907159Z","iopub.status.idle":"2023-10-17T10:51:11.918892Z","shell.execute_reply.started":"2023-10-17T10:51:11.907129Z","shell.execute_reply":"2023-10-17T10:51:11.917876Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\n    de_train=pd.read_parquet(de_train_path);\n   \n    features_columns = [\"cell_type\",\"sm_name\"]\n    labels_drop_columns = [\"sm_lincs_id\",\"SMILES\",\"control\"]\n    labels_drop_columns.extend(features_columns)\n    features = pd.DataFrame(de_train,columns=features_columns)\n    smiles = de_train[\"SMILES\"]\n    labels = de_train.drop(labels_drop_columns,axis=1)\n   \n  \n    \n    cell_types=features.iloc[:,0:1].values.ravel()\n    sn_names=features.iloc[:,1:2].values.ravel();\n\n    \n    groupby_sm_name_true_false={\n        v:0 for v in sn_names\n    }\n    \n    for i,v in enumerate(smiles.values.ravel()):\n        sm_name=sn_names[i];\n        key=\"true\"\n     \n        if v != True:\n            key=\"false\"\n            \n        groupby_sm_name_true_false[sm_name] = v\n    map_smiles={v:i for (i,v) in enumerate(smiles.unique())}\n    for v,s in groupby_sm_name_true_false.items():\n        groupby_sm_name_true_false[v]=map_smiles[s]\n  \n    ","metadata":{"execution":{"iopub.status.busy":"2023-10-17T10:51:13.327984Z","iopub.execute_input":"2023-10-17T10:51:13.329066Z","iopub.status.idle":"2023-10-17T10:51:14.886904Z","shell.execute_reply.started":"2023-10-17T10:51:13.329030Z","shell.execute_reply":"2023-10-17T10:51:14.885975Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import tensorflow as tf\nfrom tensorflow import keras\n\nunique_cell_types=np.unique(cell_types)\nunique_sm_names=np.unique(sn_names)\n\ndef map_to_categorical(map_data,data):\n    copy_data=np.array(data,copy=True)\n    for i in range(0,len(data)):\n        copy_data[i]=map_data[copy_data[i]]\n   \n    return keras.utils.to_categorical(copy_data.ravel(),num_classes=len(map_data.values()));\n\nmap_cell_types={v:i for (i,v) in enumerate(unique_cell_types)}\nmap_sm_names={v:i for (i,v) in enumerate(unique_sm_names)}\n\none_hot_cell_types=map_to_categorical(map_cell_types,cell_types);\none_hot_sm_names=map_to_categorical(map_sm_names,sn_names)\none_hotted_features=[]\n\nfor i in range(0,len(one_hot_sm_names)):\n    \n   joined=[]\n   joined.extend(one_hot_cell_types[i])\n   joined.extend(one_hot_sm_names[i]) \n   onehot=keras.utils.to_categorical(groupby_sm_name_true_false[sn_names[i]],num_classes=len(unique_sm_names))\n   joined.extend([v for v in onehot]) \n   one_hotted_features.append(joined)\n\nX=np.array(one_hotted_features)\nY=labels\n\n\n\n\n","metadata":{"execution":{"iopub.status.busy":"2023-10-17T10:51:18.442375Z","iopub.execute_input":"2023-10-17T10:51:18.442819Z","iopub.status.idle":"2023-10-17T10:51:18.505278Z","shell.execute_reply.started":"2023-10-17T10:51:18.442789Z","shell.execute_reply":"2023-10-17T10:51:18.503922Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import matplotlib.pyplot as plt\ndef plot_history(history,epochs):\n    x_range=range(epochs);\n    plt.plot(x_range,history[\"mean_rowwise_rmse\"],x_range,history[\"val_mean_rowwise_rmse\"])\n    \n    plt.show();\n    ","metadata":{"execution":{"iopub.status.busy":"2023-10-17T10:51:22.504232Z","iopub.execute_input":"2023-10-17T10:51:22.504614Z","iopub.status.idle":"2023-10-17T10:51:22.510507Z","shell.execute_reply.started":"2023-10-17T10:51:22.504582Z","shell.execute_reply":"2023-10-17T10:51:22.509106Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.model_selection import (train_test_split)\nfrom sklearn.model_selection import KFold\n\n\n\ndef mean_rowwise_rmse(y_true,y_pred):\n    rmse_per_row = tf.sqrt(tf.reduce_mean(tf.square(y_true - y_pred),axis=1))\n    return tf.reduce_mean(rmse_per_row)\n\ndef create_layers():\n    return keras.Sequential([\n        keras.layers.Dense(512, input_shape=(298,)),\n        keras.layers.BatchNormalization(),\n        keras.layers.Dense(256, activation='relu'),\n        keras.layers.Dense(128, activation='relu'),\n        keras.layers.BatchNormalization(),\n        keras.layers.Dense(64, activation='relu'),\n        keras.layers.BatchNormalization(),\n        keras.layers.Dense(32, activation='relu'),\n        keras.layers.Dense(16, activation='relu'),\n        keras.layers.Dense(len(labels.values[0]), activation='linear')\n    ])\n\nmodel=create_layers();\nmodelv = 0;\nscores = []\n\nfor train_index, test_index in KFold(5).split(X):\n x_train, x_test = X[train_index], X[test_index]\n y_train, y_test = Y.values[train_index], Y.values[test_index]\n\n\n           \n#x_train, x_test, y_train, y_test = train_test_split(X, Y, test_size=0.3,shuffle=False,random_state=0);\n#x_v, x_t, y_v, y_t = train_test_split(x_test, y_test, test_size=0.5,shuffle=True,random_state=21);\n print(\"x_train {0} x_test {1} y_train {2} y_test {3}\".format(x_train.shape,x_test.shape,y_train.shape,y_test.shape))\n\n model.compile(\n        optimizer=tf.keras.optimizers.Adam(),\n        loss=tf.losses.MeanAbsoluteError(),\n        metrics=[mean_rowwise_rmse])\n epochs=400;\n    \n checkpoint=tf.keras.callbacks.ModelCheckpoint(\n        filepath=\"model\"+str(modelv)+\".ckpt\",\n        save_weights_only=True,\n        monitor=\"val_mean_rowwise_rmse\",\n        mode=\"min\",\n        save_best_only=True,\n        verbose=0\n    )\n\n modelv += 1;\n\n history=model.fit(\n            x_train,\n            y_train,\n            epochs=epochs,\n            steps_per_epoch=((len(x_train)) // 32),\n            batch_size=32,\n            verbose=0,\n            validation_data=(x_test,y_test),\n\n callbacks=[checkpoint]);\n plot_history(history.history,epochs);\n\n scores.append(checkpoint.best)\n\n print(\"Test result score => \",checkpoint.best)\nprint(tf.argmin(scores))\n\n\n","metadata":{"execution":{"iopub.status.busy":"2023-10-17T11:09:28.033830Z","iopub.execute_input":"2023-10-17T11:09:28.034202Z","iopub.status.idle":"2023-10-17T11:17:35.862341Z","shell.execute_reply.started":"2023-10-17T11:09:28.034173Z","shell.execute_reply":"2023-10-17T11:17:35.861286Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Testing With Saved Checkpoint**","metadata":{}},{"cell_type":"code","source":"model.load_weights(\"model3.ckpt\")\n\nprint(mean_rowwise_rmse(Y.values,model.predict(X)))","metadata":{"execution":{"iopub.status.busy":"2023-10-17T11:07:31.799594Z","iopub.execute_input":"2023-10-17T11:07:31.799987Z","iopub.status.idle":"2023-10-17T11:07:32.457482Z","shell.execute_reply.started":"2023-10-17T11:07:31.799951Z","shell.execute_reply":"2023-10-17T11:07:32.456401Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn import linear_model\nclf = linear_model.Lasso(alpha=0.002)\n\n\nclf.fit(x_train, y_train)\n\n\nresults=clf.predict(x_test)\n\nprint(mean_rowwise_rmse(y_test,results),tf.losses.MeanAbsoluteError()(y_test,results))\n\n","metadata":{"execution":{"iopub.status.busy":"2023-10-17T10:17:23.056783Z","iopub.execute_input":"2023-10-17T10:17:23.057422Z","iopub.status.idle":"2023-10-17T10:17:56.704750Z","shell.execute_reply.started":"2023-10-17T10:17:23.057386Z","shell.execute_reply":"2023-10-17T10:17:56.703643Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.ensemble import RandomForestRegressor\n\n\nregr = RandomForestRegressor(max_depth=13, random_state=0)\n\nregr.fit(x_train, y_train)\npred_random_forest=regr.predict(x_test);\nprint(mean_rowwise_rmse(y_test,pred_random_forest),tf.losses.MeanAbsoluteError()(y_test,pred_random_forest))\n\n","metadata":{"execution":{"iopub.status.busy":"2023-10-17T10:17:56.706379Z","iopub.execute_input":"2023-10-17T10:17:56.707061Z","iopub.status.idle":"2023-10-17T10:18:02.788531Z","shell.execute_reply.started":"2023-10-17T10:17:56.707021Z","shell.execute_reply":"2023-10-17T10:18:02.786904Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.svm import LinearSVR\nfrom sklearn.multioutput import MultiOutputRegressor\n\n\n\n\nlinear = LinearSVR(epsilon=0.1, max_iter=20000)\nlinear_regs=MultiOutputRegressor(linear)\nlinear_regs.fit(x_train, y_train)\npred_linear_svr=linear_regs.predict(x_test);\nprint(mean_rowwise_rmse(y_test,pred_linear_svr),tf.losses.MeanAbsoluteError()(y_test,pred_linear_svr))\n\n                \n","metadata":{"execution":{"iopub.status.busy":"2023-10-17T10:18:02.789322Z","iopub.status.idle":"2023-10-17T10:18:02.789693Z","shell.execute_reply.started":"2023-10-17T10:18:02.789513Z","shell.execute_reply":"2023-10-17T10:18:02.789529Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sample_submission=pd.read_csv(os.path.join(dirname,\"sample_submission.csv\"))\ntest_data = pd.read_csv(os.path.join(dirname,\"id_map.csv\"))\nsample_columns = sample_submission.columns[1:];\n\ntest_cell_types=test_data[\"cell_type\"].values.ravel();\ntest_sm_names=test_data[\"sm_name\"].values.ravel();\none_hot_cell_types_test=map_to_categorical(map_cell_types,test_cell_types);\none_hot_sm_names_test=map_to_categorical(map_sm_names,test_sm_names)\none_hotted_features_test=[]\n\nfor i in range(0,len(one_hot_sm_names_test)):\n   sm_name=test_sm_names[i]\n   joined=[]\n   joined.extend(one_hot_cell_types_test[i])\n   joined.extend(one_hot_sm_names_test[i]) \n   onehot=keras.utils.to_categorical(groupby_sm_name_true_false[test_sm_names[i]],num_classes=len(unique_sm_names))\n   joined.extend([v for v in onehot]) \n\n   one_hotted_features_test.append(joined)\n\nX_test=np.array(one_hotted_features_test)\n\nmodel.load_weights(\"model3.ckpt\")\n\nsubmission=pd.DataFrame(model.predict(X_test),columns=sample_columns)\n\nsubmission.insert(0,\"id\",range(255))\nsubmission.to_csv(\"70.csv\",index=False)\n","metadata":{"execution":{"iopub.status.busy":"2023-10-17T11:17:58.135123Z","iopub.execute_input":"2023-10-17T11:17:58.135483Z","iopub.status.idle":"2023-10-17T11:18:07.375570Z","shell.execute_reply.started":"2023-10-17T11:17:58.135456Z","shell.execute_reply":"2023-10-17T11:18:07.374724Z"},"trusted":true},"execution_count":null,"outputs":[]}]}