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

如何在Keras中获取预测错误数据的索引及对应原始影评文本?

嘿,这个问题我做情感分析项目时也碰到过!其实要定位错误预测的样本一点都不难,核心就是把模型的预测结果和原始数据(包括文本、真实标签、原始索引)对应起来就行。结合你给出的代码片段,我给你一步步拆解实现方法:

第一步:拆分数据时保留原始信息(关键!)

如果你之前只是拆分了特征和标签数组(比如X_train, X_test, y_train, y_test),很容易丢失原始文本和索引的关联。建议直接对完整的DataFrame做拆分,这样测试集里会保留所有原始数据:

# 假设你的原始数据集是df,包含'text'(影评文本)和'label'(0=负向,1=正向)列
train_df, test_df = train_test_split(df, test_size=0.2, random_state=42)

这样test_df里就有每一条测试样本的文本、真实标签,以及原始数据的索引(如果你的df有索引的话)。

第二步:对测试集做和训练时一致的预处理

模型预测的输入格式必须和训练时完全匹配,所以要复用之前的Tokenizer和序列填充逻辑:

# 假设你已经在训练阶段拟合过Tokenizer:
# tokenizer = Tokenizer(num_words=你的词汇量)
# tokenizer.fit_on_texts(train_df['text'])

# 把测试文本转成序列并填充到固定长度
X_test_seq = tokenizer.texts_to_sequences(test_df['text'])
X_test_pad = keras.preprocessing.sequence.pad_sequences(X_test_seq, maxlen=你的max_len)

第三步:获取预测结果并对比真实标签

用模型预测测试集,然后把预测结果和真实标签合并到test_df里,筛选出不一致的样本:

# 获取预测概率,转成二分类标签(假设模型最后用的是sigmoid激活)
y_pred_probs = model.predict(X_test_pad)
y_pred = np.round(y_pred_probs).astype(int).flatten()  # 四舍五入得到0/1标签

# 把预测结果加入test_df
test_df['pred_label'] = y_pred
test_df['true_label'] = test_df['label']

# 筛选出所有预测错误的样本
wrong_predictions = test_df[test_df['pred_label'] != test_df['true_label']]

第四步:查看和导出错误样本

现在wrong_predictions里就包含了所有预测错误的影评文本、真实标签、预测标签,以及原始数据索引。你可以直接查看,或者导出到文件方便后续分析:

print(f"总共错误预测了 {len(wrong_predictions)} 条样本")
print("前5条错误样本详情:")
print(wrong_predictions[['text', 'true_label', 'pred_label']].head())

# 导出到CSV文件
wrong_predictions.to_csv('错误预测样本.csv', encoding='utf-8', index=True)

额外情况:如果已经拆分了X/y数组怎么办?

要是你之前已经拆分了独立的X和y数组,那得提前保存原始索引和文本的关联:

# 拆分前先保存所有文本、标签和原始索引
all_texts = df['text'].values
all_labels = df['label'].values
all_indices = df.index.values

# 拆分时带上索引
X_train, X_test, y_train, y_test, idx_train, idx_test = train_test_split(
    all_texts, all_labels, all_indices, test_size=0.2, random_state=42
)

# 预处理+预测后,创建错误样本DataFrame
y_pred = ...  # 同上生成预测标签
mask = y_pred != y_test  # 错误样本的掩码

wrong_df = pd.DataFrame({
    'original_index': idx_test[mask],
    'text': X_test[mask],
    'true_label': y_test[mask],
    'pred_label': y_pred[mask]
})

print(wrong_df.head())

小提醒

  • 确保预处理的参数(比如max_len、num_words)和训练时完全一致,不然预测结果会失真
  • 如果模型最后用的是softmax激活(比如多分类写法),那要用np.argmax(y_pred_probs, axis=1)来获取类别,而不是round

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:40:09