{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.14","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"nvidiaTeslaT4","dataSources":[{"sourceId":82611,"databundleVersionId":9553358,"sourceType":"competition"}],"dockerImageVersionId":30786,"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import numpy as np\nimport pandas as pd \nimport matplotlib.pyplot as plt\nimport joblib  # 使用joblib保存模型\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))\n","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2024-11-28T14:01:08.612293Z","iopub.execute_input":"2024-11-28T14:01:08.612574Z","iopub.status.idle":"2024-11-28T14:01:09.916032Z","shell.execute_reply.started":"2024-11-28T14:01:08.612548Z","shell.execute_reply":"2024-11-28T14:01:09.915064Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import numpy as np\nimport catboost as cb\nimport xgboost as xgb\nfrom sklearn.svm import SVR\nfrom sklearn.impute import SimpleImputer \nfrom sklearn.model_selection import KFold\nfrom sklearn.metrics import mean_squared_error\nfrom sklearn.tree import DecisionTreeRegressor\nfrom sklearn.preprocessing import StandardScaler, LabelEncoder\nfrom sklearn.ensemble import AdaBoostRegressor, RandomForestRegressor\nfrom sklearn.linear_model import LinearRegression, Ridge, Lasso, ElasticNet","metadata":{"execution":{"iopub.status.busy":"2024-11-28T14:01:09.917764Z","iopub.execute_input":"2024-11-28T14:01:09.918128Z","iopub.status.idle":"2024-11-28T14:01:11.742616Z","shell.execute_reply.started":"2024-11-28T14:01:09.918099Z","shell.execute_reply":"2024-11-28T14:01:11.741811Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train = pd.read_csv('/kaggle/input/brist1d/train.csv', low_memory=False)\ntest = pd.read_csv('/kaggle/input/brist1d/test.csv', low_memory=False)","metadata":{"execution":{"iopub.status.busy":"2024-11-28T14:01:11.743702Z","iopub.execute_input":"2024-11-28T14:01:11.744056Z","iopub.status.idle":"2024-11-28T14:01:26.893068Z","shell.execute_reply.started":"2024-11-28T14:01:11.744029Z","shell.execute_reply":"2024-11-28T14:01:26.892114Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train.describe()","metadata":{"execution":{"iopub.status.busy":"2024-11-28T14:01:26.895179Z","iopub.execute_input":"2024-11-28T14:01:26.895561Z","iopub.status.idle":"2024-11-28T14:01:30.004456Z","shell.execute_reply.started":"2024-11-28T14:01:26.895531Z","shell.execute_reply":"2024-11-28T14:01:30.003527Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train.isnull().sum()","metadata":{"execution":{"iopub.status.busy":"2024-11-28T14:01:30.005608Z","iopub.execute_input":"2024-11-28T14:01:30.006395Z","iopub.status.idle":"2024-11-28T14:01:30.426832Z","shell.execute_reply.started":"2024-11-28T14:01:30.006350Z","shell.execute_reply":"2024-11-28T14:01:30.425957Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"missing_values = train.isnull().sum()\n\n\ntotal_rows = train.shape[0]\nmissing_percentage = (missing_values / total_rows) * 100\n\n\nresults_df = pd.DataFrame({'Column': missing_values.index,\n                          'Missing Values': missing_values.values,\n                          'Missing Percentage (%)': missing_percentage.values})\n\n\nresults_df = results_df.sort_values(by='Missing Percentage (%)', ascending=False)\n\nprint(results_df)","metadata":{"execution":{"iopub.status.busy":"2024-11-28T14:01:30.427785Z","iopub.execute_input":"2024-11-28T14:01:30.428045Z","iopub.status.idle":"2024-11-28T14:01:30.859653Z","shell.execute_reply.started":"2024-11-28T14:01:30.428019Z","shell.execute_reply":"2024-11-28T14:01:30.858673Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train['time'] = pd.to_datetime(train['time'], format='%H:%M:%S')\ntest['time'] = pd.to_datetime(test['time'], format='%H:%M:%S')\n\n\n\ntrain['hour'] = train['time'].dt.hour\ntrain['minute'] = train['time'].dt.minute\ntrain.drop('time', axis=1, inplace=True)\n\ntest['hour'] = test['time'].dt.hour\ntest['minute'] = test['time'].dt.minute\ntest.drop('time', axis=1, inplace=True)\n","metadata":{"execution":{"iopub.status.busy":"2024-11-28T14:01:30.860949Z","iopub.execute_input":"2024-11-28T14:01:30.861876Z","iopub.status.idle":"2024-11-28T14:01:31.245060Z","shell.execute_reply.started":"2024-11-28T14:01:30.861827Z","shell.execute_reply":"2024-11-28T14:01:31.244400Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"numerical_cols = train.select_dtypes(include=['float64', 'int64']).columns.tolist()\nnumerical_cols.remove('bg+1:00')\ncategorical_cols = [col for col in train.columns if 'activity' in col]","metadata":{"execution":{"iopub.status.busy":"2024-11-28T14:01:31.246174Z","iopub.execute_input":"2024-11-28T14:01:31.246537Z","iopub.status.idle":"2024-11-28T14:01:31.462223Z","shell.execute_reply.started":"2024-11-28T14:01:31.246494Z","shell.execute_reply":"2024-11-28T14:01:31.461543Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"imputer = SimpleImputer(strategy='mean')          \ntrain[numerical_cols] = imputer.fit_transform(train[numerical_cols])\ntest[numerical_cols] = imputer.transform(test[numerical_cols])\n\nfor col in categorical_cols:\n    train[col] = train[col].fillna('None')\n    test[col] = test[col].fillna('None')\n    le = LabelEncoder()\n    combined_data = pd.concat([train[col], test[col]], axis=0)\n    le.fit(combined_data)\n    train[col] = le.transform(train[col])\n    test[col] = le.transform(test[col])\n\n\nscaler = StandardScaler()    \ntrain[numerical_cols] = scaler.fit_transform(train[numerical_cols])\ntest[numerical_cols] = scaler.transform(test[numerical_cols])","metadata":{"execution":{"iopub.status.busy":"2024-11-28T14:01:31.463183Z","iopub.execute_input":"2024-11-28T14:01:31.463438Z","iopub.status.idle":"2024-11-28T14:01:38.846183Z","shell.execute_reply.started":"2024-11-28T14:01:31.463406Z","shell.execute_reply":"2024-11-28T14:01:38.845234Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"X = train.drop(['id', 'p_num', 'bg+1:00'], axis=1)\ny = train['bg+1:00']\nX_test_final = test.drop(['id', 'p_num'], axis=1)","metadata":{"execution":{"iopub.status.busy":"2024-11-28T14:01:38.848437Z","iopub.execute_input":"2024-11-28T14:01:38.848711Z","iopub.status.idle":"2024-11-28T14:01:39.624157Z","shell.execute_reply.started":"2024-11-28T14:01:38.848684Z","shell.execute_reply":"2024-11-28T14:01:39.623135Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"non_numeric_cols = X.select_dtypes(include=['object']).columns.tolist()\nif non_numeric_cols:\n    print(\"Non-numeric columns in X_train:\", non_numeric_cols)\n    \n    X.drop(non_numeric_cols, axis=1, inplace=True)\n    X_test_final.drop(non_numeric_cols, axis=1, inplace=True)","metadata":{"execution":{"iopub.status.busy":"2024-11-28T14:01:39.625409Z","iopub.execute_input":"2024-11-28T14:01:39.625784Z","iopub.status.idle":"2024-11-28T14:01:39.630908Z","shell.execute_reply.started":"2024-11-28T14:01:39.625744Z","shell.execute_reply":"2024-11-28T14:01:39.630104Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import numpy as np\nfrom sklearn.metrics import mean_squared_error, r2_score\nfrom sklearn.model_selection import KFold\nimport xgboost as xgb\nfrom cuml import Ridge as cuRidge\nfrom cuml import Lasso as cuLasso\nfrom cuml import SVR as cuSVR\n\nmodels = {\n    \"cuML Ridge Regression\": cuRidge(alpha=1.0),\n    \"cuML Lasso Regression\": cuLasso(alpha=0.1),\n    \"cuML SVR\": cuSVR(kernel='rbf', C=0.1, epsilon=0.1),\n    \"XGBoost\": xgb.XGBRegressor(n_estimators=100, max_depth=25, tree_method='hist', device='cuda', random_state=1),\n}\n\nkf = KFold(n_splits=3, shuffle=True, random_state=1)\n\nmetrics_scores = {}\n\nfor model_name, model in models.items():\n    rmse_scores = []\n    r2_scores = []\n    \n    for train_index, test_index in kf.split(X):\n        X_train, X_test = X.iloc[train_index], X.iloc[test_index]\n        y_train, y_test = y.iloc[train_index], y.iloc[test_index]\n        \n        model.fit(X_train, y_train)\n        \n        y_pred = model.predict(X_test)\n        \n        rmse = np.sqrt(mean_squared_error(y_test, y_pred))\n        r2 = r2_score(y_test, y_pred)\n        \n        rmse_scores.append(rmse)\n        r2_scores.append(r2)\n    \n    avg_rmse = np.mean(rmse_scores)\n    avg_r2 = np.mean(r2_scores)\n    metrics_scores[model_name] = {'RMSE': avg_rmse, 'R2': avg_r2}\n    \n    print(f\"{model_name} - RMSE: {avg_rmse}, R²: {avg_r2}\")\n    joblib.dump(model, f\"{model_name}_model.pkl\")\n\nbest_model_name = min(metrics_scores, key=lambda x: metrics_scores[x]['RMSE'])\nprint(f\"Best model: {best_model_name} with RMSE: {metrics_scores[best_model_name]['RMSE']} and R²: {metrics_scores[best_model_name]['R2']}\")\n","metadata":{"execution":{"iopub.status.busy":"2024-11-28T14:01:39.632133Z","iopub.execute_input":"2024-11-28T14:01:39.632950Z","iopub.status.idle":"2024-11-28T14:15:09.555331Z","shell.execute_reply.started":"2024-11-28T14:01:39.632904Z","shell.execute_reply":"2024-11-28T14:15:09.554304Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"test_preds = model.predict(X_test_final)\n\n\nsubmission = pd.DataFrame({\n    'id': test['id'],\n    'bg+1:00': test_preds\n})\n\nsubmission.to_csv('/kaggle/working/submission.csv', index=False)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-28T14:15:09.556547Z","iopub.execute_input":"2024-11-28T14:15:09.557041Z","iopub.status.idle":"2024-11-28T14:15:09.682504Z","shell.execute_reply.started":"2024-11-28T14:15:09.557012Z","shell.execute_reply":"2024-11-28T14:15:09.681588Z"}},"outputs":[],"execution_count":null}]}