如何获得垃圾邮件中的突出词 - 非垃圾邮件分类器?
Posted
技术标签:
【中文标题】如何获得垃圾邮件中的突出词 - 非垃圾邮件分类器?【英文标题】:How to get the prominent word in a spam - non spam classifier? 【发布时间】:2016-11-07 13:33:46 【问题描述】:假设我有一个垃圾邮件-非垃圾邮件分类器。如果一封新邮件已经被分类为垃圾邮件,那么如何判断邮件中的单词主要由分类器将其分类为垃圾邮件。
例如,如果一封邮件包含以下文本:
Get 10000 dollars free by clicking here.
负责将邮件分类为垃圾邮件的主要词是“10000 美元免费”。
【问题讨论】:
您使用什么算法对垃圾邮件进行分类?您使用什么语言来构建模型?如果您是泛泛而谈,那么您的问题不是编程问题,最好发布在Cross Validated 【参考方案1】:这完全取决于您的型号。不过,我会给你一个通用的、数学的方法,然后是几个实用的解决方案
数学解
让我们假设你的分类器是概率的,它为你的决策提供支持(这包括神经网络、朴素贝叶斯、lda、逻辑回归等)
f(x) = P(ham|x)
然后,如果您想回答“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 或逻辑回归等许多现有的网络也是可能的。
实用的解决方案。
我列出了一些或多或少直接计算典型模型的上述方法
线性模型(线性 SVM、逻辑回归等) - 您可以简单地查看权重向量并获取 arg max/arg min 值(因为这是梯度的确切值)。 随机森林 - 在这里你无法区分,因为你没有一个好的、连续的、支持的功能;但是您可以使用内部 features_importance_ measure(在 scikit-learn 的实现中可用),它简单地说明给定特征用于在整个训练集中进行分类的次数。 其他“黑盒”方法 - 您可以使用许多近似方案来进行特征重要性分析。特别是,您可以轻松地估计梯度本身,简单地,对于每个特征(单词)迭代整个训练集(或合理的子集) - 将此特征设置为 0(然后设置为 1)并检查更改了多少分类 - 这将粗略估计此功能的重要性(独立于其他功能)。【讨论】:
【参考方案2】:假设您已使用朴素贝叶斯分类器进行分类,我将回答这个问题。
朴素贝叶斯分类器是一种相当简单的算法,已成功应用于垃圾邮件检测领域。
朴素贝叶斯分类器基于条件概率并利用以下等式:
P(a|b) = P(b|a) * P(a) / P(b)
假设朴素贝叶斯分类器可以将一段文本(电子邮件)分为两类,垃圾邮件和非垃圾邮件。
上面提到的应用于垃圾邮件检测任务的方程可以翻译如下:
P(类|文本)=P(文本|类)* P(类)/P(文本)
由于文本是由单词组成的,它可以表示为单词的组合。文本 -> w1, w2, ....., wn
这意味着,
P (class | w1, w2, ..., wn) = P (w1, w2, ..., wn | class) * P (class) /p (w1, w2, ..., wn)
由于朴素贝叶斯分类器做出朴素假设,即单词在条件下相互独立,因此转换为:
P (class | w1, w2, ... , wn) = P (w1 | class) * P (w2 | class) * ... * P (wn | 类) * P (类)
对于所有类(在我们的示例中为“垃圾邮件”和“非垃圾邮件”)。
我删除了分母,因为它对所有概率都是通用的。
其中,P(类别)是给定类别(“垃圾邮件”和“非垃圾邮件”)的概率。假设您有 100 个训练示例,其中 60 个是垃圾邮件,40 个不是垃圾邮件,那么“垃圾邮件”和“非垃圾邮件”的类别概率分别为 0.6 和 0.4。
P (w | class) 是给定类别的单词的概率。在朴素贝叶斯分类器中,您计算给定类中每个单词的概率。
让我们考虑一下你给出的例子,
点击这里免费获得 10000 美元。
朴素贝叶斯分类器已经计算了在给定类别(垃圾邮件而非垃圾邮件)中您的句子中出现“Get”、“dollar”、“free”、“by”、“click”这些词的概率。
如果句子被归类为垃圾邮件,那么您可以通过找出它们在垃圾邮件和非垃圾邮件类别中的概率来找到对句子的垃圾邮件贡献最大的单词。
Here 你可以找到一个简单的朴素贝叶斯实现应用于电子邮件中的垃圾邮件检测任务。
【讨论】:
【参考方案3】:网站Mail-sort classifier 包含有关如何构建邮件分类分类器的教程。正在使用在线分类器服务根据特定关键字的存在与否对每封邮件进行分类。
重要的是选择的关键字具有很强的辨别力。直方图是一种直观地检查每个关键字的信息价值的好方法。
确实是一种实用的方法。
【讨论】:
以上是关于如何获得垃圾邮件中的突出词 - 非垃圾邮件分类器?的主要内容,如果未能解决你的问题,请参考以下文章