第六届"链接写作过程与写作质量"竞赛解决方案(仅CPU)
[仅CPU]第六届"链接写作过程与写作质量"竞赛解决方案
作者:Kazuki Igeta | 发布日期:2024-01-14

信任CV分数的重要性
基于以下假设,我假设具有更好CV(交叉验证)分数而非LB(公开排行榜)分数的笔记本在私有LB上表现更佳:
-
根据以下观察,我推断具有良好LB分数的公开笔记本存在对LB过拟合的情况:
- 我的CV分数与LB分数之间存在相关性
- 当我计算LB分数优于我的公开笔记本的CV分数时,发现我的笔记本具有更好的CV分数
- 将一些我创建的特征添加到公开笔记本后,CV和LB分数都得到了提升
-
根据以下观察,我推测LB包含比训练数据更容易预测的数据实例。此外,我认为拟合LB会导致模型鲁棒性降低,并增加在私有LB上出现"摇降"的可能性:
背景信息
方法概述
我所有的计算均在CPU上完成,未使用GPU。
预处理
我参考了@kawaiicoderuwu的论文重构笔记本来重建论文。
特征工程与特征选择
我生成的所有特征以及重建的论文已作为公开数据集发布。
在特征工程方面,我的目标是在添加我认为真正有效的特征的同时,尽可能减少特征数量。特征总数仅为169个。这是因为样本量相当小(2471个),我认为数百个特征过多。
我参考了@awqatak创建的银弹笔记本。
例如,我进行了如下特征工程与选择:
- 在获得重建论文的字符级TF-IDF向量后,我引入了额外特征,例如通过TruncatedSVD将n-gram范围为(1, 5)的TF-IDF向量压缩至29维
- 引入表示按下'Ctrl'键次数的特征(因为我认为这可能与论文质量相关)
- 在特征工程后移除了与其他特征相关系数为1或接近1的特征
验证方法
我使用重复分层K折交叉验证来提高OOF预测和CV分数的可靠性:
for i in range(n_repeats):
skf = StratifiedKFold(n_splits=5, random_state=seed ** i, shuffle=True)
模型/算法
我决定在模型选择中优先考虑多样性,而非增加特征数量。为此,我在方法中选择了多种类型的模型。
对于许多模型,我通过特征装袋确保了特征组合的多样性。
此外,我实施了随机种子平均化以进一步提升性能。
Level-0 模型
- LightGBM 分类器
- LightGBM 分类器(ExtraTrees)
- LightGBM 回归器
- LightGBM 回归器(ExtraTrees)
- CatBoost 回归器
- XGBoost 回归器
- RandomForest 回归器
- Ridge
- Lasso
- KNN
- SVR
- LightAutoML
- MLP
- Dense Light
- Dense
- ResNet
- TabPFN
- TabNet
Level-1 模型
- ExtraTree + Bagging
- BayesianRidge
- MLP
Level-2 模型
后处理
私有LB的测试数据可能包含训练数据中不存在的0分论文。但我认为仅凭打字行为无法准确预测0分论文,需要非匿名化的论文。因此我将截断下限设为0.5:
np.clip(submission, 0.5, 6.0)
未生效的方法
- 重建论文的Word2Vec
- 词级TF-IDF
- 原始时间序列数据的NN模型