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

如何将预测值合并到经CountVectorizer转换的Pandas测试数据集

解决方案

核心问题是你直接用train_test_split拆分了向量化后的X和标签y,丢失了原始数据的关联关系。正确的做法是先拆分原始DataFrame,保留测试集的原始数据,再做后续处理。

修改后的代码如下:

def lr_model(df):
    from sklearn.feature_extraction.text import CountVectorizer
    from sklearn.model_selection import train_test_split
    from sklearn.linear_model import LogisticRegression
    import pandas as pd
    import numpy as np

    # 先拆分原始DataFrame,保留测试集的原始数据
    train_df, test_df = train_test_split(df, test_size=0.2, random_state=0)
    
    # 对训练集的text做CountVectorizer拟合和转换
    cv = CountVectorizer()
    X_train = cv.fit_transform(train_df['text'].tolist()).toarray()
    # 对测试集的text用训练好的cv做转换(不要重新fit,避免数据泄露)
    X_test = cv.transform(test_df['text'].tolist()).toarray()
    
    # 提取训练和测试的标签
    y_train = train_df.iloc[:, -1].values
    y_test = test_df.iloc[:, -1].values

    # 训练模型
    classifier = LogisticRegression(random_state=0)
    classifier.fit(X_train, y_train)

    # 预测测试集结果
    y_pred = classifier.predict(X_test)

    # 合并原始测试数据、真实标签和预测标签
    test_df['y_pred'] = y_pred
    # 重命名真实标签列(可根据你的实际列名调整)
    test_df = test_df.rename(columns={test_df.columns[-2]: 'y_true'})
    # 按需选择输出列,比如保留ID、text、真实标签、预测标签
    result = test_df[['ID', 'text', 'y_true', 'y_pred']]  # 替换成你实际的ID列名

    return result

关键改动说明:

  • 先拆分原始df为train_df和test_df,这样test_df完整保留了原始的ID、text和标签数据,不会丢失关联关系。
  • 对训练集的text拟合CountVectorizer,测试集仅做transform操作,避免数据泄露影响模型效果。
  • 直接把预测结果y_pred添加到test_df中,再整理需要的输出列,自然就能关联上原始数据。

如果你的ID列名不是ID,替换成实际列名即可。运行后返回的结果会包含测试集的原始数据、真实标签和预测标签。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 23:10:25