如何将预测值合并到经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
相关产品推荐
相关产品推荐

