599. Playground Series - Season 4, Episode 3 | playground-series-s4e3
大家好,
我从未想过会在这里分享我的解决方案。作为一名学生,这是我第一次完整参加Kaggle竞赛。
钢板缺陷预测竞赛 (Playground系列 - 第4赛季第3场)
完整代码:https://www.kaggle.com/code/yunqicao/2nd-place-solution-steel-plate-defect-prediction
我将竞赛提供的数据与原始数据集合并,并排除了具有多个缺陷标签的行(这些样本只占很小比例)。
我创建了新特征并移除了部分特征。特征选择主要基于以下三个方面:
def feature_engineering(data):
# 创建长度与厚度比特征
data['Ratio_Length_Thickness'] = data['Length_of_Conveyer'] / data['Steel_Plate_Thickness']
# 创建标准化厚度特征
data['Normalized_Steel_Thickness'] = (data['Steel_Plate_Thickness'] - data['Steel_Plate_Thickness'].min()) /
(data['Steel_Plate_Thickness'].max() - data['Steel_Plate_Thickness'].min())
# 创建X范围与像素面积乘积特征
data['X_Range*Pixels_Areas'] = (data['X_Maximum'] - data['X_Minimum']) * data['Pixels_Areas']
return data
# 需要移除的特征列表
features_to_drop = ['Y_Minimum', 'Steel_Plate_Thickness', 'Sum_of_Luminosity',
'Edges_X_Index', 'SigmoidOfAreas', 'Luminosity_Index', 'TypeOfSteel_A300']
感谢以下参考资料:
我选择了四种多分类模型:XGBoost、LightGBM、CatBoost和HistGradientBoosting,采用10折交叉验证,并使用Optuna进行超参数优化。最终预测结果取10折预测的平均值。
参考资料:钢板缺陷检测技术探索
我利用折叠文件(OOF)创建了三个模型的集成:
为确保一致性,我复现或调整了这些公开笔记本以生成相同训练-验证分割的OOF文件。使用Nelder-Mead优化算法调整集成权重以优化交叉验证分数。
感谢:XGBoost解决方案
最后阶段,我将自己的提交与优秀的公开提交进行组合,包括:XGBoost集成方案。由于最后阶段提交机会有限,我基于直觉分配权重,最终发现使用平均权重效果良好。
尝试但未成功的方法:
参考方案:基础XGBoost方案
值得注意的是,仅使用平均权重简单集成上述公开笔记本的输出,就能获得优异成绩:
感谢所有人!
衷心感谢所有分享公开笔记本和讨论的参赛者,这些资源极具价值。期待在下一次竞赛中继续交流学习。