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

使用SVC多分类模型对全量DataFrame预测时遇特征数不匹配错误求助

解决SVC预测时特征数不匹配的问题

错误原因

你遇到的ValueError核心问题是两次使用了独立的CountVectorizer实例:

  • 训练阶段的tf是基于标注数据(已删除NaN行)拟合出的词汇表,对应8989个特征;
  • 预测全量数据时新创建的tf_entire_df是基于所有文本重新拟合的,包含了更多未标注数据里的新词汇,导致特征数变成36976,和SVC模型训练时的输入维度不匹配。

解决方案:复用训练时的CountVectorizer

不要重新创建新的CountVectorizer,直接用训练阶段已经拟合好的tf实例来转换全量数据,这样生成的特征矩阵维度会和训练时完全一致。

修正后的全量预测代码:

# 直接使用训练时的tf实例执行transform,不要重新fit
X_entire_df = tf.transform(df['documents'])

# 正常执行预测
y_pred_entire_df = model.predict(X_entire_df)

关键说明

  • fit_transform()会同时完成构建词汇表和转换为词矩阵两个操作;
  • transform()只会用已构建好的词汇表转换数据,自动忽略训练时未出现过的新词汇,确保输入特征数和模型训练时一致。

另外,补充修正你训练阶段的一个小问题:你提到步骤1是删除categories含NaN的行,但现有代码里没做这个操作,正确的训练阶段代码应该先过滤标注数据:

# 先过滤出有标注的数据
df_labeled = df.dropna(subset=['categories'])

# 基于标注数据拟合CountVectorizer并转换
tf = CountVectorizer(tokenizer=word_tokenize)
X = tf.fit_transform(df_labeled['documents'])
y = df_labeled['categories']

# 拆分训练集测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 12:45:44