{"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":7088788,"sourceType":"datasetVersion","datasetId":4084585},{"sourceId":7089140,"sourceType":"datasetVersion","datasetId":4084846}],"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)","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2023-11-30T09:13:05.914428Z","iopub.execute_input":"2023-11-30T09:13:05.914988Z","iopub.status.idle":"2023-11-30T09:13:09.210682Z","shell.execute_reply.started":"2023-11-30T09:13:05.914945Z","shell.execute_reply":"2023-11-30T09:13:09.209494Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Importer OneHotEncoder depuis scikit-learn\nfrom sklearn.preprocessing import OneHotEncoder\n\n# Créer une instance de OneHotEncoder avec des paramètres spécifiés\nencodeur = OneHotEncoder(sparse_output=False, drop='first')\n\n\nprint(\"Dimension des données non encodées cibles : \", df.iloc[:, 5:].shape[1])\n\ndf2 = df[['cell_type', 'sm_name']]\ndf2_ = encodeur.fit_transform(df2)\nprint('Données catégoriques encodées, 2 dimensions -> ', df2_.shape[1], ' dimensions après l\\'encodage binaire')\n\n\n#print(type(df2_))\n#print(\"Convertir le tableau NumPy de données encodées en un DataFrame Pandas\")\ndf2df = pd.DataFrame(df2_)\nprint(\"Dimensions des données encodées : \\n\", df2df.shape)\nprint(\"Concaténation : \")\ndfc = pd.concat([df2df, df.iloc[:, 5:]], axis=1)  # tout est redimensionné\nprint(\"Forme résultante : \\n\", dfc.shape)\nprint(\"Tête (premières lignes de données) du DataFrame résultant : \\n\", dfc.head())","metadata":{"execution":{"iopub.status.busy":"2023-11-30T09:13:09.510380Z","iopub.execute_input":"2023-11-30T09:13:09.510922Z","iopub.status.idle":"2023-11-30T09:13:10.295064Z","shell.execute_reply.started":"2023-11-30T09:13:09.510887Z","shell.execute_reply":"2023-11-30T09:13:10.293801Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import pickle\n\n# Charger le dictionnaire depuis le fichier binaire\nwith open('/kaggle/input/models-lgb-2/f_lgb_2.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-2/f_xgb_2.pkl', 'rb') as fichier:\n    dict_xgb = pickle.load(fichier)","metadata":{"execution":{"iopub.status.busy":"2023-11-30T09:13:48.153492Z","iopub.execute_input":"2023-11-30T09:13:48.154462Z","iopub.status.idle":"2023-11-30T09:14:45.155028Z","shell.execute_reply.started":"2023-11-30T09:13:48.154416Z","shell.execute_reply":"2023-11-30T09:14:45.153989Z"},"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-30T09:15:22.526666Z","iopub.execute_input":"2023-11-30T09:15:22.527101Z","iopub.status.idle":"2023-11-30T09:17:26.184990Z","shell.execute_reply.started":"2023-11-30T09:15:22.527071Z","shell.execute_reply":"2023-11-30T09:17:26.183064Z"},"trusted":true},"execution_count":null,"outputs":[]},{"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=20, 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-30T07:43:13.859172Z","iopub.execute_input":"2023-11-30T07:43:13.861892Z","iopub.status.idle":"2023-11-30T08:20:22.533861Z","shell.execute_reply.started":"2023-11-30T07:43:13.861824Z","shell.execute_reply":"2023-11-30T08:20:22.531813Z"}}},{"cell_type":"markdown","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.035, n_estimators=50, 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(mon_dictionnaire, 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)","metadata":{}},{"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\nfor lr in [0.01,0.02,0.03,0.04]:\n    for estim in [30]:\n        print(estim)\n        print(lr)\n        # Créer le modèle CatBoostRegressor avec les paramètres spécifiés\n        model = XGBRegressor(objective='reg:squarederror', learning_rate=lr, n_estimators=estim, random_state=42)\n        lrmse = []\n\n        # Supposez que df est votre DataFrame\n        for i in range(150, 18211):\n            y = df[dfc.columns[i]]\n            X_train, X_test, y_train, y_test = train_test_split(df2_, y, test_size=0.5, random_state=0)\n\n            model.fit(X_train, y_train)\n\n            # Prédiction sur l'ensemble de test\n            y_pred = model.predict(X_test)\n\n            # Calcul de l'erreur quadratique moyenne\n            mse = mean_squared_error(y_test, y_pred)\n\n            # Calcul de la racine carrée de l'erreur quadratique moyenne\n            rmse = np.sqrt(mse)\n            lrmse.append(rmse)\n\n        print(\"RMSE :\", sum(lrmse) / len(lrmse))\n","metadata":{"execution":{"iopub.status.busy":"2023-11-29T22:46:57.618494Z","iopub.execute_input":"2023-11-29T22:46:57.618940Z","iopub.status.idle":"2023-11-30T00:04:56.981703Z","shell.execute_reply.started":"2023-11-29T22:46:57.618906Z","shell.execute_reply":"2023-11-30T00:04:56.980457Z"}}},{"cell_type":"markdown","source":"40 RMSE : 1.6489420452231744\n45 RMSE : 1.654363043947279\n5,10,20,30\nRMSE : 1.7145182482286292\nRMSE : 1.680938801775906\nRMSE : 1.6483010539127199\nRMSE : 1.6424973499404085\n    50 RMSE : 1.6605138067264529\n30\n0.01\nRMSE : 1.6896941337632048\n30\n0.02\nRMSE : 1.6544503443169238\n30\n0.03\nRMSE : 1.642986258784319\n30\n0.04\nRMSE : 1.6442915539819452","metadata":{"execution":{"iopub.status.busy":"2023-11-29T21:18:57.528877Z","iopub.status.idle":"2023-11-29T21:18:57.529337Z","shell.execute_reply.started":"2023-11-29T21:18:57.529106Z","shell.execute_reply":"2023-11-29T21:18:57.529126Z"}}},{"cell_type":"markdown","source":"import cupy as cp\nimport pandas as pd\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.metrics import mean_squared_error\nfrom sklearn.preprocessing import OneHotEncoder\nfrom sklearn.model_selection import train_test_split, GridSearchCV\nimport lightgbm as lgb\n\nmydict = {}\nmoyenne=-1\nlrmse=[]\nfor col in df.columns:\n        y = df[col]\n        X_train, X_test, y_train, y_test = train_test_split(X_encoded1, y, test_size=0.5, random_state=0)\n        param_grid = {'n_estimators' : [10,30,50],\n                      'objective'     : ['regression_l1'],\n                      'num_leaves'    : [10]\n                     }\n        model = lgb.LGBMRegressor()\n        grid_search = GridSearchCV(estimator=model, param_grid=param_grid, cv=5, n_jobs=-1)\n        model.fit(X_train, y_train)\n        y_pred = best_model.predict(X_test)\n        mse = cp.mean((y_test - y_pred) ** 2)\n        rmse = cp.sqrt(mse)\n        lrmse.append(rmse)\n        #print(rmse)\nprint(sum(lrmse)/len(lrmse))","metadata":{"execution":{"iopub.status.busy":"2023-11-09T06:40:49.978385Z","iopub.execute_input":"2023-11-09T06:40:49.978760Z"}}},{"cell_type":"markdown","source":"import pickle\nwith open('mydict.8.pickle', 'wb') as f:\n    pickle.dump(mydict, f)","metadata":{"execution":{"iopub.status.busy":"2023-11-08T20:16:15.446372Z","iopub.execute_input":"2023-11-08T20:16:15.447036Z","iopub.status.idle":"2023-11-08T20:16:16.541443Z","shell.execute_reply.started":"2023-11-08T20:16:15.446998Z","shell.execute_reply":"2023-11-08T20:16:16.540637Z"}}},{"cell_type":"markdown","source":"import pickle\n# Charger le dictionnaire à partir du fichier pickle\nwith open('mydict.8.pickle', 'rb') as f:\n    loaded_dict = pickle.load(f)\n# Afficher le dictionnaire chargé\nprint(loaded_dict)\nprint(len(loaded_dict))","metadata":{"execution":{"iopub.status.busy":"2023-11-08T20:16:19.356386Z","iopub.execute_input":"2023-11-08T20:16:19.356769Z","iopub.status.idle":"2023-11-08T20:16:21.269182Z","shell.execute_reply.started":"2023-11-08T20:16:19.356740Z","shell.execute_reply":"2023-11-08T20:16:21.268017Z"},"jupyter":{"outputs_hidden":true}}},{"cell_type":"markdown","source":"import os\n\n# Chemin vers le fichier que vous souhaitez supprimer\nfile_path = '/kaggle/working/mydict.5.pickle'\n\n# Vérifiez si le fichier existe avant de le supprimer\nif os.path.exists(file_path):\n    os.remove(file_path)\n    print(f\"Le fichier {file_path} a été supprimé avec succès.\")\nelse:\n    print(f\"Le fichier {file_path} n'existe pas.\")\n","metadata":{"execution":{"iopub.status.busy":"2023-11-08T20:16:58.117435Z","iopub.execute_input":"2023-11-08T20:16:58.117825Z","iopub.status.idle":"2023-11-08T20:16:58.126880Z","shell.execute_reply.started":"2023-11-08T20:16:58.117795Z","shell.execute_reply":"2023-11-08T20:16:58.125939Z"}}},{"cell_type":"markdown","source":"listedeliste=[]\n#print(len(id_map))\nfor j in range(len(id_map)):\n    liste=[j]\n    for cledict in sub.columns[1:]:#cle dict = nom colonne\n        #print(cledict)\n        model=mydict[cledict]\n        listeresult=model.predict(X_encoded3[614+j].reshape(1, -1))\n        liste.extend(listeresult)\n    listedeliste.append(liste)\n\nndx = sub.columns\n\n# Créer un DataFrame avec un index personnalisé\ndtfrm = pd.DataFrame(listedeliste, columns=ndx)\n\ndtfrm.to_csv('sample_submission.csv',index=False)","metadata":{"execution":{"iopub.status.busy":"2023-11-07T16:28:02.354146Z","iopub.execute_input":"2023-11-07T16:28:02.354516Z","iopub.status.idle":"2023-11-07T16:28:02.387190Z","shell.execute_reply.started":"2023-11-07T16:28:02.354486Z","shell.execute_reply":"2023-11-07T16:28:02.385875Z"},"jupyter":{"outputs_hidden":true}}},{"cell_type":"markdown","source":"(614, 18216)\n1.7003104384624905 {'n_estimators': 10, 'objective': 'regression'}\n18211\n","metadata":{}},{"cell_type":"markdown","source":"from sklearn.svm import SVR\nfrom sklearn.preprocessing import StandardScaler\n\nprint(df.shape)\nmoyenne=[]\nm='all'\nfor i in df.columns[5:]:\n    #for m in ['NK','CD4+','CD8+','regulatory','B','Myeloid']:\n        #result = df[df['cell_type'].str.contains(m)]\n        #print(result.shape)\n\n        y = result[i]\n        #print(y.shape)\n\n        X1 = result[['cell_type', 'sm_name']]\n        encoder = OneHotEncoder(sparse_output=False, drop='first')\n        X_encoded1 = encoder.fit_transform(X1)\n        #print(X_encoded1.shape)\n\n        X_train, X_test, y_train, y_test = train_test_split(X_encoded1, y, test_size=0.5, random_state=0)\n\n        param_grid = {'C': [0.001,0.01,0.1,0.5,1,2,5,10,20],\\\n                      'kernel': ['rbf', 'linear', 'poly', 'sigmoid']}\n\n        model = SVR()\n\n        grid_search = GridSearchCV(estimator=model, param_grid=param_grid, cv=3)\n        grid_search.fit(X_train, y_train)\n\n        best_model = grid_search.best_estimator_\n\n        y_pred = best_model.predict(X_test)\n\n        mse = mean_squared_error(y_test, y_pred)\n        rmse = np.sqrt(mse)\n        moyenne.append(rmse)\n        #print(np.mean(moyenne),\"RMSE :\", rmse,\" paramètres :\", grid_search.best_params_,'model:',i+\"~~\"+m)\n        mydict[i+\"~~\"+m] = best_model\nprint(np.mean(moyenne))\nprint(len(mydict))\n","metadata":{"execution":{"iopub.status.busy":"2023-11-04T11:23:21.659456Z","iopub.execute_input":"2023-11-04T11:23:21.659850Z"}}}]}