{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.13","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":10445,"databundleVersionId":200747,"sourceType":"competition"},{"sourceId":8834080,"sourceType":"datasetVersion","datasetId":5305385}],"dockerImageVersionId":30732,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import pandas as pd\nimport numpy as np\n\ntest_data = pd.read_csv(\"/kaggle/input/elo-merchant-category-recommendation-train-test/test_data.csv\")\ntrain_data = pd.read_csv(\"/kaggle/input/elo-merchant-category-recommendation-train-test/train_data.csv\")\n\ntest_data = test_data.fillna(0)\ntrain_data = train_data.fillna(0)","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2024-07-02T13:38:26.583061Z","iopub.execute_input":"2024-07-02T13:38:26.583560Z","iopub.status.idle":"2024-07-02T13:38:54.821051Z","shell.execute_reply.started":"2024-07-02T13:38:26.583525Z","shell.execute_reply":"2024-07-02T13:38:54.819855Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import xgboost as xgb\nfrom sklearn.metrics import mean_squared_error\nfrom sklearn.model_selection import KFold\nfrom numpy.random import RandomState\nfrom hyperopt import hp,fmin,tpe","metadata":{"execution":{"iopub.status.busy":"2024-07-02T13:38:54.823558Z","iopub.execute_input":"2024-07-02T13:38:54.823947Z","iopub.status.idle":"2024-07-02T13:38:55.597101Z","shell.execute_reply.started":"2024-07-02T13:38:54.823914Z","shell.execute_reply":"2024-07-02T13:38:55.595894Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def params_init(params):\n    params[\"objective\"] = 'reg:squarederror'\n    params[\"eval_metric\"] = 'rmse'\n    return params\ndef param_hyperopt(train,feature,label):\n    train_data = xgb.DMatrix(train[feature],train[label])\n    \n    def hyperopt_obj(params):\n        params = params_init(params)\n        res = xgb.cv(params,train_data,1000,\n                    nfold=2,\n                    stratified=False,\n                    shuffle=True,\n                    seed=2024,\n                    verbose_eval=False,\n                     early_stopping_rounds=30\n                    )\n        return min(res[\"test-rmse-mean\"])\n    params_space = {\n        \"learning_rate\":hp.uniform(\"learning_rate\",1e-2,5e-1),\n        'gamma': hp.uniform('gamma',0,1),\n        'subsample': hp.uniform('subsample',0.5,1),\n        'lambda': hp.uniform('lambda',0,1),\n        'alpha': hp.uniform('alpha',0,1),\n        'max_depth': hp.randint('max_depth',1,10),\n        'min_child_weight': hp.randint('min_child_weight',1,10),\n        'max_delta_step': hp.randint('max_delta_step',1,10),\n    }\n    params_best = fmin(\n        hyperopt_obj,\n        params_space,\n        algo=tpe.suggest,\n        max_evals=100,\n    )\n    return params_best","metadata":{"execution":{"iopub.status.busy":"2024-07-02T13:42:08.173995Z","iopub.execute_input":"2024-07-02T13:42:08.174974Z","iopub.status.idle":"2024-07-02T13:42:08.186599Z","shell.execute_reply.started":"2024-07-02T13:42:08.174935Z","shell.execute_reply":"2024-07-02T13:42:08.185212Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def  kfold(k,best_params,train,test,feature,label): \n    kf = KFold(n_splits=k, shuffle=True, random_state=2024)  \n    res = pd.DataFrame(0,index = test['card_id'],columns=[label])\n\n    scores = []\n    kfold_pred = pd.DataFrame()\n    # 进行k折交叉验证\n    for train_index,val_index in kf.split(train[feature],train[label]):\n        train_d = xgb.DMatrix(train[feature].loc[train_index],train[label].loc[train_index])\n        val_d = xgb.DMatrix(train[feature].loc[val_index],train[label].loc[val_index])\n\n        model = xgb.train(\n            best_params,\n            dtrain=train_d,\n            evals=[(train_d,\"train\"),(val_d,\"valid\")],\n            num_boost_round=1000,\n            early_stopping_rounds=30\n        )\n        res[\"target\"] += model.predict(xgb.DMatrix(test[feature]))\n        val_pred = pd.Series(model.predict(val_d),index=train[\"card_id\"].loc[val_index])\n        kfold_pred = pd.concat((kfold_pred,val_pred),axis=0)\n        \n        mse = mean_squared_error(val_pred.values,train[label].loc[val_index].values)  \n        scores.append(mse)  \n        print(f\"第{len(scores)}折mse: {mse}\")\n        \n\n    res['target'] /= k\n    kfold_pred.columns=[\"target\"]\n    \n    return res,kfold_pred","metadata":{"execution":{"iopub.status.busy":"2024-07-02T13:38:55.613186Z","iopub.execute_input":"2024-07-02T13:38:55.613585Z","iopub.status.idle":"2024-07-02T13:38:55.628934Z","shell.execute_reply.started":"2024-07-02T13:38:55.613553Z","shell.execute_reply":"2024-07-02T13:38:55.627530Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"feature = test_data.columns[test_data.columns!=\"card_id\"]\nlabel = \"target\"\n\n# best_params = param_hyperopt(train_data,feature,label)\nbest_params = {'alpha': 0.7570460038806801, 'gamma': 0.8612968869799411, 'lambda': 0.558434672483009, 'learning_rate': 0.011131015744775059, 'max_delta_step': 4, 'max_depth': 8, 'min_child_weight': 6, 'subsample': 0.912185615771667}\nprint(best_params)\ntest_pred,train_pred = kfold(5,best_params,train_data,test_data,feature,label)","metadata":{"execution":{"iopub.status.busy":"2024-07-02T13:42:11.255429Z","iopub.execute_input":"2024-07-02T13:42:11.255870Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_pred.to_csv(\"/kaggle/working/submission.csv\")\ntrain_pred.to_csv(\"/kaggle/working/rf_train_pred.csv\")","metadata":{},"execution_count":null,"outputs":[]}]}