{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"# K折\nfrom sklearn.model_selection import KFold\n# 基础包\nimport pandas as pd\nimport numpy as np\n\n# 模型\nfrom sklearn.ensemble import RandomForestClassifier\nfrom sklearn.ensemble import GradientBoostingClassifier\nfrom sklearn.neighbors import KNeighborsClassifier\nfrom sklearn.tree import DecisionTreeClassifier\nimport xgboost as xgb\nimport lightgbm as lgb\nfrom catboost import CatBoostClassifier\n# 评价指标\n\nfrom sklearn.metrics import mean_squared_error","metadata":{"execution":{"iopub.status.busy":"2022-07-28T16:53:14.057050Z","iopub.execute_input":"2022-07-28T16:53:14.057530Z","iopub.status.idle":"2022-07-28T16:53:17.429734Z","shell.execute_reply.started":"2022-07-28T16:53:14.057423Z","shell.execute_reply":"2022-07-28T16:53:17.427938Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train = pd.read_csv('../input/spaceship-titanic/train.csv')\ntest = pd.read_csv('../input/spaceship-titanic/test.csv')\nsample = pd.read_csv('../input/spaceship-titanic/sample_submission.csv')","metadata":{"execution":{"iopub.status.busy":"2022-07-28T16:53:17.438503Z","iopub.execute_input":"2022-07-28T16:53:17.439012Z","iopub.status.idle":"2022-07-28T16:53:17.538030Z","shell.execute_reply.started":"2022-07-28T16:53:17.438963Z","shell.execute_reply":"2022-07-28T16:53:17.536950Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# 1、Feature Processing","metadata":{}},{"cell_type":"code","source":"# 用前一行的值填补空值\ntrain.fillna(method='pad',axis=0,inplace=True)\ntest.fillna(method='pad',axis=0,inplace=True)","metadata":{"execution":{"iopub.status.busy":"2022-07-28T16:53:59.457799Z","iopub.execute_input":"2022-07-28T16:53:59.458206Z","iopub.status.idle":"2022-07-28T16:53:59.485677Z","shell.execute_reply.started":"2022-07-28T16:53:59.458174Z","shell.execute_reply":"2022-07-28T16:53:59.484738Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# 类型转换\ntrain['Cabin'] = train['Cabin'].astype(str)\ntrain['PassengerId'] = train['PassengerId'].astype(str)\ncabin = train['Cabin']\nPassengerId = train['PassengerId']\n\n# 分割数据，插入数据集\nfrom sqlalchemy import null\ncabin_list = []\nPassengerId_list = []\n\ndeck_list = []\nnum_list = []\nside_list = []\nPassenger_list = []\nId_list = []\n\n# 分割数据，插入数据集\nfor i in cabin:\n    cabin_list.append(i.split('/'))\n\nfor i_1 in cabin_list:\n    # 处理cabin\n    deck = i_1[0]\n    num = int(i_1[1])\n    side = i_1[2]\n    deck_list.append(deck)\n    num_list.append(num)\n    side_list.append(side)\n\nfor j in PassengerId:\n    PassengerId_list.append(j.split('_'))\n\nfor j_1 in PassengerId_list:\n    Passenger = int(j[0])\n    Id = int(j[1])\n    Passenger_list.append(Passenger)\n    Id_list.append(Id)\n\ntrain.insert(0,'deck',deck_list)\ntrain.insert(1,'num',num_list)\ntrain.insert(2,'side',side_list)\ntrain.insert(3,'Passenger',Passenger_list)\ntrain.insert(4,'Id',Id_list)","metadata":{"execution":{"iopub.status.busy":"2022-07-28T16:54:11.192436Z","iopub.execute_input":"2022-07-28T16:54:11.192839Z","iopub.status.idle":"2022-07-28T16:54:11.262078Z","shell.execute_reply.started":"2022-07-28T16:54:11.192808Z","shell.execute_reply":"2022-07-28T16:54:11.260672Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# 类型转换\ntest['Cabin'] = test['Cabin'].astype(str)\ntest['PassengerId'] = test['PassengerId'].astype(str)\ncabin = test['Cabin']\nPassengerId = test['PassengerId']\n\n# 分割数据，插入数据集\nfrom sqlalchemy import null\ncabin_list = []\nPassengerId_list = []\n\ndeck_list = []\nnum_list = []\nside_list = []\nPassenger_list = []\nId_list = []\n\n# 分割数据，插入数据集\nfor i in cabin:\n    cabin_list.append(i.split('/'))\n\nfor i_1 in cabin_list:\n    # 处理cabin\n    deck = i_1[0]\n    num = int(i_1[1])\n    side = i_1[2]\n    deck_list.append(deck)\n    num_list.append(num)\n    side_list.append(side)\n\nfor j in PassengerId:\n    PassengerId_list.append(j.split('_'))\n\nfor j_1 in PassengerId_list:\n    Passenger = int(j[0])\n    Id = int(j[1])\n    Passenger_list.append(Passenger)\n    Id_list.append(Id)\n\ntest.insert(0,'deck',deck_list)\ntest.insert(1,'num',num_list)\ntest.insert(2,'side',side_list)\ntest.insert(3,'Passenger',Passenger_list)\ntest.insert(4,'Id',Id_list)","metadata":{"execution":{"iopub.status.busy":"2022-07-28T16:54:13.257572Z","iopub.execute_input":"2022-07-28T16:54:13.258070Z","iopub.status.idle":"2022-07-28T16:54:13.495887Z","shell.execute_reply.started":"2022-07-28T16:54:13.258026Z","shell.execute_reply":"2022-07-28T16:54:13.494584Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"drop_columns = ['Name','HomePlanet','Destination','Cabin','PassengerId']\ntrain.drop(drop_columns,axis=1,inplace=True)\ntest.drop(drop_columns,axis=1,inplace=True)","metadata":{"execution":{"iopub.status.busy":"2022-07-28T16:54:15.082512Z","iopub.execute_input":"2022-07-28T16:54:15.082976Z","iopub.status.idle":"2022-07-28T16:54:15.102625Z","shell.execute_reply.started":"2022-07-28T16:54:15.082939Z","shell.execute_reply":"2022-07-28T16:54:15.101391Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# 处理train字符串\nfor i in range(8693):\n    train['deck'][i] = ord(train['deck'][i])\n    train['side'][i] = ord(train['side'][i])\n\n# 处理test字符串\nfor j in range(4277):\n    test['deck'][j] = ord(test['deck'][j])\n    test['side'][j] = ord(test['side'][j])","metadata":{"execution":{"iopub.status.busy":"2022-07-28T16:54:15.894229Z","iopub.execute_input":"2022-07-28T16:54:15.894828Z","iopub.status.idle":"2022-07-28T16:54:23.505433Z","shell.execute_reply.started":"2022-07-28T16:54:15.894792Z","shell.execute_reply":"2022-07-28T16:54:23.504040Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train['CryoSleep'] = train['CryoSleep'].astype('int')\ntrain['VIP'] = train['VIP'].astype('int')\ntrain['deck'] = train['deck'].astype('int')\ntrain['side'] = train['side'].astype('int')","metadata":{"execution":{"iopub.status.busy":"2022-07-28T16:54:29.224203Z","iopub.execute_input":"2022-07-28T16:54:29.224690Z","iopub.status.idle":"2022-07-28T16:54:29.237709Z","shell.execute_reply.started":"2022-07-28T16:54:29.224653Z","shell.execute_reply":"2022-07-28T16:54:29.236068Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test['CryoSleep'] = test['CryoSleep'].astype('int')\ntest['VIP'] = test['VIP'].astype('int')\ntest['deck'] = test['deck'].astype('int')\ntest['side'] = test['side'].astype('int')","metadata":{"execution":{"iopub.status.busy":"2022-07-28T16:54:30.373548Z","iopub.execute_input":"2022-07-28T16:54:30.373991Z","iopub.status.idle":"2022-07-28T16:54:30.385817Z","shell.execute_reply.started":"2022-07-28T16:54:30.373955Z","shell.execute_reply":"2022-07-28T16:54:30.384186Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train['Transported'] = train['Transported'].astype('int')","metadata":{"execution":{"iopub.status.busy":"2022-07-28T16:54:30.682377Z","iopub.execute_input":"2022-07-28T16:54:30.682792Z","iopub.status.idle":"2022-07-28T16:54:30.689593Z","shell.execute_reply.started":"2022-07-28T16:54:30.682758Z","shell.execute_reply":"2022-07-28T16:54:30.688525Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"c = ['deck','num','side','Passenger','Id', 'CryoSleep', 'Age','VIP','RoomService',\n       'FoodCourt','ShoppingMall','Spa','VRDeck']","metadata":{"execution":{"iopub.status.busy":"2022-07-28T16:54:31.466889Z","iopub.execute_input":"2022-07-28T16:54:31.467571Z","iopub.status.idle":"2022-07-28T16:54:31.475322Z","shell.execute_reply.started":"2022-07-28T16:54:31.467529Z","shell.execute_reply":"2022-07-28T16:54:31.473924Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\ntarget = train['Transported']","metadata":{"execution":{"iopub.status.busy":"2022-07-28T16:54:33.053972Z","iopub.execute_input":"2022-07-28T16:54:33.054425Z","iopub.status.idle":"2022-07-28T16:54:33.060574Z","shell.execute_reply.started":"2022-07-28T16:54:33.054381Z","shell.execute_reply":"2022-07-28T16:54:33.059140Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.model_selection import train_test_split\n#划分训练集、测试集\ntrain_data, test_data, train_target, test_target = train_test_split(train[c],target, test_size = 0.3)","metadata":{"execution":{"iopub.status.busy":"2022-07-28T16:54:33.745328Z","iopub.execute_input":"2022-07-28T16:54:33.746467Z","iopub.status.idle":"2022-07-28T16:54:33.757736Z","shell.execute_reply.started":"2022-07-28T16:54:33.746421Z","shell.execute_reply":"2022-07-28T16:54:33.756516Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# 2、Choose model\n\n你可以选择你想要的模型，把注释打开就行，记住只能有一个提交文件","metadata":{}},{"cell_type":"code","source":"'''\n# model\nmodels=[KNeighborsClassifier(),   # k近邻\n        DecisionTreeClassifier(), # 决策树\n        RandomForestClassifier(), # 随机森林\n        GradientBoostingClassifier(), # boosting\n        CatBoostClassifier(),\n        xgb.XGBClassifier(),      # xgb\n        lgb.LGBMClassifier()]      # lgb \n\nfor model in models:\n    clf = model\n    clf.fit(train_data,train_target)\n    test_pred = clf.predict(test_data)\n    score =  mean_squared_error(test_target,test_pred)\n    print(model,\"_MSE:\",score)\n    \n'''","metadata":{"execution":{"iopub.status.busy":"2022-07-28T16:54:35.635376Z","iopub.execute_input":"2022-07-28T16:54:35.636532Z","iopub.status.idle":"2022-07-28T16:54:35.645538Z","shell.execute_reply.started":"2022-07-28T16:54:35.636490Z","shell.execute_reply":"2022-07-28T16:54:35.644469Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"'''\n# Candidate model: LightGBM\nclf = lgb.LGBMClassifier(\n                        objective = 'regression',\n                        learning_rate = 0.03,     #学习率\n                        num_iterations = 346,      #迭代次数\n                        max_depth = -1,             #树的深度\n                        num_leaves = 10,           #叶子节点数\n                        boosting_type = 'gbdt',\n                        min_data_in_leaf = 28,\n                        random_state = 2022,\n                        n_estimators = 100,\n                        feature_fraction = 0.88,   #特征自抽样，防止过拟合\n                        bagging_fraction = 0.97,   #降采样，降拟合\n                        bagging_freq = 33,         #降采样频率\n                        reg_alpha = 21,        #L1正则化\n                        reg_lambda = 0.08,           #L2正则化\n        )\nclf.fit(train_data,train_target)\ntest_pred = clf.predict(test_data)\nscore =  mean_squared_error(test_target,test_pred)\nprint(score) # 0.79331\n\npred = clf.predict(test)\nlast_pred = np.array(pred, dtype = bool)\n\n#Kaggle需要提交最终的csv文件，所以输出一个csv文件：\nsample['Transported']=last_pred\nsample.to_csv('submission.csv', index=False)\n\n'''","metadata":{"execution":{"iopub.status.busy":"2022-07-28T16:54:36.762132Z","iopub.execute_input":"2022-07-28T16:54:36.762573Z","iopub.status.idle":"2022-07-28T16:54:36.772791Z","shell.execute_reply.started":"2022-07-28T16:54:36.762538Z","shell.execute_reply":"2022-07-28T16:54:36.771129Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"'''\n# Candidate model: Catboost\nclf = CatBoostClassifier()\nclf.fit(train_data,train_target)\ntest_pred = clf.predict(test_data)\nscore =  mean_squared_error(test_target,test_pred)\nprint(score) # 0.80547\n\npred = clf.predict(test)\nlast_pred = np.array(pred, dtype = bool)\n\n#Kaggle需要提交最终的csv文件，所以输出一个csv文件：\nsample['Transported']=last_pred\nsample.to_csv('submission_Catboost.csv', index=False)\n'''","metadata":{"execution":{"iopub.status.busy":"2022-07-28T16:54:37.761395Z","iopub.execute_input":"2022-07-28T16:54:37.762414Z","iopub.status.idle":"2022-07-28T16:54:37.770540Z","shell.execute_reply.started":"2022-07-28T16:54:37.762372Z","shell.execute_reply":"2022-07-28T16:54:37.769464Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Candidate model: GradientBoosting\nclf = GradientBoostingClassifier()\nclf.fit(train_data,train_target)\ntest_pred = clf.predict(test_data)\nscore =  mean_squared_error(test_target,test_pred)\nprint(score) # 0.80079\n\npred = clf.predict(test)\nlast_pred = np.array(pred, dtype = bool)\n\n#Kaggle需要提交最终的csv文件，所以输出一个csv文件：\nsample['Transported']=last_pred\nsample.to_csv('submission.csv', index=False)","metadata":{"execution":{"iopub.status.busy":"2022-07-28T16:59:44.969904Z","iopub.execute_input":"2022-07-28T16:59:44.970711Z","iopub.status.idle":"2022-07-28T16:59:45.859981Z","shell.execute_reply.started":"2022-07-28T16:59:44.970663Z","shell.execute_reply":"2022-07-28T16:59:45.858470Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"'''\n# Candidate model: XGBoost\nclf = xgb.XGBClassifier(\n                        max_depth=10,\n                        learning_rate= 0.05,\n                        n_estimators= 81,\n                        booster='gbtree',\n                        min_child_weight= 3,\n                        subsample= 0.69,\n                        colsample_bytree= 1,\n                        reg_alpha= 0.66,\n                        reg_lambda= 9,\n                        random_state= 86)\n\nclf.fit(train_data,train_target)\ntest_pred = clf.predict(test_data)\nscore =  mean_squared_error(test_target,test_pred)\nprint(score) # 0.79448\n\n\npred = clf.predict(test)\nlast_pred = np.array(pred, dtype = bool)\n\n#Kaggle需要提交最终的csv文件，所以输出一个csv文件：\nsample['Transported']=last_pred\n\nsample.to_csv('submission_XGBoost.csv', index=False)\n\n'''","metadata":{"execution":{"iopub.status.busy":"2022-07-28T16:54:42.571152Z","iopub.execute_input":"2022-07-28T16:54:42.571599Z","iopub.status.idle":"2022-07-28T16:54:42.580250Z","shell.execute_reply.started":"2022-07-28T16:54:42.571564Z","shell.execute_reply":"2022-07-28T16:54:42.579436Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# result:\n\n- RandomForest: 0.78302\n- LightGBM: 0.79331\n- Catboost: 0.80547\n- GradientBoosting: 0.80079\n- XGBoost: 0.79448\n\n# choose_model:\nLGB;XGB;Cat;GB","metadata":{}}]}