将RNN/NLP模型预测结果转换为Kaggle竞赛CSV格式遇阻求助
解决步骤
1. 先正确预处理测试数据
直接把test.csv喂给model.predict会失败,因为测试文本需要和训练数据做完全一致的预处理操作(分词、转序列、长度填充)。假设你训练时用了Tokenizer,按以下流程处理测试数据:
import pandas as pd from tensorflow.keras.preprocessing.text import Tokenizer from tensorflow.keras.preprocessing.sequence import pad_sequences # 加载测试集 test_df = pd.read_csv("./test.csv") # 复用训练时的Tokenizer(必须和训练阶段的词汇表完全一致,不能重新训练) tokenizer = Tokenizer(num_words=NUM_WORDS) # 用训练数据的文本拟合tokenizer(如果之前没保存tokenizer的话) train_df = pd.read_csv("./bbc-text.csv") tokenizer.fit_on_texts(train_df['text']) # 对测试文本执行和训练数据相同的预处理 test_sequences = tokenizer.texts_to_sequences(test_df['text']) test_padded_seq = pad_sequences(test_sequences, maxlen=MAXLEN)
2. 执行预测并转换为类别标签
预处理完成后即可预测,再把模型输出的softmax概率转换为竞赛要求的类别名称:
# 生成预测结果 predictions = model.predict(test_padded_seq) # 取每个样本概率最大的类别索引 predicted_label_indices = predictions.argmax(axis=1) # 映射回原始类别名称(根据你训练时的标签编码规则调整) label_mapping = {0: 'business', 1: 'entertainment', 2: 'politics', 3: 'sport', 4: 'tech'} predicted_categories = [label_mapping[idx] for idx in predicted_label_indices]
3. 生成符合竞赛要求的CSV文件
参照竞赛提供的sample_submission.csv格式,用Pandas生成提交文件:
# 构建提交DataFrame(确保列名、顺序和示例一致) submission_df = pd.DataFrame({ 'id': test_df['id'], # 若test.csv无id列,可改用test_df.index 'category': predicted_categories }) # 保存为CSV,不要保留索引 submission_df.to_csv('./submission.csv', index=False)
关键注意事项
- 预处理逻辑必须和训练阶段完全对齐,包括Tokenizer词汇表、
MAXLEN参数,否则预测结果无效。 - 标签映射要和训练时的编码规则对应,比如你用
LabelEncoder转的数字标签,这里要反向还原。 - 提交的CSV格式必须和竞赛示例文件一致,列名、顺序不能出错。
内容的提问来源于stack exchange,提问作者FastBoi
相关产品推荐
相关产品推荐

