You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

修复Kaggle提交文件格式错误以通过ICR竞赛提交

Kaggle ICR-识别年龄相关疾病竞赛提交格式错误修复方案

问题核心原因

  1. 测试样本丢失:代码中对测试集执行了test_df = test_df.dropna(),直接删除了含缺失值的样本,但竞赛要求必须提交所有测试样本的预测结果,不能遗漏任何行,这是提交格式错误的直接原因。
  2. 特征处理不一致:训练阶段直接丢弃了分类特征EJ,既浪费了有效特征,也不符合规范的特征工程流程(虽不直接导致格式错误,但会影响模型性能)。

修复步骤

1. 保留所有测试样本,统一缺失值处理

删除测试集的dropna()操作,改用训练集的统计量填充测试集缺失值(避免数据泄露),示例代码:

# 替换原test_df.dropna(),用训练集中位数填充测试集缺失值
test_df = test_df.fillna(new_df.median())

2. 正确处理分类特征EJ

对训练集和测试集的EJ特征做标签编码,不直接丢弃:

# 训练阶段处理EJ
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
new_df['EJ'] = le.fit_transform(new_df['EJ'])
# 构建特征时保留EJ
x = new_df.drop(['Id', 'Class'], axis=1)

# 测试阶段复用训练集的编码器转换EJ
test_df['EJ'] = le.transform(test_df['EJ'])
# 测试特征仅丢弃Id列
test_x = test_df.drop(['Id'], axis=1)

3. 确保提交格式完全匹配要求

  • 必须包含所有测试样本的Id,行数与测试集完全一致
  • class_0和class_1列必须是0-1之间的概率值(你的代码中1 - predictions.flatten()和predictions.flatten()符合要求)
  • 列名严格为Id、class_0、class_1,大小写和拼写不能出错

修复后的关键代码片段

# --- 训练阶段修正 ---
df = pd.read_csv("/kaggle/input/icr-identify-age-related-conditions/train.csv")
# 用中位数填充训练集缺失值
new_df = df.fillna(df.median())
# 编码EJ特征
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
new_df['EJ'] = le.fit_transform(new_df['EJ'])
# 拆分特征与标签
x = new_df.drop(['Id', 'Class'], axis=1)
y = new_df['Class']

# --- 测试阶段修正 ---
test_df = pd.read_csv("/kaggle/input/icr-identify-age-related-conditions/test.csv")
# 用训练集中位数填充测试集缺失值
test_df = test_df.fillna(new_df.median())
# 转换测试集EJ特征
test_df['EJ'] = le.transform(test_df['EJ'])
# 提取测试特征
test_x = test_df.drop(['Id'], axis=1)
# 生成预测
predictions = model.predict(test_x)
# 构建提交文件
pred_df = pd.DataFrame({'Id': test_df['Id'], 'class_0': 1 - predictions.flatten(), 'class_1': predictions.flatten()})
pred_df.to_csv('submission.csv', index=False)

提交前验证

生成提交文件后,执行以下代码检查格式:

# 验证行数是否匹配
print(f"测试集样本数: {len(test_df)}")
print(f"提交文件样本数: {len(pred_df)}")
# 验证列名
print(pred_df.columns)
# 验证概率值范围
print(f"class_0范围: [{pred_df['class_0'].min():.4f}, {pred_df['class_0'].max():.4f}]")
print(f"class_1范围: [{pred_df['class_1'].min():.4f}, {pred_df['class_1'].max():.4f}]")

内容的提问来源于stack exchange,提问作者cows

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 20:25:13