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

SVC文本分类单样本预测报错TypeError: unhashable type: 'csr_matrix'求助

报错原因
  • 直接触发报错的原因:TfidfVectorizer的vocabulary参数要求传入词到索引的映射字典,你直接传入了向量化后的X_train(csr_matrix稀疏矩阵类型),稀疏矩阵属于不可哈希类型,无法作为词汇表的合法输入,直接触发类型错误。
  • 逻辑错误:预测阶段调用fit_transform属于错误操作。fit操作会重新学习词汇表,导致单样本输出的特征维度、特征对应含义和训练模型时的输入完全不匹配,就算词汇表传对了也无法得到正确预测结果。
  • 额外流程缺陷:你先对全量文本做TF-IDF向量化再拆分训练测试集,属于典型的数据泄露问题,测试集的信息会提前泄露到训练阶段,你得到的98.6%准确率存在虚高可能。
正确单样本预测实现

1. 修正后的完整训练流程(解决数据泄露+保存向量化器)

from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.svm import SVC
import pandas as pd

# 加载数据集
df = pd.read_csv("你的数据集路径.csv")
# 先拆分训练集测试集,禁止提前做全量向量化
X_text_train, X_text_test, y_train, y_test = train_test_split(df['text'], df['label'], test_size=0.2, random_state=42)

# 初始化TF-IDF向量化器,仅在训练集文本上fit
tfidf = TfidfVectorizer()
X_train = tfidf.fit_transform(X_text_train)
# 测试集仅调用transform,不要做fit操作
X_test = tfidf.transform(X_text_test)

# 训练SVC模型
clf = SVC(kernel='linear')
clf.fit(X_train, y_train)

# 测试集验证准确率
print(clf.score(X_test, y_test))

2. 单样本预测代码

# 待预测的单条文本
sample_text = "需要预测的文本语句"
# 直接用训练时fit好的tfidf实例调用transform,不要新建向量化器,不要加fit操作
sample_feature = tfidf.transform([sample_text])
# 输出预测标签
pred_label = clf.predict(sample_feature)[0]
print(pred_label)

注意事项

  • 单条文本必须放到列表中传入transform方法,否则会按字符拆分文本,得到错误特征
  • 全程使用训练阶段fit好的同一个TfidfVectorizer实例,不需要新建,也不需要额外指定vocabulary参数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 20:06:07