{"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":7083930,"sourceType":"datasetVersion","datasetId":4081270},{"sourceId":7085750,"sourceType":"datasetVersion","datasetId":4082534}],"dockerImageVersionId":30558,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import pandas as pd\nnom_du_fichier = '/kaggle/input/open-problems-single-cell-perturbations/de_train.parquet'\ndf = pd.read_parquet(nom_du_fichier)\nid_map_csv = \"/kaggle/input/open-problems-single-cell-perturbations/id_map.csv\" \nid_map = pd.read_csv(id_map_csv)\nprint(df.shape)\nprint(df.head())\nprint(id_map.shape)\nprint(id_map.head())","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2023-11-30T06:38:31.887314Z","iopub.execute_input":"2023-11-30T06:38:31.887810Z","iopub.status.idle":"2023-11-30T06:38:35.206946Z","shell.execute_reply.started":"2023-11-30T06:38:31.887770Z","shell.execute_reply":"2023-11-30T06:38:35.205817Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Import OneHotEncoder from scikit-learn\nfrom sklearn.preprocessing import OneHotEncoder\n\n# Create an instance of OneHotEncoder with specified parameters\nencoder = OneHotEncoder(sparse_output=False, drop='first')\n\n# Display the dimension of the target unencoded data\nprint(\"Dimension of the unencoded target data: \", df.iloc[:, 5:].shape[1])\n\n# Extract specific columns for encoding\ndf2 = df[['cell_type', 'sm_name']]\n\n# Encode categorical data with the OneHotEncoder\ndf2_ = encoder.fit_transform(df2)\nprint('Encoded categorical data, 2 dimensions -> ', df2_.shape[1], ' dimensions after binary encoding')\n\n# Uncomment the lines below if needed\n# print(type(df2_encoded))\n# print(\"Convert the NumPy array of encoded data to a Pandas DataFrame\")\ndf2df = pd.DataFrame(df2_)\nprint(\"Dimensions of the encoded data: \\n\", df2df.shape)\n\n# Concatenate the encoded data with the rest of the dataframe\ndfc = pd.concat([df2df, df.iloc[:, 5:]], axis=1)  # everything is resized\nprint(\"Resulting shape: \\n\", dfc.shape)\n\n# Display the head (first rows) of the resulting DataFrame\nprint(\"Head (first rows of data) of the resulting DataFrame: \\n\", dfc.head())","metadata":{"execution":{"iopub.status.busy":"2023-11-30T06:38:37.165489Z","iopub.execute_input":"2023-11-30T06:38:37.165911Z","iopub.status.idle":"2023-11-30T06:38:37.993694Z","shell.execute_reply.started":"2023-11-30T06:38:37.165876Z","shell.execute_reply":"2023-11-30T06:38:37.992022Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"import lightgbm as lgb\nimport numpy as np\nfrom sklearn.model_selection import train_test_split, GridSearchCV\nfrom sklearn.metrics import mean_squared_error\n\nfor lr in [0.06]:\n    # Create the LGBMRegressor model with specified parameters\n    model = lgb.LGBMRegressor(objective='regression', learning_rate=0.05, n_estimators=15, random_state=42) # 30 RMSE: 1.5952043411832786\n    lrmse = []  # List to store Root Mean Squared Errors (RMSE) for each iteration\n\n    # Loop over a range of column indices\n    for i in range(150, 18211):\n        y = df[dfc.columns[i]]\n\n        # Split the data into training and testing sets\n        X_train, X_test, y_train, y_test = train_test_split(df2_, y, test_size=0.5, random_state=0)\n\n        # Train the LGBMRegressor model on the training data\n        model.fit(X_train, y_train)\n\n        # Make predictions on the test set\n        y_pred = model.predict(X_test)\n\n        # Calculate the Mean Squared Error (MSE)\n        mse = mean_squared_error(y_test, y_pred)\n\n        # Calculate the Root Mean Squared Error (RMSE)\n        rmse = np.sqrt(mse)\n        lrmse.append(rmse)\n\n    # Print the average RMSE for the looped range of column indices\n    print(\"RMSE:\", sum(lrmse) / len(lrmse))","metadata":{"execution":{"iopub.status.busy":"2023-11-29T22:33:49.687529Z","iopub.execute_input":"2023-11-29T22:33:49.687984Z","iopub.status.idle":"2023-11-29T22:39:46.685097Z","shell.execute_reply.started":"2023-11-29T22:33:49.687949Z","shell.execute_reply":"2023-11-29T22:39:46.683874Z"}}},{"cell_type":"markdown","source":"RMSE: 1.7075459774632602\nRMSE: 1.7038016486748169\nRMSE: 1.7039080942588236\nRMSE: 1.7052435090889615\n0.01,0.02,0.03,0.04\nRMSE: 1.7122667412286896\nRMSE: 1.707512963577434\nRMSE: 1.7049125070457172\nRMSE: 1.7037839399779284\n    0.05,0.1\nRMSE: 1.703603658795528\nRMSE: 1.70692942037138\n    0.06\n    RMSE: 1.7039664861411008\n","metadata":{"execution":{"iopub.status.busy":"2023-11-29T20:52:57.434290Z","iopub.execute_input":"2023-11-29T20:52:57.434744Z","iopub.status.idle":"2023-11-29T20:52:57.442303Z","shell.execute_reply.started":"2023-11-29T20:52:57.434694Z","shell.execute_reply":"2023-11-29T20:52:57.440373Z"}}},{"cell_type":"markdown","source":"\nid_map_csv = \"/kaggle/input/open-problems-single-cell-perturbations/id_map.csv\"\nid_map = pd.read_csv(id_map_csv)\n\nsubmission = \"/kaggle/input/open-problems-single-cell-perturbations/sample_submission.csv\"\nsub = pd.read_csv(submission)\n\nX2 = id_map[['cell_type', 'sm_name']]\nprint(X2.shape)\nX3 = pd.concat([X1, X2])\nprint(X3.shape)\n\n# Preprocessing categorical features (one-hot encoding)\nencoder = OneHotEncoder(sparse_output=False, drop='first')\nX3_ = encoder.fit_transform(X3)\nprint(X3_.shape)\nprint('Categorical data encoded, 2 dimensions -> ', X3_.shape[1], ' dimensions after binary encoding')\n\n# Loop over a range of column indices\nfor i in range(150, 18211):\n    \n    y = df[i]\n    \n    listeresult = model.predict(X3_[614 + j].reshape(1, -1))\n    liste.extend(listeresult)\n    listedeliste.append(liste)\n\n# Creating a DataFrame with a custom index\ncolumns = sub.columns\ndtfrm = pd.DataFrame(listedeliste, columns=columns)\n\n# Saving the DataFrame to a CSV file\ndtfrm.to_csv('submission.csv', index=False)\n","metadata":{"execution":{"iopub.status.busy":"2023-11-29T10:25:27.214604Z","iopub.execute_input":"2023-11-29T10:25:27.215029Z","iopub.status.idle":"2023-11-29T10:25:32.673145Z","shell.execute_reply.started":"2023-11-29T10:25:27.214995Z","shell.execute_reply":"2023-11-29T10:25:32.671484Z"},"jupyter":{"outputs_hidden":true}}},{"cell_type":"markdown","source":"# Importing necessary libraries\nimport pandas as pd\nfrom sklearn.preprocessing import OneHotEncoder\nimport lightgbm as lgb\nimport pickle\n\n# Loading data from parquet files and CSV files\nfile_name = '/kaggle/input/open-problems-single-cell-perturbations/de_train.parquet'\ndf = pd.read_parquet(file_name)\n\nid_map_csv = \"/kaggle/input/open-problems-single-cell-perturbations/id_map.csv\"\nid_map = pd.read_csv(id_map_csv)\n\nsubmission = \"/kaggle/input/open-problems-single-cell-perturbations/sample_submission.csv\"\nsub = pd.read_csv(submission)\n\n# Creating a dictionary and preparing feature data\nmydict = {}\nX1 = df[['cell_type', 'sm_name']]\nprint(X1.shape)\nX2 = id_map[['cell_type', 'sm_name']]\nprint(X2.shape)\nX3 = pd.concat([X1, X2])\nprint(X3.shape)\n\n# Preprocessing categorical features (one-hot encoding)\nencoder = OneHotEncoder(sparse_output=False, drop='first')\nX3_ = encoder.fit_transform(X3)\nprint(X3_.shape)\nprint('Categorical data encoded, 2 dimensions -> ', X3_.shape[1], ' dimensions after binary encoding')\n\n# Training models for each target variable\nfor i in df.columns[5:]:\n    \n    y = df[i]\n    \n    model = lgb.LGBMRegressor(learning_rate=0.035, n_estimators=30, objective='regression')\n    \n    # Training the model on the training data\n    model.fit(X3_[:614], y)\n    mydict[i] = model\n    \nprint(len(mydict))\n\n# Sauvegarder le dictionnaire dans un fichier binaire\nwith open('f_lgb.pkl', 'wb') as fichier:\n    pickle.dump(mydict, fichier)\n\nlistedeliste = []\nprint(len(id_map))\n\n# Making predictions for each sample in the submission data\nfor j in range(len(id_map)):\n    liste = [j]\n    print(\"List\", liste)\n    for cledict in sub.columns[1:]:  # Dictionary key = column name\n        model = mydict[cledict]\n        listeresult = model.predict(X3_[614 + j].reshape(1, -1))\n        liste.extend(listeresult)\n        \"\"\"print(\"Predictions on test data\", liste)\n        p = input()\"\"\"\n    listedeliste.append(liste)\n\n# Creating a DataFrame with a custom index\ncolumns = sub.columns\ndtfrm = pd.DataFrame(listedeliste, columns=columns)\n\n# Saving the DataFrame to a CSV file\ndtfrm.to_csv('submission.csv', index=False)\n","metadata":{"execution":{"iopub.status.busy":"2023-11-29T15:08:03.431008Z","iopub.execute_input":"2023-11-29T15:08:03.431557Z","iopub.status.idle":"2023-11-29T15:46:16.167186Z","shell.execute_reply.started":"2023-11-29T15:08:03.431521Z","shell.execute_reply":"2023-11-29T15:46:16.165820Z"},"jupyter":{"outputs_hidden":true}}},{"cell_type":"code","source":"import pickle\n\n# Charger le dictionnaire depuis le fichier binaire\nwith open('/kaggle/input/lgb-models/f_lgb.pkl', 'rb') as fichier:\n    dict_lgb = pickle.load(fichier)\n    \n# Charger le dictionnaire depuis le fichier binaire\nwith open('/kaggle/input/models-xgb/f_xgb.pkl', 'rb') as fichier:\n    dict_xgb = pickle.load(fichier)","metadata":{"execution":{"iopub.status.busy":"2023-11-30T06:38:41.803985Z","iopub.execute_input":"2023-11-30T06:38:41.804505Z","iopub.status.idle":"2023-11-30T06:40:07.303679Z","shell.execute_reply.started":"2023-11-30T06:38:41.804456Z","shell.execute_reply":"2023-11-30T06:40:07.302313Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Importing necessary libraries\nimport pandas as pd\nfrom sklearn.preprocessing import OneHotEncoder\nimport lightgbm as lgb\nimport pickle\n\n# Loading data from parquet files and CSV files\nfile_name = '/kaggle/input/open-problems-single-cell-perturbations/de_train.parquet'\ndf = pd.read_parquet(file_name)\n\nid_map_csv = \"/kaggle/input/open-problems-single-cell-perturbations/id_map.csv\"\nid_map = pd.read_csv(id_map_csv)\n\nsubmission = \"/kaggle/input/open-problems-single-cell-perturbations/sample_submission.csv\"\nsub = pd.read_csv(submission)\n\nX1 = df[['cell_type', 'sm_name']]\nprint(X1.shape)\nX2 = id_map[['cell_type', 'sm_name']]\nprint(X2.shape)\nX3 = pd.concat([X1, X2])\nprint(X3.shape)\n\n# Preprocessing categorical features (one-hot encoding)\nencoder = OneHotEncoder(sparse_output=False, drop='first')\nX3_ = encoder.fit_transform(X3)\nprint(X3_.shape)\nprint('Categorical data encoded, 2 dimensions -> ', X3_.shape[1], ' dimensions after binary encoding')\n\n\"\"\"# Training models for each target variable\nfor i in df.columns[5:]:\n    y = df[i]\n    model = lgb.LGBMRegressor(learning_rate=0.035, n_estimators=30, objective='regression')\n    # Training the model on the training data\n    model.fit(X3_[:614], y)\n    mydict[i] = model\nprint(len(mydict))\n# Sauvegarder le dictionnaire dans un fichier binaire\nwith open('f_lgb.pkl', 'wb') as fichier:\n    pickle.dump(mydict, fichier)\"\"\"\n\nlistedeliste = []\nprint(len(id_map))\n\n# Making predictions for each sample in the submission data\nfor j in range(len(id_map)):\n    liste = [j]\n    print(\"List\", liste)\n    for cledict in sub.columns[1:]:  # Dictionary key = column name\n        model_lgb = dict_lgb[cledict]\n        model_xgb = dict_xgb[cledict]\n        listeresultlgb = model_lgb.predict(X3_[614 + j].reshape(1, -1))\n        listeresultxgb = model_xgb.predict(X3_[614 + j].reshape(1, -1))\n        listeresult=(listeresultlgb+listeresultxgb)/2\n        liste.extend(listeresult)\n        \"\"\"print(\"Predictions on test data\", liste)\n        p = input()\"\"\"\n    listedeliste.append(liste)\n\n# Creating a DataFrame with a custom index\ncolumns = sub.columns\ndtfrm = pd.DataFrame(listedeliste, columns=columns)\n\n# Saving the DataFrame to a CSV file\ndtfrm.to_csv('submission.csv', index=False)\n","metadata":{"execution":{"iopub.status.busy":"2023-11-30T06:40:28.308155Z","iopub.execute_input":"2023-11-30T06:40:28.309375Z","iopub.status.idle":"2023-11-30T06:41:46.508863Z","shell.execute_reply.started":"2023-11-30T06:40:28.309334Z","shell.execute_reply":"2023-11-30T06:41:46.506720Z"},"collapsed":true,"jupyter":{"outputs_hidden":true},"trusted":true},"execution_count":null,"outputs":[]}]}