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

将TF-IDF向量与数值特征传入模型fit()时出错的原因及解决方法

问题解决方法

错误原因

你在fit()中传入了包含三个异构特征对象的列表,sklearn分类器要求输入是单一、形状统一的特征矩阵,这种异构输入会触发形状不匹配的报错。

具体修正步骤

1. 修复TF-IDF使用逻辑

不能对question1和question2分别调用fit_transform,这会导致两个特征使用不同词汇表,需先拟合所有文本数据,再分别转换:

# 合并所有问题文本,拟合TF-IDF词汇表
all_questions = pd.concat([X_train['question1'], X_train['question2'], X_test['question1'], X_test['question2']])
tfidf.fit(all_questions)

# 分别转换训练集的两个问题
train_q1 = tfidf.transform(X_train['question1'])
train_q2 = tfidf.transform(X_train['question2'])

2. 合并单样本的文本特征

每个样本包含question1和question2的特征,需将二者横向拼接(按列合并):

from scipy.sparse import hstack

# 拼接训练集的q1、q2文本特征
train_text_features = hstack([train_q1, train_q2])

也可根据任务需求,额外计算两个文本特征的差值、余弦相似度等作为补充特征,再合并。

3. 合并文本与数值特征

文本特征是稀疏矩阵,数值特征是稠密数组,需统一格式后合并:

from scipy.sparse import csr_matrix

# 将数值特征转为稀疏矩阵(避免稠密化占用过多内存)
X_num_train_sparse = csr_matrix(X_num_train)
# 合并文本特征与数值特征
X_train_combined = hstack([train_text_features, X_num_train_sparse])

4. 训练模型

用合并后的统一特征矩阵训练分类器:

log_clf.fit(X_train_combined, y_train)

额外修正:代码语法错误

原代码中TfidfVectorizer定义末尾缺少右括号,需补上:

tfidf = TfidfVectorizer(strip_accents=None,
                       lowercase=True,
                       preprocessor=None, # applied in Data Cleaning
                       use_idf=True,
                       norm='l2',
                       smooth_idf=True)  # 补充右括号

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 19:55:18