一、赛题描述
赛题:Spaceship Titanic - 预测哪些乘客被送往另一个维度
主办方:科大讯飞
主页:https://www.kaggle.com/competitions/spaceship-titanic/overview
欢迎来到 2912 年,您需要数据科学技能来解决宇宙之谜。我们收到了四光年外的信号,情况看起来不太妙。宇宙飞船泰坦尼克号是一个月前发射的星际客轮。船上有近 13,000 名乘客,这艘船开始了处女航,将太阳系的移民运送到围绕附近恒星运行的三颗新可居住的系外行星。
在绕过半人马座阿尔法星前往它的第一个目的地——炎热的巨蟹座 55 E 时,粗心的宇宙飞船泰坦尼克号与隐藏在尘埃云中的时空异常相撞。可悲的是,它遭遇了与 1000 年前同名的串子相似的命运。虽然船完好无损,但几乎有一半的乘客被运送到了异次元!为了帮助救援人员和找回丢失的乘客,您面临的挑战是使用从飞船损坏的计算机系统中恢复的记录来预测哪些乘客被异常运送。
这个赛题可以视为Kaggle titanic乘客幸存预测的复刻比赛,数据集和字段都非常相似。原始titanic比赛由于标签公开,导致竞技性不强。本次比赛更加适合比较模型精度,数据集更大(虽然数据集是虚假合成的)。
评价指标
使用分类准确率进行评价,提交格式如下:
PassengerId,Transported
0013_01,False
0018_01,False
0019_01,False
0021_01,False
etc.
二、数据集内容
在本次比赛中,您的任务是预测在泰坦尼克号飞船与时空异常相撞期间是否有乘客被运送到另一个维度。为了帮助你做出这些预测,你会得到一组从船上受损的计算机系统中存储的个人记录。
文件介绍:
- train.csv – 大约三分之二 (~8700) 乘客的个人记录,用作训练数据。
- test.csv – 其余三分之一(~4300)乘客的个人记录,用作测试数据。您的任务是为该集合中的乘客预测已运输的值。
- sample_submission.csv – 提交样例
字段介绍:
PassengerId
– 每位乘客的唯一 ID。每个 Id 采用 gggg_pp 的形式,其中 gggg 表示乘客旅行的组,pp 是他们在组中的编号。群体中的人通常是家庭成员,但并非总是如此。HomePlanet
– 乘客离开的星球,通常是他们的永久居住星球。CryoSleep
– 指示乘客是否选择在航程期间进入假死状态。处于低温睡眠状态的乘客被限制在他们的客舱内。Cabin
– 乘客入住的客舱编号。采用deck/num/side
的形式,其中side
可以是 Port 的P
或 Starboard 的S
。Destination
– 乘客将要去的星球。Age
– 乘客的年龄。VIP
– 旅客在航程中是否支付了特殊VIP服务费用。RoomService
,FoodCourt
,ShoppingMall
,Spa
,VRDeck
– 乘客在 Spaceship Titanic 的许多豪华设施中的每一个费用。Name
– 乘客的名字和姓氏。Transported
– 乘客是否被运送到另一个维度。这是要预测的列。
数据样例
PassengerId | HomePlanet | CryoSleep | Cabin | Destination | Age | VIP | RoomService | FoodCourt | ShoppingMall | Spa | VRDeck | Name | Transported |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0001_01 | Europa | FALSE | B/0/P | TRAPPIST-1e | 39 | FALSE | 0 | 0 | 0 | 0 | 0 | Maham Ofracculy | FALSE |
0002_01 | Earth | FALSE | F/0/S | TRAPPIST-1e | 24 | FALSE | 109 | 9 | 25 | 549 | 44 | Juanna Vines | TRUE |
0003_01 | Europa | FALSE | A/0/S | TRAPPIST-1e | 58 | TRUE | 43 | 3576 | 0 | 6715 | 49 | Altark Susent | FALSE |
0003_02 | Europa | FALSE | A/0/S | TRAPPIST-1e | 33 | FALSE | 0 | 1283 | 371 | 3329 | 193 | Solam Susent | FALSE |
0004_01 | Earth | FALSE | F/1/S | TRAPPIST-1e | 16 | FALSE | 303 | 70 | 151 | 565 | 2 | Willy Santantines | TRUE |
0005_01 | Earth | FALSE | F/0/P | PSO J318.5-22 | 44 | FALSE | 0 | 483 | 0 | 291 | 0 | Sandie Hinetthews | TRUE |
三、解决方案样例
源码:spaceship-titanic-formal-submission.ipynb
安装
导入开发库
import numpy as np
import pandas as pd
from sklearn.model_selection import StratifiedKFold, train_test_split, RandomizedSearchCV
from sklearn.metrics import accuracy_score, roc_auc_score, log_loss, precision_score, recall_score, f1_score, classification_report, ConfusionMatrixDisplay
import shap
from sklearn.preprocessing import MinMaxScaler as scaler
from sklearn.impute import KNNImputer
from sklearn.ensemble import HistGradientBoostingClassifier as hgbc
from lightgbm import LGBMClassifier as lgbm
import matplotlib.pyplot as plt
import seaborn as sns
from imblearn.over_sampling import SMOTE
from sklearn.cluster import DBSCAN
方案
LGBMClassifier 是 LightGBM 库中用于分类任务的模型类,基于梯度提升决策树(GBDT)算法。它适用于二分类和多分类问题,具有高效、快速和准确的特点。
主要特点:
- 高效性:使用基于直方图的学习技术,能够高效处理数据,减少内存消耗并提高训练速度。
- 快速:由于使用了基于直方图的学习和其他优化技术,LGBMClassifier 在大规模数据集上训练的速度很快。
- 准确性:在决策树的生长过程中使用了一种称为 “goss”(gradient-based one-side sampling)的技术,以更有效地选择需要分裂的叶子节点,有助于提高模型的准确性。
- 支持并行化:支持多线程并行化,在多核处理器上可以更充分地利用计算资源,进一步提高了训练速度。
- 可扩展性:支持大规模数据集的训练和预测,可以在内存有限的情况下处理大量的特征和样本。
lgbm_model = lgbm(boosting_type = 'gbdt', num_leaves = 10, max_depth = -1,
learning_rate= 0.01, n_estimators = 500, objective = 'binary',
force_row_wise = True)
参数解释:
- boosting_type:’gbdt’:表示使用梯度提升决策树(Gradient Boosting Decision Tree)作为提升类型。这是默认值,也是最常用的类型。
- num_leaves:10:每棵树的最大叶子节点数。这个参数控制了树的复杂度,较小的值可以防止过拟合,但可能会限制模型的表达能力。
- max_depth:-1:表示不限制树的最大深度。默认值为 -1,即树的深度可以根据数据自动调整。设置为正整数可以限制树的最大深度,有助于防止过拟合。
- learning_rate:0.01:学习率,控制每次迭代时模型更新的步长。较小的学习率需要更多的迭代次数(即更大的 n_estimators)来达到相同的性能,但通常可以获得更好的泛化能力。
- n_estimators:500:提升树的数量。增加这个值可以提高模型的性能,但也会增加训练时间和内存消耗。
- objective:’binary’:表示模型的目标函数是二分类。其他可能的值包括 ‘multiclass’(多分类)和 ‘regression’(回归)。
- force_row_wise:True:强制使用逐行处理的方式这可以提高模型在处理大规模数据时的性能,特别是在内存有限的情况下。
运行结果
[LightGBM] [Info] Number of positive: 60258, number of negative: 60258
[LightGBM] [Info] Total Bins 2482
[LightGBM] [Info] Number of data points in the train set: 120516, number of used features: 14
[LightGBM] [Info] [binary:BoostFromScore]: pavg=0.500000 -> initscore=0.000000
Your submission was successfully saved!