{"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)\n\nid_map_csv = \"/kaggle/input/open-problems-single-cell-perturbations/id_map.csv\"\nid_map = pd.read_csv(id_map_csv)","metadata":{"execution":{"iopub.status.busy":"2023-11-30T12:27:46.055498Z","iopub.execute_input":"2023-11-30T12:27:46.055919Z","iopub.status.idle":"2023-11-30T12:27:49.264128Z","shell.execute_reply.started":"2023-11-30T12:27:46.055885Z","shell.execute_reply":"2023-11-30T12:27:49.262801Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"import numpy as np\nimport pandas as pd\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.metrics import mean_squared_error\nfrom xgboost import XGBRegressor\ndfr = pd.DataFrame()\n# Loop over a list of values for the number of estimators (trees) in the XGBoost model\nfor estim in [50]:\n    # Create the XGBRegressor model with specified parameters\n    model = XGBRegressor(objective='reg:squarederror', learning_rate=0.035, n_estimators=estim, random_state=42)\n    lrmse = []  # List to store Root Mean Squared Errors (RMSE) for each iteration\n    for i in df.columns[5:]:\n        y = df[i]\n        for j in range(614):\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.3, random_state=0)\n\n        # Train the XGBoost model on the training data\n        model.fit(X3_[:614], y)\n        \n        dfr[] = model.predict(X_test)\n        \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 number of estimators\n    print(\"RMSE:\", sum(lrmse) / len(lrmse))\n    \"\"\"\n","metadata":{"execution":{"iopub.status.busy":"2023-11-29T06:42:54.883756Z","iopub.execute_input":"2023-11-29T06:42:54.884155Z","iopub.status.idle":"2023-11-29T07:12:47.556922Z","shell.execute_reply.started":"2023-11-29T06:42:54.884125Z","shell.execute_reply":"2023-11-29T07:12:47.556147Z"}}},{"cell_type":"markdown","source":"\n# Preprocessing categorical features (one-hot encoding)\nencoder = OneHotEncoder(sparse_output=False, drop='first')\ndf3_ = encoder.fit_transform(X3)\nprint(df3_.shape)\nprint('Categorical data encoded, 2 dimensions -> ', df3_.shape[1], ' dimensions after binary encoding')\n\n# Loop over a range of column indices\nfor i in df.columns[5:]:\n    \n    y = df[i]\n    \n    listeresult = model.predict(df3_)\n\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('sample_submission.csv', index=False)\n","metadata":{}},{"cell_type":"code","source":"# Importing necessary libraries\nimport pandas as pd\nfrom sklearn.preprocessing import OneHotEncoder\nfrom xgboost import XGBRegressor\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 = XGBRegressor(objective='reg:squarederror', learning_rate=0.01, n_estimators=97, random_state=42)\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_xgb.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-30T12:47:46.611673Z","iopub.execute_input":"2023-11-30T12:47:46.612123Z","iopub.status.idle":"2023-11-30T15:09:01.150809Z","shell.execute_reply.started":"2023-11-30T12:47:46.612091Z","shell.execute_reply":"2023-11-30T15:09:01.149392Z"},"trusted":true},"execution_count":null,"outputs":[]}]}