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

TfidfVectorizer处理单样本特征不匹配致PassiveAggressiveClassifier预测失败

解决TfidfVectorizer单条样本预测特征维度不匹配问题

问题核心

你对单条测试样本错误调用了fit_transform(),而不是transform()。fit_transform()会重新基于这条样本的词汇生成新的特征空间(仅24个特征),但你的模型是基于训练集113905维特征训练的,两者特征空间完全不匹配,因此触发ValueError。

正确操作流程

  1. 初始化并拟合训练集:先对训练集执行fit_transform(),让TfidfVectorizer学习训练集的词汇表和TF-IDF权重

    from sklearn.feature_extraction.text import TfidfVectorizer
    from sklearn.model_selection import train_test_split
    from sklearn.linear_model import PassiveAggressiveClassifier
    
    # 加载乌克兰语文本数据集,拆分训练/测试集
    X_train, X_test, y_train, y_test = train_test_split(texts, labels, test_size=0.2)
    
    # 初始化带乌克兰停用词的TfidfVectorizer
    tfidf = TfidfVectorizer(stop_words=ukrainian_stopwords)
    
    # 拟合训练集并生成训练向量
    X_train_tfidf = tfidf.fit_transform(X_train)
    
  2. 处理测试样本(包括单条):不管是批量测试集还是单条样本,都只用transform(),复用训练好的特征空间

    # 处理批量测试集(正确操作)
    X_test_tfidf = tfidf.transform(X_test)
    
    # 处理单条测试样本(正确操作)
    single_test_text = ["你的乌克兰语测试文本"]
    single_test_tfidf = tfidf.transform(single_test_text)
    
    # 模型训练与预测
    model = PassiveAggressiveClassifier()
    model.fit(X_train_tfidf, y_train)
    
    # 单条样本预测正常执行
    prediction = model.predict(single_test_tfidf)
    

关键注意事项

  • 绝对不能对测试样本(包括单条)使用fit()或fit_transform(),否则会破坏训练好的特征空间
  • 单条样本必须放在列表中传入transform(),TfidfVectorizer要求输入为可迭代的文本序列,不能直接传入单个字符串

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 16:15:44