使用新数据测试文本分类 ML 模型失败

Posted

技术标签:

【中文标题】使用新数据测试文本分类 ML 模型失败【英文标题】:Testing text classification ML model with new data fails 【发布时间】:2020-10-12 17:36:05 【问题描述】:

我已经建立了一个机器学习模型来将电子邮件分类为垃圾邮件。现在我想测试我自己的电子邮件并查看结果。所以我写了以下代码来对新邮件进行分类:

message = """Subject: Hello this is from google security team we want to recover your password. Please contact us 
as soon as possible"""

message = pd.Series([message,])
transformed_message = CountVectorizer(analyzer=process_text).fit_transform(message)
proba = model.predict_proba(transformed_message)[0]

知道process_text 是处理电子邮件的函数,当我运行代码时出现以下错误:

Number of features of the model must match the input. Model n_features is 37229 and input n_features is 13 

请问这是什么问题,我该如何解决?

【问题讨论】:

如果答案解决了您的问题,请接受 - 请参阅What should I do when someone answers my question? 【参考方案1】:

对于此类管道中的所有数据预处理步骤,我们不再拟合,就像您在此处使用(新定义的)计数矢量化器所做的那样。

因此,您不应将fit_transform 与新的计数矢量化器一起使用,而应通过应用其transform 方法来重用现有的计数矢量化器(即与您的训练数据一起使用的计数矢量化器)。这将允许您将新数据映射到与训练数据的 37229 个特征(用于训练模型)相关的映射,而不是当您再次将计数矢量化器拟合到如此短的文本时仅产生 13 个特征。

【讨论】:

以上是关于使用新数据测试文本分类 ML 模型失败的主要内容,如果未能解决你的问题,请参考以下文章

R语言构建文本分类模型并使用LIME进行模型解释实战:文本数据预处理构建词袋模型构建xgboost文本分类模型基于文本训练数据以及模型构建LIME解释器解释一个测试语料的预测结果并可视化

R语言构建文本分类模型并使用LIME进行模型解释实战:文本数据预处理构建词袋模型构建xgboost文本分类模型基于文本训练数据以及模型构建LIME解释器解释多个测试语料的预测结果并可视化

「ML 实践篇」机器学习项目落地

垃圾邮件分类

朴素贝叶斯应用:垃圾邮件分类

朴素贝叶斯应用:垃圾邮件分类