假设我有一个垃圾邮件-非垃圾邮件分类器。如果一封新的电子邮件已经被分类为垃圾邮件,如何确定邮件中的单词主要负责分类器将其分类为垃圾邮件。
例如,如果一封邮件包含以下文本:
Get 10000 dollars free by clicking here.将邮件归类为垃圾邮件的主要单词是“免费10000美元”。
发布于 2016-07-06 02:58:18
这完全取决于您的模型。然而,我将给你一个通用的数学方法,然后几个实用的解决方案
数学解
让我们假设你的分类器在这个意义上是概率的,它为你提供了决策支持(这包括神经网络,朴素贝叶斯,lda,逻辑回归等)。
f(x) = P(ham|x)most_important_feature_if_it_is_classified_as_ham = arg max_i (grad_x[f])_i如果它是垃圾邮件,则对称
most_important_feature_if_it_is_classified_as_spam = arg min_i (grad_x[f])_i您所需要的就是能够区分您的模型。对于许多现有的模型,如神经网络、朴素贝叶斯、lda或逻辑回归,这也是可能的。
实用的解决方案。
对于典型的模型,我列出了几种或多或少直接计算上述内容的方法。
支持向量机(
发布于 2016-07-06 03:01:28
假设您已经使用朴素贝叶斯分类器进行分类,我将回答这个问题。
朴素贝叶斯分类器是一种非常简单的算法,已经成功地应用于垃圾邮件检测领域。
朴素贝叶斯分类器基于条件概率,并使用以下方程:
P (a|b) =P (b|a) *P (a) /P (b)
假设朴素贝叶斯分类器可以将一段文本(电子邮件)分类为两类:spam和not spam。
上面提到的应用于垃圾邮件检测任务的等式可以翻译为:
P(类|文本)=P(文本|类)*P(类)/P(文本)
由于文本是由单词组成的,因此可以将其表示为单词的组合。text -> w1,w2,.....,wn
这就意味着,
类P(
| w1,w2,...,wn) =P (w1,w2,...,wn |类)*P(类)/P (w1,w2,...,wn)
由于朴素贝叶斯分类器做了一个朴素的假设,即单词在条件上彼此独立,这就转化为:
类P(
| w1,w2,...,wn) =P (w1 |类)*P (w2 |类)* ... *P (wn |类)*P(类)
对于所有类(在我们的示例中为‘spam’和'not spam‘)。
我去掉了分母,因为它对于所有的概率都是通用的。
其中,P ( class )是给定类别(“spam”和“not spam”)的概率。假设你有100个训练样本,其中60个是垃圾邮件,40个不是垃圾邮件,那么“垃圾邮件”和“非垃圾邮件”的分类概率将分别为0.6和0.4。
P (w | class)是一个单词给定一个类的概率。在朴素贝叶斯分类器中,计算给定类别中每个单词的概率。
让我们考虑一下你所举的例子,
点击这里免费获得10000美元。
朴素贝叶斯分类器已经计算了单词Get,$,free,by,class在给定的类(垃圾邮件和非垃圾邮件)中出现的概率。
如果句子被分类为垃圾邮件,那么您可以通过找出它们在垃圾邮件和非垃圾邮件类中的概率,找到对句子垃圾邮件贡献最大的单词。
Here您可以找到一个简单的朴素贝叶斯实现,应用于电子邮件中的垃圾邮件检测任务。
发布于 2020-07-10 06:03:14
网站Mail-sort classifier包含有关如何构建邮件分类分类器的教程。在线分类器服务用于基于特定关键字的存在和不存在对每个邮件进行分类。
重要的是,所选的关键字具有很高的区分性。直方图是一种直观地检查每个关键字的信息值的好方法。
确实是一种实用的方法。
https://stackoverflow.com/questions/38208082
复制相似问题