返回列表

#2 solution 0.52521

547. Playground Series - Season 3, Episode 13 | playground-series-s3e13

开始: 2023-04-18 结束: 2023-05-01 临床决策支持 数据算法赛
#2 解决方案 0.52521

#2 解决方案 0.52521

作者: rjZhang97
排名: 第2名
发布时间: 2023-05-08

度假归来后,我非常惊喜地发现自己获得了私人排行榜的第二名!这是我第一次参加竞赛,整个过程非常精彩。我要感谢Kaggle组织了这项竞赛系列,对我们这些新手来说帮助巨大。同时也要感谢所有分享代码、解决方案和经验的人——你们给了我很多启发!

回到正题,我原本想直接分享代码,但发现代码太乱了,甚至不知道从哪开始整理。因此,我决定分享一些我使用过的技巧。

模型选择与参数

我没有在模型上花太多功夫,直接使用了XGB,并采用分层K折交叉验证进行训练。以下是我的参数:

XGBClassifier(objective = 'multi:softprob',
                   tree_method = 'exact',
                   colsample_bytree = 0.6,  
                   gamma = 0.8,  
                   learning_rate = 0.01, 
                   max_depth = 6,
                   min_child_weight = 3, 
                   n_estimators = 300, 
                   subsample = 0.6)

StratifiedKFold(n_splits = 4, random_state = 42, shuffle = True)

特征工程

首先,我借鉴了@sergiosaharovskiy的聚类方法,对同一类别的症状进行聚类。

然后,我组合了每一对特征,并执行了与、或、异或操作,在此过程中生成了超过6000个新特征。

我这样做的原因是考虑到不同人患相同疾病时可能会有不同的症状。例如,我感冒时不会喉咙痛但会头痛,而其他人可能完全相反,或者同时有这两种症状。此外,数据中的特征是"独热编码"格式,由于我不是医学专家,就采用了上述较为简单的方法。

特征选择

接下来,我进行了特征选择。从原始特征作为初始集合开始,我添加新创建的特征,并以模型性能(MAP@3)作为标准,筛选出以下额外特征:

  • 'cluster_0'
  • 'cluster_1'
  • 'cluster_2'
  • 'cluster_3'
  • 'weakness_or_yellow_skin'(虚弱或皮肤发黄)
  • 'jaundice_or_abdominal_pain'(黄疸或腹痛)
  • 'weakness_or_yellow_eyes'(虚弱或眼睛发黄)
  • 'stomach_pain_or_abdominal_pain'(胃痛或腹痛)
  • 'back_pain_or_yellow_skin'(背痛或皮肤发黄)
  • 'toenail_loss_xor_bullseye_rash'(脚趾甲脱落异或靶样皮疹)
  • 'weakness_or_light_sensitivity'(虚弱或畏光)
  • 'yellow_skin_or_prostraction'(皮肤发黄或衰竭)
  • 'coma_or_yellow_skin'(昏迷或皮肤发黄)
  • 'inflammation_or_light_sensitivity'(炎症或畏光)
  • 'weakness_or_urination_loss'(虚弱或排尿困难)
  • 'weakness_or_slow_heart_rate'(虚弱或心率过缓)
  • 'abdominal_pain_or_irritability'(腹痛或易怒)

最后进行训练并提交结果。

这就是我全部的解决方案。在比赛期间,我还尝试了一些特征选择方法,例如Sklearn的SelectKBest和Boruta-SHAP包,但它们在当前数据集上的表现不如上述方法。此外,我最近一直在研究各种特征选择技术,非常渴望与大家讨论。如果你有任何好的建议,请务必告诉我!

同比赛其他方案