{"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":"nvidiaTeslaT4","dataSources":[{"sourceId":59094,"databundleVersionId":7010844,"sourceType":"competition"}],"dockerImageVersionId":30559,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"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":{"execution":{"iopub.status.busy":"2023-11-30T12:47:03.368873Z","iopub.execute_input":"2023-11-30T12:47:03.369233Z","iopub.status.idle":"2023-11-30T12:47:05.922616Z","shell.execute_reply.started":"2023-11-30T12:47:03.369202Z","shell.execute_reply":"2023-11-30T12:47:05.921506Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"import cudf\n\nnom_du_fichier = '/kaggle/input/open-problems-single-cell-perturbations/de_train.parquet'\ndf = cudf.read_parquet(nom_du_fichier)\n","metadata":{"execution":{"iopub.status.busy":"2023-11-30T07:52:24.564957Z","iopub.execute_input":"2023-11-30T07:52:24.565213Z","iopub.status.idle":"2023-11-30T07:52:40.841184Z","shell.execute_reply.started":"2023-11-30T07:52:24.565188Z","shell.execute_reply":"2023-11-30T07:52:40.840154Z"}}},{"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-30T12:47:08.578478Z","iopub.execute_input":"2023-11-30T12:47:08.578876Z","iopub.status.idle":"2023-11-30T12:47:08.712897Z","shell.execute_reply.started":"2023-11-30T12:47:08.578843Z","shell.execute_reply":"2023-11-30T12:47:08.711752Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import lightgbm as lgb\nfrom xgboost import XGBRegressor\nfrom catboost import CatBoostRegressor\nimport numpy as np\nimport cupy as cp\nimport pandas as pd\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.metrics import mean_squared_error\nimport cudf\ncudf2_ = cp.asarray(df2_)\nfor bt in [0.01]:\n    for estim in [495]:\n        print(estim,bt)\n        #model = lgb.LGBMRegressor(learning_rate=0.035, n_estimators=estim, objective='regression', metric='rmse', device='gpu', boosting_type=bt)\n        \n        model = CatBoostRegressor(objective='RMSE', learning_rate=bt, iterations=estim, random_state=42, task_type='GPU')\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,250):\n            y = df[dfc.columns[i]]\n            #ycu = cudf.from_pandas(y)\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            model.fit(X_train, y_train, verbose=False)\n\n            # Make predictions on the test set\n            y_pred_cudf = cp.asarray(model.predict(X_test))\n\n            # Calculate the Mean Squared Error (MSE) with Cupy\n            mse = cp.mean((cp.asarray(y_test) - y_pred_cudf) ** 2)\n\n            # Calculate the Root Mean Squared Error (RMSE) with Cupy\n            rmse = cp.sqrt(mse)\n            lrmse.append(rmse)\n\n        # Print the average RMSE for the looped range of column indices\n        print(f\"RMSE for {estim} estimators:\", cp.asnumpy(sum(lrmse) / len(lrmse)))","metadata":{"execution":{"iopub.status.busy":"2023-11-30T14:35:53.700159Z","iopub.execute_input":"2023-11-30T14:35:53.700517Z","iopub.status.idle":"2023-11-30T14:41:21.718572Z","shell.execute_reply.started":"2023-11-30T14:35:53.700487Z","shell.execute_reply":"2023-11-30T14:41:21.717755Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Importing necessary libraries\nimport pandas as pd\nfrom sklearn.preprocessing import OneHotEncoder\nfrom catboost import CatBoostRegressor\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 = CatBoostRegressor(objective='RMSE', learning_rate=0.01, iterations=495, random_state=42, task_type='GPU')\n    \n    # Training the model on the training data\n    model.fit(X3_[:614], y, verbose=False)\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-30T14:44:22.183433Z","iopub.execute_input":"2023-11-30T14:44:22.18414Z","iopub.status.idle":"2023-11-30T22:22:30.496621Z","shell.execute_reply.started":"2023-11-30T14:44:22.184104Z","shell.execute_reply":"2023-11-30T22:22:30.493607Z"},"trusted":true},"execution_count":null,"outputs":[]}]}