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

方言文本分类中合并CountVectorizer遇isnan错误及训练预测咨询

方言文本分类:FeatureUnion报错原因及解决方案

错误原因分析

你遇到的这个TypeError,核心问题出在FeatureUnion的使用方式不对。FeatureUnion的作用是把多个特征提取器(比如CountVectorizer这类转换器)组合起来,它需要接收的是未执行fit_transform的转换器实例,但你现在直接传入了MX和XN——这两个是已经通过fit_transform得到的稀疏矩阵,不是转换器对象。当FeatureUnion试图对这些矩阵进行后续处理时,内部调用的isnan函数无法处理稀疏矩阵类型,就抛出了这个错误。

修正后的代码

你需要把FeatureUnion的参数改成两个CountVectorizer的实例,而不是转换后的矩阵。调整后的代码如下:

from sklearn.naive_bayes import MultinomialNB
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.pipeline import FeatureUnion, Pipeline

# 定义两个特征提取器
vectorizerN = CountVectorizer(analyzer='char', ngram_range=(3,4))
vectorizerMX = CountVectorizer(vocabulary=a['vocabs'])  # 假设a['vocabs']是你预先定义的词汇表

# 用FeatureUnion组合特征提取器
combined_features = FeatureUnion([
    ('ngram_char', vectorizerN),
    ('custom_vocab', vectorizerMX)
])

# 查看合并后的特征矩阵(可选)
X_combined = combined_features.fit_transform(X_train)
test_combined = combined_features.transform(test_data)

后续训练与预测流程

接下来有两种常见的方式完成训练和预测:

方式1:先合并特征,再训练分类器

# 合并训练集特征
X_combined = combined_features.fit_transform(X_train)
# 初始化分类器并训练
clf = MultinomialNB()
clf.fit(X_combined, y_train)

# 处理测试集并预测
test_combined = combined_features.transform(test_data)
predictions = clf.predict(test_combined)

方式2:用Pipeline把特征组合和分类器串起来(更推荐)

Pipeline可以把特征提取、分类器训练的流程封装起来,避免手动处理中间步骤,也能防止数据泄露:

# 构建完整的流水线
pipeline = Pipeline([
    ('feature_union', combined_features),
    ('classifier', MultinomialNB())
])

# 直接用流水线训练
pipeline.fit(X_train, y_train)

# 直接预测
predictions = pipeline.predict(test_data)

这样就能解决你之前的错误,顺利完成方言文本分类的训练和预测啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:36:22